二周第四次課(2月1日)
2.19 特殊權限set_gid
2.20 特殊權限stick_bit
2.21 軟鏈接文件
2.22 硬連接文件
2.18 特殊權限set_uid
#which passwd
/usr/bin/passwd
# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
-rws中的s是 set_uid的權限
passwd 支持讓普通用戶更改自己密碼
改密碼需要通過修改密碼的文件/etc/shadow
/etc/shadow的權限是----------
*root是超級權限,可以更改任何權限,即
使文件是-------權限,也是如此。
*想讓普通用戶更改密碼,又不想讓普通用戶更改密碼文件,set_suid可以實現。
如果執行了set_uid,無論是所有者、所屬組或其他用戶,都會被臨時賦予所有者的權限
*set_uid 的作用是保證普通用戶臨時擁有所有者身份的命令。
如果給文件設定set_uid文件的前提條件是,這個文件必須是二進制可執行文件。
給ls加set_uid權限
打開新的xhsell ssh連接,切換到其他用戶登錄,
$su -aming
$ls /root
權限不夠
切換回最初原本的Xshell連接
#chmod u+s /usr/bin/ls
#ls -l /usr/bin/ls
-rwsr-xr-x. /usr/bin/ls
標紅代表ls set_uid賦予成功。
切換其他用戶窗口,
$ls -ld /root/
dr-xr-x--- 發現other user還是沒有s權限,此處是因為otheruser只是被臨時賦予權限,並不是永久,所以可以臨時執行root的ls命令權限。
去掉s權限
#chmod u-s /usr/bin/ls
嘗試利用#chmod u=rws /usr/bin/ls來修改權限,
#chmod u=rws /usr/bin/ls
#ls -l /usr/bin/ls
-rwSr-xr-x. /usr/bin/ls
之所以變成S,是因為缺少x權限,此時加上x權限即可,如下
#chmod u+x /usr/bin/ls
#ls -l /usr/bin/ls
-rwsr-xr-x. /usr/bin/ls
2.19 特殊權限set_gid
set_gid和set_uid區別的地方就是,set_gid是對所屬組(g)權限修改,而set_uid是所有者(u)權限修改。
此處先還原u的權限,修改為rwx
#chmod u=rwx
#chmod g+s /usr/bin/ls
#ls -l /usr/bin/ls
-rwxr-sr-x. root root /usr/bin/ls
set_uid 跟set_gid文件功能都相似,只不過是換了角色而已。set_uid的角色是所有者,而set_gid的角色是所屬組。
set_gid 可以用在目錄上。
為234/創建gid權限
#chmod g+s 234
#ls -ld 234
drwxrwsr-x root root /234/目錄
目錄顏色沒變, 不過g的x變成了s.
#chown :user1 234 所屬組設為user1,(所有者root)
#ls -ld 234
drwxrwsr-x. root user1 234/
創建的目錄的子文件所屬組也是user1
#touch 234/aminglinux
#ls -l 234/
-rw-rw-r-- root user1 aminglinux
創建子目錄am,結果所屬組也是user1
#mkdir 234/am
ls -l 234/
drwxrwsr-- root user1 am/
-rw-rw-r-- root user1 aminglinux
g-s,創建文件,結果發現,取消s之後,所屬組變回root.
#chmod g-s 234
#touch 234/aminglinux111
#!ls
drwxrwsr-- root user1 am
-rw-rw-r-- root user1 aminglinux
-rw-rw-r-- root root aminglinux111
*總結:
當作用在文件上,跟set_uid作用是類似的,讓普通用戶執行文件並使用set_gid的時候,臨時擁有所屬組的身份權限。當給一個目錄設置set_gid,在這目錄創建子目錄和子文件的時候,這兩者的所屬組會跟著當前父級目錄保持一致。
2.20 特殊權限stick_bit
stick bit權限,/tmp用得比較多。
drwxrwxrwt.中rwt.的t就是stick_bit,防刪除位
#ls -ld /tmp/
drwxrwxrwt. /tmp/
stick_bit
可以理解為防刪除位。文件是否可以被某用戶刪除,主要取決於該文件所在的目錄是否對該用戶具有寫權限。如果沒有寫權限,則這個目錄下所有的文件都不能刪除,同時也不能添加新的文件。如果希望用戶能夠添加文件,但不能刪除該目錄下其他用戶的文件,則可以對父目錄增加該權限。設置該權限後,就算用戶對目錄具有寫權限,也不能刪除其他用戶的文件。
test
新窗口切換到aming用戶,
$cd /tmp/
$touch aming
$ls -l
-rw-rw-r-- aming aming aming
所有者,所屬組都是aming
$ vi aming 隨便寫入數據,保存退出wq
$chmod 777 aming
$ls -l aming
-rwxrwxrwx. aming aming aming
$su - user1
1號窗口(2號窗口其他用戶作用)切換到user1下
#su - user1
$cd /tmp/
$ls
aming
$vi aming 可以修改,wq。
$rm -f aming 嘗試刪除 ,提示報錯。
此處證明user1不能刪除aming創建的文件。
只有root和aming刪除
test2
$mkdir user1
$chmod 777 user1
$ls -l
drwxrwxrwx user1 user1 user1
切換至aming用戶,
$cd user1
$ls
$touch 1.txt
$mkdir 234
$ls -l
$cd user1
$ ls -l 文件和目錄都沒有w權限
-rw-rw-r-- aming aming 1.txt
drwxrwxr-x aming aming 234
測試能否刪除,文件和目錄均可刪除。
*疑問:為什麽普通用戶沒有w權限,都可以刪除目錄和文件。
因為 所刪除的東西的父目錄 /user1 寫了w權限,而不是看刪除文件和目錄本身的權限。
總結:
stick bit的作用就是防止別的用戶刪除自己的文件(除了root)。
2.21 軟鏈接文件
軟鏈接類似於windows的快捷方式,
例如 /bin是一個軟鏈接文件
#ls -l /bin
lrwxrwxrwx. root root /bin ->usr/bin
ls命令位於/bin/ls,
所以平時使用的ls命令,相當於使用/usr/bin/ls
舉此例子為軟鏈接格式,
/bin/ls --> /usr/bin/ls .
路徑長度影響軟鏈接文件大小
lib64/ 軟鏈接集合
絕對路徑用法
#ln -s 源文件路徑 目的文件路徑
相對路徑用法
#ln -s yum.log aming.log
*這樣做的弊端是:源的文件名稱和路徑發生改變的話,直接影響文件打開的效果。
用處
磁盤快滿的時候,該磁盤某文件還在寫入數據,導致容量越來越膨脹的時候,應該怎麽做?
/boot/aming.log 不停大量寫入數據進去/boot 此時/boot即將膨脹爆滿,
此時應該這樣做,
#cp /boot/aming.log /aming.log
#rm /boot/aming.log
同時,迅速
#ln -s /aming.log /boot/aming.log.
這樣,服務還是會寫入/boot/aming.log
因為寫入是通過路徑尋找文件。
2.22 硬鏈接文件
*硬鏈接核心的地方,就是兩個文件使用了同一個inode。(同一indoe只占用一份空間)
硬連接不支持目錄,不支持跨分區,只支持文件。
硬鏈接用法 ln 源 定義名稱
#ln 1.txt 1_heard.txt
再做個軟鏈接
#ln -s 1.txt 1_sorft.txt
#ls -l
-rw-rw-r--. 2 1_heart.txt
lrwxrwxrwx. 1 1_sorft.txt-> 1.txt
-rw-rw-r-- 2 1.txt
#ls -i
.....395 1.txt
.....395 1_heard.txt
.....394 1_sorft.txt
刪除源1.txt查看屬性
#rm -f 1.txt
#ls -l
-rw-rw-r-- 1 1_heard.txt
lrwxrwxrwx 1 1_sorft.txt>空 閃紅
此時發現,源文件不在,硬鏈接還在,inode號從2變成1。軟鏈接報錯,指向路徑失敗。
二周第四次課(2月1日)