[root@hf-01 ~]# which passwd /usr/bin/passwd [root@hf-01 ~]# ls -l /usr/bin/passwd 會發現passwd文件含有特殊的s權限 -rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
[root@hf-01 ~]# ls /etc/shadow /etc/shadow 改用戶密碼的文件 [root@hf-01 ~]# ls -l !$ 會發現更改密碼的文件權限爲000 ls -l /etc/shadow ----------. 1 root root 665 10月 26 08:04 /etc/shadow
[root@hf-01 ~]# ls -l /usr/bin/ls 這裏想給ls命令加一個 -rwxr-xr-x. 1 root root 117616 6月 10 2014 /usr/bin/ls 而後複製SSH渠道,打開另外一個終端2hf(1)下 [root@hf-01 ~]# su - hanfeng 切換到普通用戶hanfeng下去 [hanfeng@hf-01 ~]$ whoami 來查看當前用戶 hanfeng [hanfeng@hf-01 ~]$ ls /root/ 這時訪問/root/目錄,會提示沒權限 ls: 沒法打開目錄/root: 權限不夠 這時回到以前的終端下1hf(0)下 [root@hf-01 ~]# chmod u+s /usr/bin/ls 給ls命令增長+s權限 [root@hf-01 ~]# ls -l /usr/bin/ls 這時查看ls命令,會發現x變化爲了s權限(小寫的s包括了x權限,大寫的S表示沒有x權限) -rwsr-xr-x. 1 root root 117616 6月 10 2014 /usr/bin/ls 在切換到另外一個終端2hf(1)下 [hanfeng@hf-01 ~]$ ls /root/ 這時會看到有訪問權限了,就是由於set_uid權限賦給ls。(當在其餘用戶下使用ls命令時,在執行過程當中會以root身份來運行) 11.txt 123 234 2.txt 33.txt anaconda-ks.cfg.1 ha.txt hf [hanfeng@hf-01 ~]$ ls -ld /root/ dr-xr-x---. 5 root root 4096 10月 26 09:41 /root/ 回到終端1hf(0)下 [root@hf-01 ~]# chmod u-s /usr/bin/ls 去除set_uid賦予給ls的權限
[root@hf-01 ~]# chmod u+s /usr/bin/ls 命令ls被賦予了s權限 [root@hf-01 ~]# chmod u-s /usr/bin/ls 收回s權限 [root@hf-01 ~]# chmod u=rws /usr/bin/ls 這也是賦予ls權限的方法,可是它缺乏可執行的權限(小寫的s包括了x權限,大寫的S表示沒有x權限) [root@hf-01 ~]# !ls 會發現這裏顯示的是大寫S ls -l /usr/bin/ls -rwSr-xr-x. 1 root root 117616 6月 10 2014 /usr/bin/ls [root@hf-01 ~]# chmod u+x /usr/bin/ls 在這裏再給它加上+x可執行的權限便可 [root@hf-01 ~]# !ls 會發現這裏顯示的是小寫s ls -l /usr/bin/ls -rwsr-xr-x. 1 root root 117616 6月 10 2014 /usr/bin/ls [root@hf-01 ~]#
- 目錄可增長set_uid權限,可是基本沒啥做用,目錄基本不用去執行啥
- set_uid權限自己的做用就是給一個普通用戶的用戶執行,臨時擁有全部者的身份
- set_gid做用在文件上時,和set_uid效果一致,會使普通用戶臨時擁有所屬組的身份
[root@hf-01 ~]# chmod u=rwx /usr/bin/ls 將ls命令權限恢復成默認初始權限 [root@hf-01 ~]# !ls ls -l /usr/bin/ls -rwxr-xr-x. 1 root root 117616 6月 10 2014 /usr/bin/ls [root@hf-01 ~]# chmod g+s /usr/bin/ls 設置set_gid權限 [root@hf-01 ~]# !ls ls -l /usr/bin/ls -rwxr-sr-x. 1 root root 117616 6月 10 2014 /usr/bin/ls 在切換到另外一個終端2hf(1)下 [hanfeng@hf-01 ~]$ ls /root/ 將set_gid權限賦給ls,當在其餘用戶下使用ls命令時,(由於ls的所屬組是root,因此就會以root身份來執行) 11.txt 123 234 2.txt 33.txt anaconda-ks.cfg.1 ha.txt hf [hanfeng@hf-01 ~]$ ls -ld /root/ dr-xr-x---. 5 root root 4096 10月 26 09:41 /root/
[root@hf-01 ~]# ls -l 總用量 8 -rw-r--r--. 1 root root 0 10月 26 08:39 11.txt drwxr-xr-x. 2 root root 6 10月 26 08:39 123 drwxrwxr-x. 2 root root 6 10月 26 08:57 234 -rwxrwxrwx. 1 root root 924 10月 25 06:49 2.txt -rw-rw-r--. 1 root root 0 10月 26 08:56 33.txt -rw-------. 1 root root 973 8月 21 05:05 anaconda-ks.cfg.1 -rw-rw-r--. 1 root root 0 10月 26 09:41 ha.txt dr-x--xr-x. 2 root root 18 10月 26 06:56 hf [root@hf-01 ~]# chmod g+s 234 更改234目錄的set_gid權限 [root@hf-01 ~]# ls -ld 234 drwxrwsr-x. 2 root root 6 10月 26 08:57 234 [root@hf-01 ~]# chown :hanfeng 234 再來更改234目錄所屬組的權限 [root@hf-01 ~]# ls -ld 234 drwxrwsr-x. 2 root hanfeng 6 10月 26 08:57 234 [root@hf-01 ~]# touch 234/gurui 在目錄234下新建文件gurui [root@hf-01 ~]# ls -l 234/ 查看全部者和全部組 總用量 0 -rw-r--r--. 1 root hanfeng 0 10月 27 07:46 gurui [root@hf-01 ~]# mkdir 234/am 在目錄234下新建目錄am [root@hf-01 ~]# ls -l 234/ 總用量 0 drwxr-sr-x. 2 root hanfeng 6 10月 27 07:47 am -rw-r--r--. 1 root hanfeng 0 10月 27 07:46 gurui [root@hf-01 ~]# chmod g-s 234 去除set_gid臨時權限 [root@hf-01 ~]# touch 234/gurui111 在234目錄下新建gurui111文件 [root@hf-01 ~]# !ls 發如今root用戶下建立的文件,全部組默認都是root ls -l 234/ 總用量 0 drwxr-sr-x. 2 root hanfeng 6 10月 27 07:47 am -rw-r--r--. 1 root hanfeng 0 10月 27 07:46 gurui -rw-r--r--. 1 root root 0 10月 27 07:48 gurui111 [root@hf-01 ~]# mkdir 234/am1 在目錄234下新建目錄am1 [root@hf-01 ~]# ls -l 234/ 發如今root用戶下建立的目錄,全部組默認都是root 總用量 0 drwxr-sr-x. 2 root hanfeng 6 10月 27 07:47 am drwxr-xr-x. 2 root root 6 10月 27 07:49 am1 -rw-r--r--. 1 root hanfeng 0 10月 27 07:46 gurui -rw-r--r--. 1 root root 0 10月 27 07:48 gurui111
- 當給一個目錄設置了set_gid以後,再去這個目錄下面建立子目錄和子文件的時候,那這個子文件和子目錄的所屬組會跟着父級目錄(就是剛剛建立的set_gid權限的目錄)保持一致。
- set_gid這個權限的做用,他不只僅能夠做用在文件上,也能夠做用在目錄上
- 看成用在文件上,和set_uid做用相似,可讓執行文件的普通用戶臨時擁有所屬組的身份。
- 看成用在目錄上,在建立子目錄和子文件的時候,子目錄和子文件所屬組和該目錄的所屬組保持一致
系統中的/tmp/目錄是擁有stick_bit權限的 [root@hf-01 ~]# ls -ld /tmp/ drwxrwxrwt. 9 root root 4096 10月 27 05:14 /tmp/
[root@hf-01 ~]# cd /tmp/ [root@hf-01 tmp]# ls aminglinux amning mysql.sock yum.log
在終端2hf(1)下 [hanfeng@hf-01 ~]$ whoami 查看所屬主 hanfeng [hanfeng@hf-01 ~]$ cd /tmp/ 切換到/tmp/目錄下 [hanfeng@hf-01 tmp]$ ls aminglinux amning mysql.sock yum.log [hanfeng@hf-01 tmp]$ touch yunwei 新建文件yunwei [hanfeng@hf-01 tmp]$ ls -l 會看到文件yunwei的所屬主和所屬組都是hanfeng 總用量 0 drwxr-xr-x. 4 user1 hanfeng 39 10月 26 08:23 aminglinux drwxr-xr-x. 3 root root 14 10月 25 06:29 amning srwxrwxrwx. 1 mysql mysql 0 10月 27 02:47 mysql.sock -rw-r--r--. 1 user1 root 0 10月 26 07:48 yum.log -rw-rw-r--. 1 hanfeng hanfeng 0 10月 27 08:40 yunwei [hanfeng@hf-01 tmp]$ vi yunwei 並能夠編輯文件 [hanfeng@hf-01 tmp]$ chmod 777 yunwei 將yunwei文件權限修改成777 [hanfeng@hf-01 tmp]$ ls -l 會看到yunwei的權限變化爲-rwxrwxrwx. 總用量 4 drwxr-xr-x. 4 user1 hanfeng 39 10月 26 08:23 aminglinux drwxr-xr-x. 3 root root 14 10月 25 06:29 amning srwxrwxrwx. 1 mysql mysql 0 10月 27 02:47 mysql.sock -rw-r--r--. 1 user1 root 0 10月 26 07:48 yum.log -rwxrwxrwx. 1 hanfeng hanfeng 26 10月 27 08:41 yunwei 這時在切換到1hf(0)下 [root@hf-01 tmp]# whoami 查看所屬主 root [root@hf-01 tmp]# su - user1 切換到user1用戶下 [user1@hf-01 ~]$ cd /tmp/ 切換到目錄/tmp/下 [user1@hf-01 tmp]$ ls 會發現能夠查看到文件 aminglinux amning mysql.sock yum.log yunwei [user1@hf-01 tmp]$ vi yunwei 也能夠進行編輯 [user1@hf-01 tmp]$ rm -f yunwei 不能夠刪除文件yunwei的 rm: 沒法刪除"yunwei": 不容許的操做
因此說,這個stick_bit權限叫防刪除位,只有有權限的用戶(好比root)才能夠刪除,而其餘的用戶是根本沒法刪除掉的node
- 就是防止別人刪除本身的文件(root用戶除外)
在終端1hf(0)下 [user1@hf-01 tmp]$ mkdir user1 新建目錄user1 [user1@hf-01 tmp]$ chmod 777 user1 並把權限修改成777 [user1@hf-01 tmp]$ ls -l 總用量 4 drwxr-xr-x. 4 user1 hanfeng 39 10月 26 08:23 aminglinux drwxr-xr-x. 3 root root 14 10月 25 06:29 amning srwxrwxrwx. 1 mysql mysql 0 10月 27 02:47 mysql.sock drwxrwxrwx. 2 user1 user1 6 10月 27 08:57 user1 777權限,意味着任何用戶均可以去寫,可讀,可執行 -rw-r--r--. 1 user1 root 0 10月 26 07:48 yum.log -rwxrwxrwx. 1 hanfeng hanfeng 45 10月 27 08:43 yunwei 切換到終端2hf(1)下 [hanfeng@hf-01 tmp]$ cd user1 切換到目錄user1下面 [hanfeng@hf-01 user1]$ touch 1.txt 發現能夠建立文件 [hanfeng@hf-01 user1]$ mkdir 234 能夠建立目錄 [hanfeng@hf-01 user1]$ ls -l 總用量 0 -rw-rw-r--. 1 hanfeng hanfeng 0 10月 27 09:03 1.txt drwxrwxr-x. 2 hanfeng hanfeng 6 10月 27 09:03 234 在切換到終端1hf(0)下 [user1@hf-01 tmp]$ cd user1 [user1@hf-01 user1]$ ls 1.txt 234 [user1@hf-01 user1]$ ls -l 總用量 0 -rw-rw-r--. 1 hanfeng hanfeng 0 10月 27 09:03 1.txt drwxrwxr-x. 2 hanfeng hanfeng 6 10月 27 09:03 234 [user1@hf-01 user1]$ rm -f 1.txt [user1@hf-01 user1]$ ls 234 [user1@hf-01 user1]$ rm -r 234 rm:是否刪除有寫保護的目錄 "234"?y [user1@hf-01 user1]$ ls [user1@hf-01 user1]$ pwd /tmp/user1 [user1@hf-01 user1]$ ls -ld . drwxrwxrwx. 2 user1 user1 6 10月 27 09:07
上述例子,這是由於這個目錄,刪除的這個文件所在的目錄有沒有寫權限,而不是看刪除的文件自己的權限,user1目錄下有1.txt文件,要想刪除1.txt,看的不是1.txt文件的權限,而是看1.txt所在目錄的權限,它所在的目錄是user1,user1就是777,777是任何用戶可編輯的,因此就可刪除,而一旦咱們加上了stick_bit權限mysql
文件是否能夠被某用戶刪除,主要取決於該文件所在的目錄是否對該用戶具備寫權限。若是沒有寫權限,則這個目錄下的全部文件都不能刪除,同時也不能添加新的文件。linux
若是但願用戶可以添加文件,可是不能刪除該目錄下其餘用戶的文件,則能夠對該目錄增長這個權限。sql
設置該權限後,就算用戶對目錄具備寫權限,也不能刪除其餘用戶的文件。windows
有時候,set-uid上的權限爲大寫的S,而不是小寫的s。這是由於該文件沒有x權限所致,不論是大寫的S仍是小寫s,都表示它存在set-uid和set-gid權限。同理stick-bit也同樣。ui
當有特殊權限時,第一位數字能夠是0、1(--t)、2(-s-)、3(-st)、4(s--)、5(s-t)、6(ss-)、7(sst),這裏的「(---)」,分別指user、group、others的權限位(rwx rwx rwx)。 如:/tmp是--t,因此第一位爲1,因此/tmp權限用數字表示爲1777。3d
文件的讀寫執行權限不要和目錄的讀寫執行權限混淆。日誌
好比:一個文件設置了可寫權限,但目錄未設置可寫權限,表示不能刪除該文件,但文件內容是可編輯的。code
一個目錄設置了可寫權限,但目錄下文件沒有可寫權限,表示可刪除該文件,但該文件不能編輯。可否刪除一個文件或者目錄,看得是這個文件或目錄所在的父目錄的權限,可否刪除和文件自己的權限無關。it
``` [root@hf-01 ~]# ls -l /bin 這個/bin,就是一個軟連接文件,真正是在/usr/bin/下 lrwxrwxrwx. 1 root root 7 8月 21 05:03 /bin -> usr/bin [root@hf-01 ~]# /bin/ls 11.txt 123 234 2.txt 33.txt anaconda-ks.cfg.1 ha.txt hf [root@hf-01 ~]# /usr/bin/ls 會發現和/bin/ls是一個軟連接文件 11.txt 123 234 2.txt 33.txt anaconda-ks.cfg.1 ha.txt hf ```
在/lib64/目錄中軟連接文件最多 [root@hf-01 ~]# ls -l /lib64/
軟連接就像是windows中的快捷方式,能夠很大程度的節省磁盤空間
好比要找一個文件,必需要在/tmp/123/12/1.txt,而自己這個1.txt文件放到了/root/123/這個目錄下 而這個程序必需要在/tmp/12/目錄下找到1.txt文件 方法一:能夠拷貝一份到該目錄下,但如果文件更改後,就會繼續要拷貝,因此很麻煩。 方法二:給/root/123/1.txt作一個軟連接
[root@hf-01 ~]# ls 11.txt 123 234 2.txt 33.txt anaconda-ks.cfg.1 ha.txt hf [root@hf-01 ~]# cd /tmp/ [root@hf-01 tmp]# ls aminglinux amning mysql.sock user1 yum.log yunwei [root@hf-01 tmp]# ln -s /tmp/yum.log /root/123/yum.log [root@hf-01 tmp]# ls -l /root/123/ 這樣就造成了一個軟連接文件 總用量 0 lrwxrwxrwx. 1 root root 12 10月 30 05:44 yum.log -> /tmp/yum.log
[root@hf-01 tmp]# ln -s /tmp/amning/ /root/amning111 [root@hf-01 tmp]# ls -l !$ ls -l /root/amning111 lrwxrwxrwx. 1 root root 12 10月 30 05:51 /root/amning111 -> /tmp/amning/
[root@hf-01 tmp]# ls -l 總用量 4 -rw-r--r--. 1 root root 0 10月 30 06:09 aa.log srwxrwxrwx. 1 mysql mysql 0 10月 30 04:49 mysql.sock drwxrwxrwx. 2 user1 user1 6 10月 27 09:07 user1 [root@hf-01 tmp]# ln -s aa.log ss.log [root@hf-01 tmp]# ls -l 總用量 4 -rw-r--r--. 1 root root 0 10月 30 06:09 aa.log srwxrwxrwx. 1 mysql mysql 0 10月 30 04:49 mysql.sock lrwxrwxrwx. 1 root root 6 10月 30 06:13 ss.log -> aa.log
[root@hf-01 ~]# cd /tmp/ [root@hf-01 tmp]# ls -l 總用量 4 drwxr-xr-x. 4 user1 hanfeng 53 10月 30 06:01 aminglinux lrwxrwxrwx. 1 root root 6 10月 30 06:13 ss.log -> aa.log [root@hf-01 tmp]# mv ss.log aminglinux/ [root@hf-01 tmp]# cd aminglinux [root@hf-01 aminglinux]# ls -l 總用量 0 drwxr-xr-x. 4 user1 hanfeng 31 10月 25 06:55 aming2 lrwxrwxrwx. 1 root root 6 10月 30 06:13 ss.log -> aa.log 這裏會發現aa.log在飄紅閃爍,這是由於這個文件不存在
[root@hf-01 ~]# df -h 查看磁盤分區狀況 文件系統 容量 已用 可用 已用% 掛載點 /dev/sda3 18G 2.4G 16G 14% / devtmpfs 489M 0 489M 0% /dev tmpfs 494M 0 494M 0% /dev/shm tmpfs 494M 6.7M 487M 2% /run tmpfs 494M 0 494M 0% /sys/fs/cgroup /dev/sda1 197M 75M 123M 38% /boot
硬連接:當系統要讀取一個文件時,會先讀inode信息,而後再根據inode中的信息到塊區域將數據取出來。而硬連接是直接再創建一個inode連接到文件放置的塊區域。即創建硬連接時該文件內容沒有變化,只是增長了一個指向這個文件的inode,並不會額外佔用磁盤空間。
硬連接不支持對目錄作連接,只支持對文件作連接
[root@localhost ~]# ln 1.txt 1_heard.txt
[root@localhost ~]# ln -s 1.txt 1_sorft.txt
[root@localhost ~]# ls -l 總用量 32 drwxr-xr-x. 3 root root 45 10月 26 16:11 111 -rw-r--r--. 1 root root 0 10月 26 15:54 111.12.txt -rw-r--r--. 2 root root 391 10月 30 15:10 1_heard.txt lrwxrwxrwx. 1 root root 5 10月 30 15:06 1_sorft.txt -> 1.txt [root@localhost ~]# ls -i 33584735 111 33575033 1_sorft.txt 33575034 2.txt 33574987 anaconda-ks.cfg 33584737 111.12.txt 33575035 1.txt 33584734 3.txt 33575006 anaconda-ks.cfg.1 33575035 1_heard.txt 33584733 1.txt~ 33584736 3.txt~ 33575036 windows.txt
[root@localhost ~]# rm 1.txt rm:是否刪除普通文件 "1.txt"?y [root@localhost ~]# ls -l 總用量 28 drwxr-xr-x. 3 root root 45 10月 26 16:11 111 -rw-r--r--. 1 root root 0 10月 26 15:54 111.12.txt -rw-r--r--. 1 root root 391 10月 30 15:10 1_heard.txt lrwxrwxrwx. 1 root root 5 10月 30 15:06 1_sorft.txt -> 1.txt
[root@localhost ~]# ls -i 1_heard.txt 33575035 1_heard.txt
[root@localhost ~]# ln 111 hf11 在硬連接指向目錄的時候,會提示錯誤 ln: "111": 不容許將硬連接指向目錄
[root@localhost ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/sda3 18G 1.1G 17G 6% / devtmpfs 483M 0 483M 0% /dev tmpfs 493M 0 493M 0% /dev/shm tmpfs 493M 6.7M 486M 2% /run tmpfs 493M 0 493M 0% /sys/fs/cgroup /dev/sda1 197M 109M 88M 56% /boot tmpfs 99M 0 99M 0% /run/user/0 [root@localhost ~]# ls -i /boot/ 71 config-3.10.0-514.el7.x86_64 67 grub 131136 grub2 76 initramfs-0-rescue-513f8b3950084e768a99df3a6cd3d9e6.img 75 initramfs-3.10.0-514.el7.x86_64.img 189445 initramfs-3.10.0-514.el7.x86_64kdump.img 74 initrd-plymouth.img 72 symvers-3.10.0-514.el7.x86_64.gz 70 System.map-3.10.0-514.el7.x86_64 77 vmlinuz-0-rescue-513f8b3950084e768a99df3a6cd3d9e6 73 vmlinuz-3.10.0-514.el7.x86_64 [root@localhost ~]# ln /boot/config-3.10.0-514.el7.x86_64 /tmp/conifg.1 ln: 沒法建立硬連接"/tmp/conifg.1" => "/boot/config-3.10.0-514.el7.x86_64": 無效的跨設備鏈接