root用戶除外 root用戶不受任何限制node
文件:linux
r(read,讀取):對文件而言,具備讀取文件內容的權限;mongodb
w(write,寫入):對文件而言,具備新增、修改文件內容的權限;shell
x(execute,執行):對文件而言,具備執行文件的權限;數據庫
[skyuser1@VM_158_86_centos test]$ll total 0 -r-xr-xr-x 1 skyuser1 skyuser1 0 May 23 17:25 a.txt #沒有w寫入權限 [skyuser1@VM_158_86_centos test]$echo "aaa" > a.txt -bash: a.txt: Permission denied #沒有r讀取權限 [skyuser1@VM_158_86_centos test]$chmod 333 a.txt [skyuser1@VM_158_86_centos test]$ll a.txt --wx-wx-wx 1 skyuser1 skyuser1 0 May 23 17:27 a.txt [skyuser1@VM_158_86_centos test]$cat a.txt cat: a.txt: Permission denied
目錄:apache
r(Read,讀取):具備瀏覽目錄的權限。編程
w(Write,寫入):具備刪除、移動、修改目錄內文件的權限。vim
x(eXecute,執行):該用戶具備進入目錄的權限。centos
exec:安全
#根目錄的目錄權限 [skyuser1@VM_158_86_centos /]$ ll -d dr-xr-xr-x. 20 root root 4096 May 23 11:39 . #沒有寫入權限,因此對於普通用戶而言不能建立任何文件 [skyuser1@VM_158_86_centos /]$ touch a.txt touch: cannot touch ‘a.txt’: Permission denied #不能刪除文件 [skyuser1@VM_158_86_centos /]$ ll /a.txt -rw-r--r-- 1 root root 24 Mar 12 17:34 /a.txt [skyuser1@VM_158_86_centos /]$ rm -rf a.txt rm: cannot remove ‘a.txt’: Permission denied #不能移動文件 [skyuser1@VM_158_86_centos /]$ mv /a.txt /home mv: cannot move ‘/a.txt’ to ‘/home/a.txt’: Permission denied
root用戶 無所不能
[root@VM_158_86_centos /]# touch b.txt [root@VM_158_86_centos /]# ls /b.txt /b.txt
能夠經過sh或bash執行.sh文件
可是不能經過./bill.sh執行文件
[skyuser1@VM_158_86_centos test]$ll bill.sh -rw-rw-r-- 1 skyuser1 skyuser1 23 May 23 17:30 bill.sh [skyuser1@VM_158_86_centos test]$sh bill.sh 123 [skyuser1@VM_158_86_centos test]$./bill.sh -bash: ./bill.sh: Permission denied
感受這個機制仍是有問題的,只要執行bash xxx.sh文件在根目錄下的root .sh文件就能夠執行了
那拿x權限來幹啥呢?
[wuyuhong@VM_158_86_centos temp_bird]$ su - root Password: Last login: Thu May 23 17:54:36 CST 2019 on pts/0 Last failed login: Thu May 23 17:59:49 CST 2019 on pts/0 There was 1 failed login attempt since the last successful login. welcome to my world.please smile [root@VM_158_86_centos ~]# cd / [root@VM_158_86_centos /]# vim test.sh [root@VM_158_86_centos /]# bash test.sh 我是root建立的可執行文件 [root@VM_158_86_centos /]# su - skyuser1 Last login: Thu May 23 17:52:27 CST 2019 on pts/0 welcome to my world.please smile [skyuser1@VM_158_86_centos /]$bash test.sh 我是root建立的可執行文件 [skyuser1@VM_158_86_centos /]$ll test.sh -rw-r--r-- 1 root root 54 May 23 18:00 test.sh
創建一個新的文件或目錄時,該文件的默認權限會根據umask來設定
umask就是指定 目前用戶在創建文件或目錄時候的權限默認值
[root@VM_158_86_centos vbird]# umask 0022 [root@VM_158_86_centos vbird]# umask -S u=rwx,g=rx,o=rx
通常文件的創建不該該有執行權限,通常文件一般用於數據的記錄,因此不須要x權限
-rw-rw-rw-
目錄的x權限決定用戶是否能進入該目錄,因此通常須要x權限
drwxrwxrwx
umask的分數指的是該默認值須要減掉的權限
因此上面減下來:
-rw-r--r-- drwxr-xr-x
出於安全考慮root的默認umask 022,普通用戶的默認umask 002,保留同羣組的寫入權利
操做:
+ :增長一個特殊參數 - :移除一個特殊參數 = :設定一個特殊參數
option:
a:這個文件只能新增數據,不能刪除,修改數據,只有root能設定 i:不能刪除,更名,設定連結,沒法新增編輯數據,只有root能設定
command:
lsattr [-adR] file Or Directory -a:隱藏文件的屬性顯示出來 -d: 目錄自己的隱藏屬性 -R:連同子目錄也一併列出來
chattr:
chattr +aiS testFile
rwt
rws
[root@VM_158_86_centos ~]# ll -d /tmp drwxrwxrwt. 7 root root 4096 5月 27 03:31 /tmp [root@VM_158_86_centos ~]# ll /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
/etc/shadow:保存着帳戶信息
[root@VM_158_86_centos ~]# ll /etc/shadow ---------- 1 root root 1133 May 23 17:55 /etc/shadow
/etc/shadow這個文件只有root能夠讀寫
但普通用戶能經過/usr/bin/passwd命令執行寫入或更改密碼的操做,也就是能夠經過passwd向文件/etc/shadow寫入修改數據的緣由就是SUID
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
[wuyuhong@VM_158_86_centos ~]$ passwd Changing password for user wuyuhong. Changing password for wuyuhong. (current) UNIX password: New password: Retype new password: passwd: all authentication tokens updated successfully.
SUID生效過程
wuyuhong對於/usr/bin/passwd具備x權限,表示wuyuhong能執行passwd passwd的擁有者是root; wuyuhong執行passwd的過程,會<暫時>得到root的權限; /etc/shadow就能夠被wuyuhong所執行的passwd所修改;prefect
然而
[wuyuhong@VM_158_86_centos ~]$ cat /etc/shadow cat: /etc/shadow: Permission denied [wuyuhong@VM_158_86_centos ~]$ ll /usr/bin/cat -rwxr-xr-x 1 root root 54160 Oct 31 2018 /usr/bin/cat
cat指令沒有SUID屬性,so 不能cat /etc/shadow
SUID只對二進制可執行文件有效
locate指令具備SGID屬性
[root@VM_158_86_centos ~]# ll /usr/bin/locate -rwx--s--x 1 root slocate 40520 Apr 11 2018 /usr/bin/locate
locate的本質是去查詢/var/lib/mlocate/mlocate.db數據庫,從而獲取結果
updatedb手動更新數據庫,更新新增的文件、配置等
[root@VM_158_86_centos ~]# ll /var/lib/mlocate/mlocate.db -rw-r----- 1 root slocate 3107582 May 27 16:13 /var/lib/mlocate/mlocate.db
這裏能夠看出只有root能讀寫mlocate.db,slocate羣組能讀取mlocate.db
見證奇蹟
[root@VM_158_86_centos ~]# ll /usr/bin/locate -rwx--s--x 1 root slocate 40520 Apr 11 2018 /usr/bin/locate [root@VM_158_86_centos ~]# ll /var/lib/mlocate/mlocate.db -rw-r----- 1 root slocate 3107582 May 27 16:13 /var/lib/mlocate/mlocate.db [root@VM_158_86_centos ~]# su - wuyuhong Last login: Mon May 27 16:13:58 CST 2019 on pts/0 welcome to my world.please smile [wuyuhong@VM_158_86_centos ~]$ locate /usr/bin/passwd /usr/bin/passwd
[root@VM_158_86_centos ~]# ll /usr/bin/locate -rwx--s--x 1 root slocate 40520 Apr 11 2018 /usr/bin/locate 和SUID很類似,locate的other用戶執行權限是x,具備執行權限 locate羣組擁有者是slocate 執行locate的過程,會<暫時>得到slocate的權限; so.slocate能夠讀取mlocate;prefect
SGID對二進制程序有用; 程序執行者對於該程序來講,需具有x的權限; 執行者在執行的過程當中會得到該程序羣組的支持
SGID不只對二進制可執行文件有效,對目錄依然有效
用戶若對於此目錄具備r與x權限,該用戶可以進入此目錄; 用戶在此目錄下的有效羣組(effective group)將變成該目錄的羣組; 用途:若用戶在此目錄下具備w權限,則使用者所創建的新文件,該新文件的羣組與此目錄的羣組相同
模擬測試:
[root@VM_158_86_centos ~]# groupadd project [root@VM_158_86_centos ~]# useradd -G project pro_user1 [root@VM_158_86_centos ~]# useradd -G project pro_user2 [root@VM_158_86_centos ~]# id pro_user1 uid=1006(pro_user1) gid=1011(pro_user1) groups=1011(pro_user1),1010(project) [root@VM_158_86_centos ~]# id pro_user2 uid=1007(pro_user2) gid=1012(pro_user2) groups=1012(pro_user2),1010(project) [root@VM_158_86_centos ~]# mkdir /srv/prohome [root@VM_158_86_centos ~]# ll -d /srv/prohome/ drwxr-xr-x 2 root root 4096 May 27 16:51 /srv/prohome/ [root@VM_158_86_centos ~]# chgrp project /srv/prohome/ [root@VM_158_86_centos ~]# chmod 770 /srv/prohome/ [root@VM_158_86_centos ~]# ll -d /srv/prohome/ drwxrwx--- 2 root project 4096 May 27 16:51 /srv/prohome/ [root@VM_158_86_centos ~]# su - pro_user1 welcome to my world.please smile [pro_user1@VM_158_86_centos ~]$ cd /srv/prohome/ [pro_user1@VM_158_86_centos prohome]$ touch abc.txt [pro_user1@VM_158_86_centos prohome]$ exit logout [root@VM_158_86_centos ~]# su - pro_user2 welcome to my world.please smile [pro_user2@VM_158_86_centos ~]$ cd /srv/prohome/ [pro_user2@VM_158_86_centos prohome]$ echo "hello" > abc.txt -bash: abc.txt: Permission denied [pro_user2@VM_158_86_centos prohome]$ ll abc.txt -rw-rw-r-- 1 pro_user1 pro_user1 0 May 27 17:14 abc.txt
abc.txt文件屬於pro_user1的用戶,同時也屬於pro_user1
所以 pro_user2沒有寫入權限 只有r只讀權限
這時就須要賦予/srv/prohome/的SGID權限 讓pro_user1和pro_user2建立的文件爲project羣組文件
[pro_user1@VM_158_86_centos ~]$ cd /srv/prohome/ [pro_user1@VM_158_86_centos prohome]$ touch hello [pro_user1@VM_158_86_centos prohome]$ ll hello -rw-rw-r-- 1 pro_user1 project 0 May 27 22:37 hello su: Authentication failure [pro_user1@VM_158_86_centos prohome]$ su - root Password: Last login: Mon May 27 22:28:36 CST 2019 from 183.220.26.92 on pts/0 welcome to my world.please smile [root@VM_158_86_centos ~]# su - pro_user2 Last login: Mon May 27 17:14:36 CST 2019 on pts/0 Last failed login: Mon May 27 22:38:49 CST 2019 on pts/0 There was 1 failed login attempt since the last successful login. welcome to my world.please smile [pro_user2@VM_158_86_centos ~]$ cd /srv/prohome/ [pro_user2@VM_158_86_centos prohome]$ echo "123" > hello [pro_user2@VM_158_86_centos prohome]$ cat hello 123
添加SGID後建立的文件就爲同組的主組project 同組的成員就能夠訪問和修改文件了
只對目錄有效
當用戶對於此目錄具備w,x權限,即具備寫入權限時; 當用戶在該目錄下創建文件或目錄時,僅有本身和root纔有權利操做該文件
意思就是隻有本身能操做該目錄下本身建立的文件,不能操做其餘人建立的文件,其餘人(同組,或other具備權限)有執行權限,也不能操做個人文件,我有其餘人(同組,或other具備權限)的執行權限,也不能操做其餘人的文件
4爲SUID 2爲GID 1爲SBIT chmod 4755 XXX; chmod 7755 XXX; chmod u=rwxs,go=x XXX; chmod u+s g+s o+t XXX chmod 7666 test;ls -l test; -rwSrwSrwT 666表示沒有執行權限 因此這裏設置7,因此爲SST,SST表示無效狀態
傳統的Linux權限只能針對一個用戶(建立者),一個羣組以及非此羣組的其餘人設定權限 假如我須要對該文件設定3個不一樣用戶,兩個不一樣羣組的不一樣權限此時應該怎麼辦? 傳統的權限控制是沒法作到的,只有用ACL這個更細緻的權限控制能夠解決, 而傳統的權限控制控制了一個大的範圍,ACL再細分小的範圍,真是太完美啦
那 ACL 主要能夠針對哪些方面來控制權限呢?他主要能夠針對幾個項目:
使用者 (user):能夠針對使用者來配置權限; 羣組 (group):針對羣組爲對象來配置其權限; 默認屬性 (mask):還能夠針對在該目錄下在建立新文件/目錄時,規範新數據的默認權限;
getfacl setfacl
系統帳號的shell就是使用/sbin/nologin, 重點在於系統帳號是不須要登陸的,因此就給他這個沒法登陸的合法shell, 這個帳號雖然沒法登陸,可是可使用其餘的系統資源、 ex: WWW這個服務由apache這個帳號在管理 mongodb這個數據庫服務由mongodb帳號在管理
su與su -
爲了安全起見,儘可能以通常身份使用者來操做linux的平常做業, 等到須要設定系統環境時,才變成爲root來進行系統管理
#使用su切換身份時,讀取的變量設定方式爲non-login shell,這種方式不少本來的變量不會改變 [wuyuhong@VM_158_86_centos ~]$ su root Password: welcome to my world.please smile [root@VM_158_86_centos wuyuhong]# env | grep "wuyuhong" USER=wuyuhong PATH=/root/.nvm/versions/node/v10.7.0/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/wuyuhong/.local/bin:/home/wuyuhong/bin MAIL=/var/spool/mail/wuyuhong PWD=/home/wuyuhong LOGNAME=wuyuhong #從普通用戶使用su切換至root,當前shell的部分環境變量不會被改變 #然而使用su - 則是使用login-shell的方式切換用戶,此時環境變量將徹底改變 [wuyuhong@VM_158_86_centos ~]$ su - root Password: Last login: Sun Jun 16 19:10:04 CST 2019 on pts/0 welcome to my world.please smile [root@VM_158_86_centos ~]# env | grep 'root' NVM_DIR=/root/.nvm USER=root MAIL=/var/spool/mail/root PATH=/root/.nvm/versions/node/v10.7.0/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin PWD=/root HOME=/root LOGNAME=root NVM_BIN=/root/.nvm/versions/node/v10.7.0/bin
這種方式雖然很方式方便,可是須要知道root密碼才行,因此不太安全
一開始系統默認僅有root能夠執行sudo
sudo能夠切換身份來進行某項任務
ex:當咱們須要使用apache的帳號來執行WWW某項服務時,可是 apache是/sbin/nologin的,沒法使用su -進行切換,這時就要使用sudo來執行了。
sudo的執行流程:
1.當用戶執行sudo時,系統會搜索/etc/sudoers文件中該使用者是否有執行sudo的權限 2.若是有權限,輸入密碼確認 3.密碼成功,便開始sudo的後續接的命令
編輯/etc/sudoers來管理sudo的使用者和使用範圍
PAM是一套應用程序編程接口,他提供了一連串的驗證機制, 只要使用者將驗證階段的需求告知PAM後,PAM就能回報使用者驗證結果
PAM重點在於/etc/pam.d/裏面的配置文件