標籤:補碼 怎麼辦 執行者 linux雲端運算 公眾號 tps sdn linux bit
本節所講內容:
- 7.1檔案的基本許可權:r w x (UGO)- 7.2檔案的特殊許可權:suid sgid sticky和檔案延伸權限ACL- 7.3實戰:建立一個讓root都無法刪除的檔案- 7.1 檔案的基本許可權- 7.1.1 許可權的作用
通過對檔案設定許可權可以達到以下三種訪問限制許可權:
- 只允許使用者自己訪問;
- 允許一個預先指定的使用者組中的使用者訪問;
- 允許系統中的任何使用者訪問。
7.1.2 查看許可權
[[email protected] ~]# ll /etc/passwd-rw-r--r--. 1 root root 2053 9月 19 2017 /etc/passwd
檔案許可權基本解釋:
- rw- r-- r--. 1 root root 2053 9月 19 2017 /etc/passwd- rwx r-x r-x user1 user1 time FILENAME
檔案類型 擁有者的許可權 所屬組的許可權 其他人的許可權 擁有者 屬組 最後修改時間 對象
- 其中:檔案類型,可以為p、d、l、s、c、b和 –
- p表示具名管道檔案
- d表示目錄檔案
- l表示符號串連檔案
- -表示普通檔案
- s表示socket套介面檔案,比如我們啟用mysql時,會產生一個mysql.sock檔案
- c表示字元裝置檔案,例: 虛擬控制台 或tty0
- b表示塊裝置檔案 例: sda, cdrom
例:
[[email protected] ~]# ll /dev/sda /dev/cdrom /etc/passwd /dev/tty0lrwxrwxrwx 1 root root 3 9月 19 2017 /dev/cdrom -> sr0brw-rw---- 1 root disk 8, 0 9月 19 2017 /dev/sdacrw--w---- 1 root tty 4, 0 9月 19 2017 /dev/tty0-rw-r--r--. 1 root root 2053 9月 19 2017 /etc/passwd
如下:
7.1.3 許可權說明
對於檔案來說:
對於目錄來說:
- r:讀(看到目錄裡面有什麼) ls
- w:在目錄裡面建檔案,刪除,移動 touch mkdir rm mv cp
- x:進入 cd cat
7.1.4 檔案擁有者
- UGO:所有者--使用者組--其它使用者
- 所有者: 就是建立檔案的使用者,這個使用者擁有對它所建立的檔案的一切許可權,所有者可以允許其所在的使用者組可以訪問所有者的檔案。
- 使用者組:
使用者組是具有相同特徵使用者的邏輯集合,有時我們需要讓多個使用者具有相同的許可權,比如查看、修改某一個檔案的許可權,一種方法是分別對多個使用者進行檔案訪問授權,如果有10個使用者的話,就需要授權10次,顯然這種方法不太合理;另一種方法是建立一個組,讓這個組具有查看、修改此檔案的許可權,然後將所有需要訪問此檔案的使用者放入這個組中,那麼所有使用者就具有了和組一樣的許可權。這就是使用者組。
- 其它使用者:系統內的其他所有者使用者就是other使用者類
7.1.5 舉例說明7.1.5.1 常見幾種檔案許可權組成
- rwx --- ---:檔案所有者對檔案具有讀取、寫入和執行的許可權。
- rwx r-- r--: 檔案所有者具有讀、寫與執行的許可權,使用者組裡使用者及其他使用者則具有讀取的許可權
- rw- rw- r-x:檔案所有者與同組使用者對檔案具有讀寫的許可權,而其他使用者僅具有讀取和執行的許可權。
- drwx--x—x: 目錄所有者具有讀寫與進入目錄的許可權,其他使用者近能進入該目錄,卻無法讀取任何資料。
- drwx------: 除了目錄所有者具有完整的許可權之外,其他使用者對該目錄完全沒有任何許可權。
舉例如下:
每個使用者都擁有自己的專屬目錄,通常放置/home下
- [[email protected] home]# ll /home/
- 總用量 0
- drwx------. 3 mk mk 78 9月 19 2017 mk
- 註: [rwx------]表示目錄所有者本身擁有的許可權,其它使用者是無法進入的。 root可以。
例2: 你以什麼使用者身份登入,那麼你建立的檔案或目錄,自動成為該檔案的所屬主和組
- [[email protected] home]# su - mk
上一次登入:二 9月 19 12:57:21 CST 2017:0 上
[[email protected] ~]$ [[email protected] ~]$ touch a.txt[[email protected] ~]$ ll a.txt -rw-rw-r-- 1 mk mk 0 5月 8 20:58 a.txt
7.1.5.2 變更檔的屬主和屬組
- 改變檔案的所屬關係用到命令:
- chown:可以用來改變檔案(或目錄)的屬主
- chgrp:可以用來改變檔案(或目錄)的預設屬組
- 如果你要對目錄進行操作,加參數 -R
chown
文法:
chown user:group filename 比如:chown hr:san a.txt 把檔案的屬主和屬組改為hr,sanchown user filename 比如:chown san a.txt 把檔案的屬主改為san使用者chown :group filename 比如: chown :miao a.txt 把檔案的屬組改為miao這個組chown user: filename 比如:chown san: a.txt 自動繼承這個使用者所有的組chgrp hr filename 比如: chgrp hr f.txt -R :遞迴(目錄下的所有內容都更改,否則只修改目錄)
例:
[[email protected] ~]# touch {a,b,c}.txt[[email protected] ~]# ll *.txt-rw-r--r-- 1 root root 0 5月 8 21:03 a.txt-rw-r--r-- 1 root root 0 5月 8 21:03 b.txt-rw-r--r-- 1 root root 0 5月 8 21:03 c.txt[[email protected] ~]# chown mk a.txt[[email protected] ~]# ll a.txt -rw-r--r-- 1 mk root 0 5月 8 21:03 a.txt[[email protected] ~]# chown mk:mk a.txt[[email protected] ~]# ll a.txt -rw-r--r-- 1 mk mk 0 5月 8 21:03 a.txt[[email protected] ~]# chown :root a.txt[[email protected] ~]# ll a.txt -rw-r--r-- 1 mk root 0 5月 8 21:03 a.txt
互動:一個檔案只有讀的許可權,擁有者是否可以寫這個檔案?
實驗:
[[email protected] ~]# su - mk
[[email protected] ~]$ touch a.txt[[email protected] ~]$ ll a.txt -rw-rw-r-- 1 mk mk 0 5月 8 21:07 a.txt
在另一個終端上,以root身份登入:
[[email protected] ~]# chmod 000 /home/mk/a.txt #修改成000許可權[[email protected] ~]# ll /home/mk/a.txt ---------- 1 mk mk 14 5月 8 21:08 /home/mk/a.txt
回到以mk身份登入的終端:
[[email protected] ~]$ vim a.txt # 寫入aaa , :wq! 儲存
在另一個終端上,以root身份登入:
[[email protected] ~]# cat /home/mk/a.txt aaaaa
實驗結果:檔案所有者一定可以寫檔案。 就像root可以對shadow強制寫。 因shadow的擁有者是root
Linux架構師高薪入口:
1.學神IT教育官方網站: http://xuegod.ke.qq.com
2.10年行業資深老鳥MK:QQ2659153446
3.加入Linux技術交流QQ群:722287089,即可獲得以下福利:
①定期分享免費學習資料與視頻(工具+筆記+拓展實戰)
②10年行業資深老鳥線上答疑:技能+實戰+項目分享+高薪就業
③有機會免費領取Linux雲端運算叢集架構師4冊書籍
7.1.6 修改許可權7.1.6.1 使用字元設定
修改許可權用的命令:chmod
- 作用:修改檔案,目錄的許可權
- 文法:chmod [對誰操作] [操作符] [賦於什麼許可權] 檔案名稱
對誰操作:
- u----> 使用者user,表示檔案或目錄的所有者
- g---->使用者組group,表示檔案或目錄所屬的使用者組
- o---->其它使用者others
- a---->所有使用者all
操作符:
- #添加許可權 ; - # 減少許可權 ; = #直接給定一個許可權
許可權:r w x
例如下在的組合:
u-w user 擁有者
g+x group 組
o=r other 其他人
- a+x all 所有人
例:chmod修改許可權
[[email protected] ~]# touch 1.txt[[email protected] ~]# ll 1.txt -rw-r--r-- 1 root root 0 5月 8 21:20 1.txt[[email protected] ~]# [[email protected] ~]# chmod u-w 1.txt[[email protected] ~]# ll 1.txt -r--r--r-- 1 root root 0 5月 8 21:20 1.txt[[email protected] ~]# chmod g+x 1.txt[[email protected] ~]# ll 1.txt -r--r-xr-- 1 root root 0 5月 8 21:20 1.txt[[email protected] ~]# chmod a+x 1.txt # 給shell指令碼加一個可執行許可權[[email protected] ~]# ll 1.txt -r-xr-xr-x 1 root root 0 5月 8 21:20 1.txt[[email protected] ~]# [[email protected] ~]# chmod a=rwx 1.txt[[email protected] ~]# ll 1.txt -rwxrwxrwx 1 root root 0 5月 8 21:20 1.txt
7.1.6.2 使用八進位(0-7)數字表示許可權法
許可權 二進位值 八進位值 描述
- --- 000 0 沒有任何許可權
- --x 001 1 只有執行許可權
- -w- 010 2 只有寫入許可權
- -wx 011 3 有寫入和執行許可權
- r-- 100 4 只有讀取許可權
- r-x 101 5 有讀取和執行許可權
- rw- 110 6 有讀取和寫入許可權
- rwx 111 7 有全部許可權
例1:
例2:
- 互動:rw- 的值是多少? 答: 4+2=6
- rwx r-x r-x 的值是多少? 答: rwx=4+2+1=7 ; r-x=4+1=5 rwx
r-x r-x=7 5 5
文法:
chmod 755 檔案或檔案夾名字chmod a=rwx b.txt 等於 chmod 777 b.txt
例:
[[email protected] ~]# touch dd.txt[[email protected] ~]# ll dd.txt -rw-r--r-- 1 root root 0 5月 8 21:40 dd.txt[[email protected] ~]# chmod 755 dd.txt [[email protected] ~]# ll dd.txt -rwxr-xr-x 1 root root 0 5月 8 21:40 dd.txt[[email protected] ~]# chmod 700 dd.txt [[email protected] ~]# ll dd.txt -rwx------ 1 root root 0 5月 8 21:40 dd.txt
7.1.7 許可權對檔案和目錄的影響
有三種許可權可以應用:讀取,寫入與執行,這些許可權對訪問檔案和目錄的影響如下:
許可權 對檔案的影響 對目錄的影響
- r(讀取) 可以讀取檔案的內容 可以列出目錄的內容(檔案名稱)
- w(寫入) 可以變更檔的內容 可以建立或刪除目錄中的任意檔案
- x(執行) 可以作為命令執行檔案 可以訪問目錄的內容(取決於目錄中檔案的許可權)
7.1.8 補碼
為什麼我們建立的檔案的許可權是644呢?
我們建立檔案的預設許可權是怎麼來的?
umask命令允許你設定檔案建立時的預設模式,對應每一類使用者(檔案屬主、同組使用者、其他使用者)存在一個相應的umask值中的數字檔案預設許可權=666 ,目錄預設許可權=777我們一般在/etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中設定umask值。永久生效,編輯使用者的設定檔vim .bash_profile [[email protected] ~]# vim /etc/profile
註: UID大於199 且使用者的組名和使用者名稱一樣,那麼 umask值為002,否則為022.
註: -gt 在shell中表示大於; id -g 顯示使用者組ID ,id -gn顯示組名。
臨時生效: umask 許可權補碼
[[email protected] ~]# umask 044[[email protected] ~]# touch ss.txt[[email protected] ~]# ll ss.txt -rw--w--w- 1 root root 0 5月 8 21:47 ss.txt
許可權的演算法:一般情況是:目錄預設許可權-umask 值
666-022=644 777-022=755 #這是一個好的記憶方法,但不嚴謹。
互動:umask掩碼為033 建立普通檔案後,許可權是什嗎?
互動:umask掩碼為033 建立普通檔案後,許可權是什嗎? 666-033=633 ( rw- -wx -wx) ?
例:[[email protected] ~]# umask 033[[email protected] ~]# touch k.txt[[email protected] ~]# ll k.txt -rw-r--r-- 1 root root 0 5月 8 22:00 k.txt答:結果為: 644
許可權科學的計算方法:
- 1、將預設許可權(目錄777,檔案666)和umask值都轉換為2進位 2、對umask取反 3、將預設許可權和umask取反後的值做與運算
4、將得到的二進位值再轉換8進位,即為許可權,
例1: umask 為022
6 6 6 umask 0 2 2110 110 110 000 010 010 # 轉成二進位 111 101 101 # umask取反的值110 110 110 與 #第二步,預設許可權和umask取反後的值做與運算111 101 101 # umask取反的值110 100 1006 4 4 #轉成8進位
例2: umask 為033 結果為: 644
6 6 6 umask 0 3 3110 110 110 000 011 011 # 轉成二進位 111 100 100 # umask取反的值110 110 110 與 #預設許可權和umask取反後的值做與運算111 100 100 # umask取反的值110 100 1006 4 4 #轉成8進位
Linux架構師高薪入口:
1.學神IT教育官方網站: http://xuegod.ke.qq.com
2.10年行業資深老鳥MK:QQ2659153446
3.加入Linux技術交流QQ群:722287089,即可獲得以下福利:
①定期分享免費學習資料與視頻(工具+筆記+拓展實戰)
②10年行業資深老鳥線上答疑:技能+實戰+項目分享+高薪就業
③有機會免費領取Linux雲端運算叢集架構師4冊書籍
7.2 檔案的特殊許可權:suid sgid sticky和檔案延伸權限ACL
7.2.1 檔案的特殊許可權:suid sgid sticky
- 1、SUID(set uid設定使用者ID):限定:只能設定在二進位可執行程式上面。對目錄設定無效
功能:程式運行時的許可權從執行者變更成程式所有者的許可權
- 2、SGID:限定:既可以給二進位可執行程式設定,也可以對目錄設定
功能:在設定了SGID許可權的目錄下建立檔案時,新建立的檔案的所屬組會,繼承上級目錄的所屬組
- 3、Stickybit:粘滯位許可權是針對目錄的,對檔案無效,也叫防刪除位元 這3個特殊許可權對應的數值為
SUID SGID Stickybit
- u+s或u=4 g+s或g=2 o+t或o=1
SUID屬性一般用在可執行檔上,當使用者執行該檔案時,會臨時擁有該執行檔案的所有者許可權。使用”ls -l” 或者”ll”
命令瀏覽檔案時,如果可執行檔所有者許可權的第三位是一個小寫”s”,就表明該執行檔案擁有SUID屬性。比如/usr/bin/passwd檔案
**互動: 普通使用者mk,沒有對shadow檔案寫入的許可權, 但是mk使用者使用passwd修改自己密碼時,可以修改shadow檔案中的內容,這是什麼原因?
[[email protected] ~]# ll /etc/shadow
----------. 1 root root 1179 9月 19 2017 /etc/shadow
[[email protected] ~]# su - mk
上一次登入:二 5月 8 21:07:24 CST 2018pts/0 上
[[email protected] ~]$ passwd
更改使用者 mk 的密碼 。
為 mk 更改 STRESS 密碼。
(當前)UNIX 密碼:123456
新的 密碼:Xuegod666
重新輸入新的 密碼:Xuegod666
passwd:所有的身分識別驗證令牌已經成功更新。
[[email protected] ~]# vim /etc/shadow #查看shadow檔案已經被mk使用者修改成功。
因為mk使用者執行passwd命令時,許可權會提升成root使用者,所以可以修改成功。**
例2:
[[email protected] ~]# useradd mk[[email protected] ~]# su - mk[[email protected] ~]$less /etc/shadow #看不到內容[[email protected] ~]# su - root[[email protected] ~]# chmod u+s /usr/bin/less #切換到root,給一個suid許可權[[email protected] ~]# su - mk[[email protected] ~]$ less /etc/shadow #看到
查看u+s後的效果:
[[email protected] ~]# ll /usr/bin/less-rwsr-xr-x 1 root root 154536 Sep 26 2011 /usr/bin/less[[email protected] ~]# ps -axu | grep lessroot 43407 0.0 0.0 110260 980 pts/0 S+ 22:30 0:00 less /etc/shadow
另外:
[[email protected] ~]# chmod 4755 /usr/bin/less # 等同於 chmod u+s /usr/bin/less
SGID:
- 限定:既可以給二進位可執行程式設定,也可以給目錄設定。
功能:在設定了SGID許可權的目錄下建立檔案時,新建立的檔案的所屬組會繼承上級目錄的許可權。
[[email protected] ~]# mkdir test
[[email protected] ~]# ll -d test
drwxr-xr-x 2 root root 4096 Jan 24 20:14 test
[[email protected] ~]# chmod g+s test
[[email protected] ~]# !ll
ll -d test
drwxr-sr-x 2 root root 4096 Jan 24 20:14 test
測試:sgid效果
-[[email protected] ~]# chown :bin test/ [[email protected] ~]# touch test/a.txt [[email protected] ~]# ll !$ ll test/a.txt -rw-r--r-- 1 root bin 0 Jan 24 20:15 test/a.txt
Stickybit
限定:只作用於目錄
功能:目錄下建立的檔案只有root、檔案建立者、目錄所有者才能刪除。
例: 系統中的tmp目錄就是這樣
[[email protected] ~]# ll -d /tmp/drwxrwxrwt. 11 root root 4096 Jan 24 19:41 /tmp/
用法:
chmod o+t /tmp/test/
7.2.1 檔案延伸權限ACL
擴充ACL :access control list
例:設定使用者mk對檔案a.txt擁有的rwx許可權 ,mk不屬於a.txt的所屬主和組,mk是other。怎麼做?
[[email protected] ~]# touch /tmp/a.txt[[email protected] ~]# getfacl /tmp/a.txtgetfacl: Removing leading ‘/‘ from absolute path names# file: tmp/a.txt# owner: root# group: rootuser::rw-group::r--other::r--#setfacl -m u:mk:rwx /tmp/a.txt u : 設定某個使用者擁有的許可權[[email protected] ~]# getfacl /tmp/a.txtgetfacl: Removing leading ‘/‘ from absolute path names...user::rw-user:mk:rwx[[email protected] ~]$ vim /tmp/a.txt [[email protected] ~]$ ll /tmp/a.txt -rw-rwxr--+ 1 root root 8 5月 8 22:42 /tmp/a.txt
例2: 給目錄加延伸權限
[[email protected] ~]# mkdir /tmp/test #setfacl -m d:u:mk:rwx /tmp/test # -d default 設定預設acl,對目錄有效,此目錄下建立的目錄或檔案都繼承此acl許可權
例:測試一下 -d 參數:
[[email protected] ~]# mkdir /tmp/test [[email protected] ~]# setfacl -m d:u:mk:rwx /tmp/test [[email protected] ~]# getfacl /tmp/test/getfacl: Removing leading ‘/‘ from absolute path names# file: tmp/test/# owner: root# group: rootuser::rwxgroup::r-xother::r-xdefault:user::rwxdefault:user:mk:rwxdefault:group::r-xdefault:mask::rwxdefault:other::r-x[[email protected] ~]# touch /tmp/test/a.txt[[email protected] ~]# mkdir /tmp/test/data[[email protected] ~]# getfacl /tmp/test/a.txt #因為-d參數,所以test下所有建立的檔案和目錄都繼承了預設的acl許可權getfacl: Removing leading ‘/‘ from absolute path names# file: tmp/test/a.txt# owner: root# group: rootuser::rw-user:mk:rwx #effective:rw-group::r-x #effective:r--mask::rw-other::r--[[email protected] ~]# getfacl /tmp/test/datagetfacl: Removing leading ‘/‘ from absolute path names# file: tmp/test/data# owner: root# group: rootuser::rwxuser:mk:rwxgroup::r-xmask::rwxother::r-xdefault:user::rwxdefault:user:mk:rwxdefault:group::r-xdefault:mask::rwxdefault:other::r-x
例3:給目錄下所有檔案都加延伸權限
[[email protected] ~]# setfacl -R -m u:lee:rw- testdirectory/ #-R一定要在-m前面,表示目錄下所有檔案[[email protected] ~]# setfacl -x u:mk /tmp/a.txt # 去掉單個許可權[[email protected] ~]# setfacl -b /tmp/a.txt # 去掉所有acl許可權
7.3實戰:建立一個讓root都無法刪除的檔案
發現windows中 有檔案刪除不了,怎麼辦? 使用360 強制移除,粉碎檔案
那麼在Linux下怎麼辦?
[[email protected] ~]# touch hack.sh aa.sh [[email protected] ~]# ll hack.sh aa.sh -rw-r--r-- 1 root root 0 May 24 21:29 aa.sh-rw-r--r-- 1 root root 0 May 24 21:29 hack.sh[[email protected] ~]# rm -rf aa.sh***使用xshell悄悄執行在後台添加attr擴充屬性:(這個別讓學員看到^_^)[[email protected] ~]# chattr +i hack.sh
刪除檔案:
[[email protected] ~]# rm -rf hack.sh #發現刪除不了
為什麼刪除不了?
從REHL6 開始,新增加檔案系統擴充屬性:
命令:chattr
- 參數: a 只能追加內容 ; i 不能被修改
- +a: 只能追加內容 如: echo aaa >> hack.sh
- +i:即Immutable,系統不允許對這個檔案進行任何的修改。如果目錄具有這個屬性,那麼任何的進程只能修改目錄之下的檔案,不允許建立和刪除檔案。
註:immutable [??mju:t?bl] 不可改變的 ; Append [??pend] 追加
解決:
[[email protected] ~]# lsattr hack.sh----i----------- hack.sh[[email protected] ~]# chattr -i hack.sh[[email protected] ~]# echo aa >> hack.sh[[email protected] ~]# lsattr hack.sh #查看擴充屬性---------------- hack.sh[[email protected] ~]# chatchat chattr [[email protected] ~]# chattr +a hack.sh[[email protected] ~]# rm -rf hack.shrm: 無法刪除"hack.sh": 不允許的操作[[email protected] ~]# echo aaa >> hack.sh
Linux架構師高薪入口:
1.學神IT教育官方網站: http://xuegod.ke.qq.com
2.10年行業資深老鳥MK:QQ2659153446
3.加入Linux技術交流QQ群:722287089,即可獲得以下福利:
①定期分享免費學習資料與視頻(工具+筆記+拓展實戰)
②10年行業資深老鳥線上答疑:技能+實戰+項目分享+高薪就業
③有機會免費領取Linux雲端運算叢集架構師4冊書籍
公眾號:
MK老師號:
總結:
- 7.1檔案的基本許可權:r w x (UGO)
- 7.2檔案的特殊許可權:suid sgid sticky和檔案延伸權限ACL
- 7.3實戰:建立一個讓root都無法刪除的檔案
Centos7.5-檔案許可權管理