2.18特殊權限set_uidlinux
咱們以前有用過passwd這個文件這個文件是什麼權限那。咱們用which看一下。程序員
能夠看到他是紅色的,也能夠看到他的權限是rwsr-xr-x平時咱們看到的都是rwx沒有s的這個權限,其實他就是set_uid權限安全
set_uid的做用:ide
咱們Linux系統是一個比較安全的系統,普通用戶改密碼不可能只讓root超級用戶幫他們改。改密碼就是改密碼的配置文件(shadow)從下圖咱們能夠看到這個文件的權限有多嚴禁,就連root用戶都是000權限,不過root用戶是超級用戶他有至高無上的權利,就算shadow沒有任何權限他同樣可使用的。普通用戶就不能夠。ui
可是普通用戶有想要改密碼咋辦?這個時候咱們的linux程序員就給passwd一個特殊的權限set_uid,set_uid權限會讓普通用戶使用帶set_uid權限的命令的時候在他執行命令的一瞬間就會臨時給普通用戶一個所屬主的身份。spa
設置set_uid權限必須一個可執行的二進制可執行文件,給普通文件設置set_uid權限是沒有任何意義的3d
[root@MOMOCO-02 ~]# su - GYBget
【進入一個普通用戶】it
[GYB@MOMOCO-02 ~]$ whoamiclass
GYB
【查看當前是在什麼用戶下】
[GYB@MOMOCO-02 ~]$ ls /root/
ls: 沒法打開目錄/root/: 權限不夠
[GYB@MOMOCO-02 ~]$ ls -ld !$
ls -ld /root/
dr-xr-x---. 4 root root 228 12月 20 13:33 /root/
【能夠看到雖然ls有普通用戶的執行權限,可是/root/沒有普通用戶執行的權限,下面咱們讓ls臨時擁有所屬者權限】
[root@MOMOCO-02 ~]# chmod u+s /usr/bin/ls
【給一個可執行的二級制文件加上set_uid權限】
[GYB@MOMOCO-02 ~]$ ls /root/
2 2.txt 3.txt 3.txt~ anaconda-ks.cfg
【這樣普通用戶就可使用ls所屬主身份了】
[root@MOMOCO-02 ~]# chmod u-s /usr/bin/ls
【刪除掉set_uid權限】
[root@MOMOCO-02 ~]# ls -ld !$
ls -ld /usr/bin/ls
-rwxr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
[root@MOMOCO-02 ~]# chmod u=rws !$
【加上set_uid權限】
chmod u=rws /usr/bin/ls
[root@MOMOCO-02 ~]# ls -ld /usr/bin/ls
-rwSr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
【這裏怎麼會變成大寫的S了,是由於你這樣設置權限沒有了x權限了】
[root@MOMOCO-02 ~]# chmod u+x /usr/bin/ls
[root@MOMOCO-02 ~]# ls -ld /usr/bin/ls
-rwsr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
【當咱們在加上x權限時他是否是就變成小s了,其實大S或者小s都不受印象】
[GYB@MOMOCO-02 ~]$ ls /root/
2 2.txt 3.txt 3.txt~ anaconda-ks.cfg
注意:目錄咱們也能夠設置set_uid可是沒有任何的意義。
2.19特殊權限set_gid
set_gid這個權限和set_uid權限比較像,只不過他是做用在所屬組上的。
[root@MOMOCO-02 ~]# chmod g+s /usr/bin/ls
[root@MOMOCO-02 ~]# ls -ld /usr/bin/ls
-rwxr-sr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls
能夠看見他是×××,也能夠看到他的權限是rwxr-sr-x,set_gid權限會讓普通用戶使用帶set_gid權限的命令的時候在他執行命令的一瞬間就會臨時給普通用戶一個所屬組的身份。
[GYB@MOMOCO-02 ~]$ ls /root/
2 2.txt 3.txt 3.txt~ anaconda-ks.cfg
[GYB@MOMOCO-02 ~]$ ls -ld /root/
dr-xr-x---. 4 root root 228 12月 20 13:33 /root/
【爲何也能夠用那,覺得/root/的所屬組有讀和執行權限,若是咱們關掉/root/的所屬組的讀和執行權限還能夠用嗎?】
[root@MOMOCO-02 ~]# chmod g= /root/
[root@MOMOCO-02 ~]# ls -ld /root/
dr-x------. 4 root root 228 12月 20 13:33 /root/
[GYB@MOMOCO-02 ~]$ ls /root/
ls: 沒法打開目錄/root/: 權限不夠
【看來是不能夠的】
[root@MOMOCO-02 ~]# chown :gyb 2
[root@MOMOCO-02 ~]# ls -ld 2
drwxr--r-x. 2 root gyb 6 12月 21 17:03 2
[root@MOMOCO-02 ~]# mkdir 2/3
[root@MOMOCO-02 ~]# touch 2/3.txt
[root@MOMOCO-02 ~]# ls -l 2
總用量 0
drwxr-xr-x. 2 root root 6 12月 21 17:03 3
-rw-r--r--. 1 root root 0 12月 21 17:04 3.txt
[root@MOMOCO-02 ~]# chmod g+s 2
[root@MOMOCO-02 ~]# ls -ld 2
drwxr-Sr-x. 3 root gyb 28 12月 21 17:04 2
[root@MOMOCO-02 ~]# mkdir 2/4
[root@MOMOCO-02 ~]# touch 2/4.txt
[root@MOMOCO-02 ~]# ls -l 2
總用量 0
drwxr-xr-x. 2 root root 6 12月 21 17:03 3
-rw-r--r--. 1 root root 0 12月 21 17:04 3.txt
drwxr-sr-x. 2 root gyb 6 12月 21 17:05 4
-rw-r--r--. 1 root gyb 0 12月 21 17:05 4.txt
【當咱們沒有set_gid一個目錄的時候咱們在父目錄下建立的子目錄或者子文件他們的所屬組不會和父目錄同樣,當咱們set_gid的時候咱們再建立的時候他就會和父目錄同樣了】
2.20特殊權限stick_bit
stick_bit這個權限咱們系統的tmp就是的,這個權限的做用是:防刪除位
他是綠色的,能夠看到他的權限是rwxrwxrwt(其中t就表明stick_bit權限)
[GYB@MOMOCO-02 ~]$ whoami
GYB
[GYB@MOMOCO-02 ~]$ cd /tmp
[GYB@MOMOCO-02 tmp]$ touch gyblinux
[GYB@MOMOCO-02 tmp]$ ls -l
總用量 0
-rw-rw-r--. 1 GYB GYB 0 12月 21 17:39 gyblinux
drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-chronyd.service-Zs64jc
drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vgauthd.service-CH1eEy
drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vmtoolsd.service-4C76kS
[GYB@MOMOCO-02 tmp]$ vi gyblinux
[GYB@MOMOCO-02 tmp]$ cat gyblinux
qqqqqqqqqqqqqqqqq
[GYB@MOMOCO-02 tmp]$ chmod 777 gyblinux
...................................................................................................................................................................................................................................
[gyb@MOMOCO-02 ~]$ whoami
gyb
[gyb@MOMOCO-02 ~]$ cd /tmp
[gyb@MOMOCO-02 tmp]$ ls -l
總用量 4
-rwxrwxrwx. 1 GYB GYB 18 12月 21 17:39 gyblinux
drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-chronyd.service-Zs64jc
drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vgauthd.service-CH1eEy
drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vmtoolsd.service-4C76kS
[gyb@MOMOCO-02 tmp]$ vi gyblinux
[gyb@MOMOCO-02 tmp]$ rm gyblinux
rm: 沒法刪除"gyblinux": 不容許的操做
[gyb@MOMOCO-02 tmp]$ mv gyblinux gyblinux1
mv: 沒法將"gyblinux" 移動至"gyblinux1": 不容許的操做
[GYB@MOMOCO-02 tmp]$ cat gyblinux
qqqqqqqqqqqqqqqqq
wwwwwwwwwwwwwwww
【能夠看到咱們再GYB用戶裏面建立的目錄gyblinux在GYB用戶裏面能夠更改內容,可是不能夠刪除也不能夠更名字,可是root用戶就不同了。】
##############################################################################################################################
[gyb@MOMOCO-02 tmp]$ mkdir gyb
[gyb@MOMOCO-02 tmp]$ chmod 777 gyb
[gyb@MOMOCO-02 tmp]$ ls -l
總用量 4
drwxrwxrwx. 2 gyb gyb 6 12月 21 18:07 gyb
-rwxrwxrwx. 1 GYB GYB 18 12月 21 17:47 gyblinux
drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-chronyd.service-Zs64jc
drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vgauthd.service-CH1eEy
drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vmtoolsd.service-4C76kS
..................................................................................................................
[GYB@MOMOCO-02 tmp]$ cd gyb
[GYB@MOMOCO-02 gyb]$ mkdir gyb01
[GYB@MOMOCO-02 gyb]$ touch 1.txt
[GYB@MOMOCO-02 gyb]$ cd ..
[GYB@MOMOCO-02 tmp]$ ls -l
總用量 4
drwxrwxrwx. 3 gyb gyb 32 12月 21 18:05 gyb
-rwxrwxrwx. 1 GYB GYB 18 12月 21 17:47 gyblinux
drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-chronyd.service-Zs64jc
drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vgauthd.service-CH1eEy
drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vmtoolsd.service-4C76kS
...................................................................................................................
[gyb@MOMOCO-02 tmp]$ cd gyb
[gyb@MOMOCO-02 gyb]$ ls -l
總用量 0
-rw-rw-r--. 1 GYB GYB 0 12月 21 18:05 1.txt
drwxrwxr-x. 2 GYB GYB 6 12月 21 18:05 gyb01
[gyb@MOMOCO-02 gyb]$ rm 1.txt
rm:是否刪除有寫保護的普通空文件 "1.txt"?y
[gyb@MOMOCO-02 gyb]$ rm -r gyb01
rm:是否刪除有寫保護的目錄 "gyb01"?y
【當咱們在gyb用戶裏面建立/tmp/gyb目錄(權限設置爲777),在GYB用戶裏面建立/tmp/gyb/1.txt文件和/tmp/gyb/gyb01目錄。當咱們再回到gyb用戶裏面是把GYB建立文件和目錄刪除刪除時是能夠的,咱們在GYB目錄建立的文件沒有o權限爲何能刪除那?由於你要刪除目錄和文件和你要刪除的目錄和文件自己沒有關係而是和他們的父目錄(o權限)有關係】
這些權限咱們做爲了解,由於他們用的很少。
2.21軟鏈接文件
【粉綠色的就是軟鏈接文件,他的文件內容實際上是在綠色文件裏面,你能夠看到下面他們使用時的結果都是同樣的】
[root@MOMOCO-02 ~]# /bin/ls
2.txt 3 3.txt 3.txt~ anaconda-ks.cfg
[root@MOMOCO-02 ~]# /usr/bin/ls
2.txt 3 3.txt 3.txt~ anaconda-ks.cfg
[root@MOMOCO-02 ~]# ls -l /lib64/
【這個裏面軟鏈接文件比較多你能夠看看】
軟鏈接的做用:
好比咱們要用的文件路徑是/tmp/123/12/1.txt但是這個文件的路徑卻在/root/123/12/1.txt。咱們能夠把/root/123/12/1.txt下的文件1.txt拷貝到/tmp/123/12/目錄下,這樣會浪費點你的磁盤空間並且當/root/123/12/1.txt的1.txt發生變化的時候你還要再拷貝。浪費時間和空間,這個時候就能夠作個軟鏈接。
[root@MOMOCO-02 ~]# ln -s /root/123/12/1.txt /tmp/123/12/1.txt
【作軟連接命令,前一個路徑爲源文件就是空間比較大的,後面的是空間比較小的目標文件,下面能夠看見成功了。】
[root@MOMOCO-02 ~]# ls -l !$
ls -l /tmp/123/12/1.txt
總用量 0
lrwxrwxrwx. 1 root root 18 12月 21 19:40 1.txt -> /root/123/12/1.txt
軟鏈接不只能夠作文件還能夠軟鏈接目錄:
[root@MOMOCO-02 ~]# ls
123 2.txt 3 3.txt 3.txt~ anaconda-ks.cfg
[root@MOMOCO-02 ~]# ln -s /root/3 /root/123/12
[root@MOMOCO-02 ~]# ls -l 123/12
總用量 0
drwxr-xr-x. 2 root root 6 12月 21 19:39 1.txt
lrwxrwxrwx. 1 root root 7 12月 21 19:49 3 -> /root/3
【操做後能夠看見是能夠的】
上面咱們作的軟鏈接都是以根開頭的絕對路徑軟連接,若是咱們作不以根開頭的相對路徑的也能夠,可是他只在當前目錄生效。你不能夠移動到別的目錄中。
[root@MOMOCO-02 tmp]# ln -s gyblinux gyblinux.txt
[root@MOMOCO-02 tmp]# ls -l
總用量 4
drwxr-xr-x. 3 root root 16 12月 21 19:39 123
drwxrwxrw-. 2 gyb gyb 6 12月 21 18:07 gyb
-rwxrwxrwx. 1 GYB GYB 18 12月 21 17:47 gyblinux
lrwxrwxrwx. 1 root root 8 12月 21 20:18 gyblinux.txt -> gyblinux
drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-chronyd.service-Zs64jc
drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vgauthd.service-CH1eEy
drwx------. 3 root root 17 12月 21 15:09 systemd-private-eb1996e4747340499be43fb81404d08f-vmtoolsd.service-4C76kS
[root@MOMOCO-02 tmp]# mv gyblinux.txt /root/123
[root@MOMOCO-02 tmp]# ls -l /root/123
總用量 0
drwxr-xr-x. 3 root root 28 12月 21 19:49 12
lrwxrwxrwx. 1 root root 8 12月 21 20:18 gyblinux.txt -> gyblinux
【紅色的說明咱們移動了相對軟鏈接就會出錯,咱們在這個的目錄中在touch一個gyblinux他就會變好。因此說咱們之後作軟鏈接最好是作成絕對路徑。】
[root@MOMOCO-02 tmp]# touch /root/123/gyblinux
小技巧:
[root@MOMOCO-02 tmp]# df -h
文件系統 容量 已用 可用 已用% 掛載點
/dev/sda3 18G 1.1G 17G 6% /
devtmpfs 122M 0 122M 0% /dev
tmpfs 132M 0 132M 0% /dev/shm
tmpfs 132M 4.6M 127M 4% /run
tmpfs 132M 0 132M 0% /sys/fs/cgroup
/dev/sda1 197M 97M 100M 50% /boot
tmpfs 27M 0 27M 0% /run/user/0
【加入咱們的/boot空間快用完了,可是根目錄還用不少空間,咱們這個時候就能夠作一個如連接解決他。首先咱們拷貝文件cp /boot/gyb.log /gyb.log \而後刪除rm /boot/gyb.log \而後快速軟鏈接ln -s /gyb.log /boot/gyb.log 這樣就能夠了。】
2.22硬鏈接文件
平時咱們的文件只有一個inod號。
硬鏈接不支持給目錄作硬鏈接,只支持給文件作硬鏈接。
[root@MOMOCO-02 ~]# ln 3 4
ln: "3": 不容許將硬連接指向目錄
[root@MOMOCO-02 ~]# ls -l
總用量 8
drwxr-xr-x. 3 root root 52 12月 21 20:23 123
-rwx------. 1 root root 0 12月 20 10:42 2.txt
drwxr-xr-x. 2 root root 6 12月 21 16:56 3
-rw-rw-r--. 1 root root 65 12月 20 13:18 3.txt
-rw-r--r--. 1 root root 0 12月 20 12:33 3.txt~
-rw-------. 1 root root 3470 12月 19 21:40 anaconda-ks.cfg
[root@MOMOCO-02 ~]# ln 2.txt 2_1.txt
【硬鏈接命令】
[root@MOMOCO-02 ~]# ls -l
總用量 8
drwxr-xr-x. 3 root root 52 12月 21 20:23 123
-rwx------. 2 root root 0 12月 20 10:42 2_1.txt
-rwx------. 2 root root 0 12月 20 10:42 2.txt
drwxr-xr-x. 2 root root 6 12月 21 16:56 3
-rw-rw-r--. 1 root root 65 12月 20 13:18 3.txt
-rw-r--r--. 1 root root 0 12月 20 12:33 3.txt~
-rw-------. 1 root root 3470 12月 19 21:40 anaconda-ks.cfg
[root@MOMOCO-02 ~]# ls -i
664803 123 33617208 2.txt 33617210 3.txt 33574978 anaconda-ks.cfg
33617208 2_1.txt 50693550 3 33617215 3.txt~
[root@MOMOCO-02 ~]# vi 2.txt
[root@MOMOCO-02 ~]# cat 2_1.txt
qqqqqqqqqqqqqqqqq
[root@MOMOCO-02 ~]# rm 2.txt
rm:是否刪除普通文件 "2.txt"?y
[root@MOMOCO-02 ~]# cat 2_1.txt
qqqqqqqqqqqqqqqqq
【咱們能夠看到咱們作的硬鏈接,而後咱們把源文件刪除掉,可是目標文件仍是原來的內容。並且源文件和目標文件是相同的inod,其實硬鏈接就是一個文件的皮。咱們刪除掉的就是文件的表面皮和內容沒有關係,可是你不能把全部的皮都刪除了。硬鏈接能夠多作不會佔用你空間。硬鏈接的文件他們的屬性都是同樣的。硬鏈接不能跨分區好比/boot分區下的文件不能到/分區下,軟鏈接能夠跨分區可是不能刪除源文件】
[root@MOMOCO-02 ~]# ls /boot/
config-3.10.0-693.el7.x86_64
efi
grub
grub2
initramfs-0-rescue-e1347008496b4402b3149fa3dbc74006.img
initramfs-3.10.0-693.el7.x86_64.img
initrd-plymouth.img
symvers-3.10.0-693.el7.x86_64.gz
System.map-3.10.0-693.el7.x86_64
vmlinuz-0-rescue-e1347008496b4402b3149fa3dbc74006
vmlinuz-3.10.0-693.el7.x86_64
[root@MOMOCO-02 ~]# ln /boot/config-3.10.0-693.el7.x86_64 /root/tmp/config-3.10.0-693.el7.x86_64
ln: 沒法建立硬連接"/root/tmp/config-3.10.0-693.el7.x86_64" => "/boot/config-3.10.0-693.el7.x86_64": 沒有那個文件或目錄
【硬鏈接不支持跨分區,由於分區之間都有本身的inod,他們再建立分區的時候就已經把本身的體系作好了。因此不能作硬鏈接】