2019獨角獸企業重金招聘Python工程師標準>>>
特殊權限set_uid
set_uid:該權限針對二進制可執行文件,使文件在執行階段具有文件所有者的權限; 通俗一點講就是,普通用戶想要訪問一個沒有其他用戶可執行權限的目錄時,暫時借助二進制文件的所屬主權限去訪問這個目錄,如果沒有s權限,就不能訪問; 注意:普通用戶要有這個二進制文件的可執行權限。如果沒有,那也是不能訪問的。 我們系統中passwd命令就具有s權限。當普通用戶執行passwd命令的時候,可以臨時獲得root權限,從而可以更改密碼;
系統修改密碼命令:passwd
[root@linux-128 ~]# which passwd/usr/bin/passwd[root@linux-128 ~]# ls -l /usr/bin/passwd-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd //顏色變成紅色
系統密碼文件:/etc/shadow
[root@linux-128 ~]# ls -l /etc/shadow---------- 1 root root 663 10月 20 15:14 /etc/shadow
注意:這里所有者,所屬組,其他用戶都沒有執行權限,但是root是超級用戶,它具有至高無上的權限,所以root用戶是可以修改密碼的;按理說普通用戶沒有執行權限是沒辦法去修改密碼的,但是我們passwd命令具有s權限,普通用戶在使用命令passwd時,可以臨時獲取到passwd所屬主的root權限,所以能修改密碼。
例子:使用普通用戶查看/root/目錄:
[root@linux-128 ~]# ls -ld /root/ //root目錄沒有其他用戶可執行權限;dr-xr-x---. 3 root root 163 10月 25 00:45 /root/[root@linux-128 ~]# su - wuzhou //切換用戶上一次登錄:一 10月 23 21:56:30 CST 2017pts/0 上[wuzhou@linux-128 ~]$ ls /root/ls: 無法打開目錄/root/: 權限不夠 //沒有權限
我們怎樣才能讓普通用戶wuzhou打開/root/目錄呢? 解:我們給ls命令加上一個s權限,讓用戶wuzhou臨時擁有ls的所有者權限;例如:
[root@linux-128 ~]# which lsalias ls='ls --color=auto'/usr/bin/ls[root@linux-128 ~]# chmod u+s /usr/bin/ls[root@linux-128 ~]# ls -l /usr/bin/ls-rwsr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls[root@linux-128 ~]# su - wuzhou上一次登錄:五 10月 27 00:18:52 CST 2017pts/0 上[wuzhou@linux-128 ~]$ ls /root/anaconda-ks.cfg
設置s權限:
- chmod u+s 二進制文件名
- chmod u=rws 二進制文件名
- chmod 4755 二進制文件名 這個4是這樣得出來的:
suid = 4
sgid = 2
stick_bit = 1
取消s權限:
- chmod u-s
- chmod u=rws
- chmod 755
特殊權限set_gid
set_gid:該權限可以作用在二進制可執行文件上,也可以作用在目錄上。當作用在文件上時,其功能和set_uid一樣,它會使文件在執行階段具有該文件所屬組的權限。作用在目錄上時,任務用戶在此目錄下創建的文件和目錄都具有和該目錄所屬組相同的組。
設置s權限:
- chmod g+s 二進制文件名或目錄
- chmod g=rws 二進制文件名或目錄
- chmod 2755 二進制文件名或目錄
例子:作用在二進制文件上
[root@linux ~]# ls -l /bin/ls
-rwxr-xr-x. 1 root root 112664 10月 15 2014 /bin/ls
[root@linux ~]# chmod g+s /bin/ls \\/bin/ls 加上sgid
[root@linux ~]# !ls
ls -l /bin/ls
-rwxr-sr-x. 1 root root 112664 10月 15 2014 /bin/ls \\顏色會變成黃色
[root@linux ~]# su - wzzhan
[wzzhan@linux ~]$ ls /root \\wzzhan用戶會調用命令ls屬組的權限去訪問/root目錄
111.bak 444 5.txt 777 install.log prem
222 4.txx 6.txt anaconda-ks.cfg install.log.syslog test
例子:作用于目錄上
[root@linux tmp]# mkdir 555 \\創建目錄555
[root@linux tmp]# chmod 777 555 \\設置權限所有人可讀可寫可執行
[root@linux tmp]# su - wzzhan \\切換用戶 wzzhan下
[wzzhan@linux ~]$ cd /tmp/555
[wzzhan@linux 555]$ mkdir dir \\創建目錄dir
[wzzhan@linux 555]$ touch file \\創建文件file
[wzzhan@linux 555]$ logout \\退出用戶到root下
[root@linux tmp]# chmod g+s 555 \\將目錄555添加sgid權限
[root@linux tmp]# su - wzzhan \\切換用到wzzhan下[wzzhan@linux tmp]$ cd 555
[wzzhan@linux 555]$ mkdir dir1 \\創建目錄dir1
[wzzhan@linux 555]$ touch file1 \\創建文件file1
[wzzhan@linux 555]$ ls -l
總用量 8
drwxrwxr-x. 2 wzzhan wzzhan 4096 10月 27 15:04 dir
drwxrwsr-x. 2 wzzhan root 4096 10月 27 15:06 dir1 \\創建的目錄的屬組是調用的目錄的屬組
-rw-rw-r--. 1 wzzhan wzzhan 0 10月 27 15:04 file
-rw-rw-r--. 1 wzzhan root 0 10月 27 15:06 file1 \\創建的文件的屬組也是調用的目錄的屬組
特殊權限stick_bit
sticky_bit:防刪除位。一個目錄下的文件嫩不能被刪除,不是取決于文件本身的屬組屬組還有其他權限, 而是在于這個文件所在目錄的權限是否可讀可寫可執行,如果目錄可寫,那就意味著我們可以刪除目錄下的任何文件。當一個目錄的權限為其他人可讀可寫可執行的時候,那么其他用戶都可以刪除這個目錄下的文件,包括root文件,為了防止文件被其他用戶刪除,我們給這這個目錄增加一種特殊權限:sticky,防刪除位,要用root用戶操作。這樣一個用戶就不能刪除另一個用戶創建的文件了。只有root和創建文件本人才能夠刪除。
設置t權限:
- chmod o+t 目錄
- chmod o=rwt 目錄
- chmod 1755 目錄
例子:
root@linux ~]# cd /tmp
[root@linux tmp]# chmod o+t 666
[root@linux tmp]# ls -ld 666
drwxrwxrwt. 3 root root 4096 10月 27 15:42 666
[root@linux tmp]# su - user1
[user1@linux ~]$ cd /tmp/666
[user1@linux 666]$ ls -l
總用量 8
drwxrwxr-x. 2 wzzhan wzzhan 4096 10月 27 15:42 11
-rw-r--r--. 1 root root 337 10月 27 15:22 1.txt
-rw-r--r--. 1 root root 0 10月 27 15:22 1.xt
-rw-rw-r--. 1 wzzhan wzzhan 0 10月 27 15:42 2.txt
[user1@linux 666]$ rm -r 111
rm: 無法刪除"111": 沒有那個文件或目錄
[user1@linux 666]$ rm -r 11
rm:是否刪除有寫保護的目錄 "11"?y
rm: 無法刪除"11": 不允許的操作
[user1@linux 666]$ rm -r 1.txt
rm:是否刪除有寫保護的普通文件 "1.txt"?y
rm: 無法刪除"1.txt": 不允許的操作
[user1@linux 666]$ rm -rf 2.txt
rm: 無法刪除"2.txt": 不允許的操作
[user1@linux 666]$ logout
[root@linux tmp]# ls
1 22.txt 3 555 6.txt file1 test1
1.txt 2.txt 3.txt 666 dir1 test yum.log
[root@linux tmp]# cd 666
[root@linux 666]# ls
11 1.txt 1.xt 2.txt
[root@linux 666]# rm -rf 11
[root@linux 666]# ls
1.txt 1.xt 2.txt
[root@linux 666]# su - wzzhan
[wzzhan@linux ~]$ cd /tmp/666
[wzzhan@linux 666]$ ls -l
總用量 4
-rw-r--r--. 1 root root 337 10月 27 15:22 1.txt
-rw-r--r--. 1 root root 0 10月 27 15:22 1.xt
-rw-rw-r--. 1 wzzhan wzzhan 0 10月 27 15:42 2.txt
[wzzhan@linux 666]$ rm 2.txt 用戶wzzhan才能刪除2。txt文件
[wzzhan@linux 666]$ ls -l
總用量 4
-rw-r--r--. 1 root root 337 10月 27 15:22 1.txt
-rw-r--r--. 1 root root 0 10月 27 15:22 1.xt
軟鏈接文件
軟鏈接:是建立一個獨立的文件,當讀取這個鏈接文件時,它會把讀取的行為轉發到該文件所鏈接的文件上。
- 軟鏈接 相當于一個快捷方式
- 軟鏈接的大小取決于軟鏈接源文件的路徑長短
- 軟鏈接支持文件和目錄
- 軟鏈接的源文件不能被刪除,如果刪除源文件,軟鏈接文件會失效;軟鏈接刪除,源文件不受影響。 創建軟鏈接格式:
- 盡量使用絕對路徑來做軟鏈接 ln -s 源文件 目標文件
[root@linux-128 tmp]# ln -s /tmp/111/ /root/12
[root@linux-128 tmp]# ls -l /root
總用量 4
lrwxrwxrwx 1 root root 9 10月 27 01:12 12 -> /tmp/111/
-rw-------. 1 root root 1422 10月 17 03:51 anaconda-ks.cfg
比較源文件和軟鏈接的大小,軟連接的大小與源文件的長度有關
[root@linux-128 tmp]# du -sh /tmp/111/ /root/12
4.0K /tmp/111/
0 /root/12
- du -sh 文件 \查看文件大小
- df -h \查看磁盤情況
硬連接文件
硬鏈接:當系統要讀取一個文件時,會先讀取inode信息,然后再根據inode的信息到塊區域將數據取出來。而硬鏈接就是直接在建立一個inode鏈接到文件放置的塊區域,即進行硬鏈接時,該文件的內容沒有任何變化,只是增加了一個指向這個文件的inode,并不會額外占用磁盤空間。
- 硬鏈接不能夸文件系統,不同的文件系統有不同的inode table;
- 硬鏈接不能鏈接目錄; 格式: ln 來源文件 目標文件
[root@linux-128 tmp]# ln /tmp/123.txt /root/321.txt
[root@linux-128 tmp]# ls -lih /tmp/123.txt
8389029 -rw-r--r-- 2 root root 17K 10月 27 01:31 /tmp/123.txt
[root@linux-128 tmp]# ls -lih /root/321.txt
8389029 -rw-r--r-- 2 root root 17K 10月 27 01:31 /root/321.txt
注意:我們創建的硬鏈接和源文件的inode一樣,大小一樣。
刪除源文件,硬鏈接不受影響
[root@linux-128 tmp]# rm /tmp/123.txt
rm:是否刪除普通文件 "/tmp/123.txt"?y
[root@linux-128 tmp]# ls -l /root/321.txt
-rw-r--r-- 1 root root 16816 10月 27 01:31 /root/321.txt
硬鏈接不能鏈接目錄
[root@linux-128 tmp]# ln /tmp/222/ /root/23
ln: "/tmp/222/": 不允許將硬鏈接指向目錄