您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關怎樣搞懂Linux權限體系,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
隨著年齡的增加,我的經驗越來越豐富,而記憶力卻越來越差。為了應付繁重的日常事務,我不得不準備了長長的任務清單。每一條事項的背后,都在不斷的提醒我:無論生活中充滿什么驚喜,還是逃離不了它平庸的本質。
而我對時間,會更加的敏感。每次一次敲擊鍵盤,都會調動骨關節的扭動,留下一洗不可撤回的痕跡:windows的超級用戶,名字叫做Administrator。這個單詞太長了,我總也記不住。相對來說,linux的超級用戶叫做root,只有四個字母。它的耗能值,比前者要低的多。
我們在第三小節,剛接觸命令行的時候,就使用chmod命令,給普通文本文件,賦予了執行權限。本小節將看一下用戶權限和文件權限這兩個息息相關的概念,
1、添加用戶
到現在為止,我們的系統中,還孤零零的只有這一個用戶,是時候學學女媧,捏幾個小泥人了。
首先創建兩個用戶:張三(zhang3)、李四(li4)。
[root@localhost ~]# useradd zhang3
查看下面命令的三個輸出結果。
# 系統中多了一個叫做zhang3的組,group文件保存了系統的組信息 [root@localhost ~]# tail -n1 /etc/group zhang3:x:1000: # 系統中多了一個叫做zhang3的用戶,shadow文件保存了它們的密碼。很多安全滲透就是為了拿到它進行暴力破解 [root@localhost ~]# tail -n1 /etc/shadow zhang3:!!:18207:0:99999:7::: # home目錄中,多了一個叫做zhang3的目錄 [root@localhost ~]# ll /home --full-time total 0 drwx------. 2 zhang3 zhang3 83 2019-11-06 22:09:33.357165082 -0500 zhang3
接下來,給我們剛剛建立的用戶,使用passwd設置一個密碼。密碼需要輸入兩次進行確認。如果想要更改密碼,可以使用chpasswd命令。
[root@localhost ~]# passwd zhang3 Changing password for user zhang3. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully.
那么如何刪除一個現有的用戶呢?這是通過userdel命令實現的。加上參數f,會在其他用戶使用系統的時候,強制退出。
userdel -f zhang3
2、文件權限說明
從上面的命令執行結果中,我們發現了有兩件非常有意思的東西。添加用戶后,除了在密碼文件shadow中增加了一些內容,同時還在group文件中添加了信息。這涉及到用戶的兩個屬性:用戶名,組名。
一個用戶只有一個名稱代號,但是可以有多個組。下面命令創建一個密碼為123的用戶li4,并給它追加一個叫做zhang3的組。可以看到/etc/group文件中的信息變更。
[root@localhost ~]# useradd -G zhang3 -p 123 li4 [root@localhost ~]# tail -n 2 /etc/group zhang3:x:1000:li4 li4:x:1001:
好啦,接下來切換到我們的文件權限上面。為了進行下面命令的驗證,我們首先創建一個名字叫confirm777.sh的腳本文件。為了讓腳本對所有用戶可見,我們把它創建在/tmp目錄下。
cat > /tmp/confirm777.sh <<EOF echo $USER id EOF
使用ll命令查看文件信息。
[root@localhost ~]# ll /tmp/confirm777.sh --full-time -rw-r--r--. 1 root root 13 2019-11-07 04:25:55.418254935 -0500 confirm777.sh
從ll的命令可以看出,文件的所有者是root用戶,文件所屬的組,也是root組,它的權限是rw-r--r--。文件權限分為三部分。
所有者權限,縮寫為u。文件的所有者所擁有的權限。也就是root用戶的權限,是rw-
組用戶權限,縮寫為g。文件所屬組內所有用戶的權限。因為root組內只有root一個用戶,所以組用戶權限是r--。
其他用戶權限,縮寫為o。其他不相關用戶的權限,比如我們剛創建的zhang3、li4用戶,對文件的權限就是r--。
全部,縮寫為a,表示對上面三類用戶集體操作。
那rw-這些東西是什么意思呢?
r 表示可讀權限。read。
w 表示可寫權限。write。
x 表示可執行權限。execute。
- 權限占位符,表示沒有當前權限。
注意:一個用戶擁有文件的w權限,并不代表就可以刪除文件。w僅僅針對于文件內容來說的。
一個文件,有3類用戶,每類用戶,有3種權限。使用最簡單的小學乘法,我們能夠得出,一個文件的權限位,需要3x3=9個標志位表示。
我們的文件名稱,叫做confirm777.sh,這個名字是隨便起的么?當然不是,777在linux代表特殊的含義,它代表文件對所有用戶具有可讀、可寫、可執行的權限。可以想象,如果每個文件都有這樣的權限,系統將無安全可言。那這一串數字是怎么來的呢?可以看下面的對照表。
r 4 讀
w 2 寫
x 1 執行
對以上三個屬性進行任意組合,可以得到:
4 r-- 4+0+0
6 rw- 4+2+0
5 r-x 4+0+1
2 -w- 0+2+0
3 -wx 0+2+1
1 --x 0+0+1
7 rwx 4+2+1
3、文件權限更改
下面介紹三個文件權限相關的命令。一般常用的,就是chown和chmod。
chown 更改文件的所有者。chgrp 更改文件的組。chmod 更改文件權限。
接下來,我們把confirm777.sh的所有者和組,修改成剛剛創建的用戶zhang3。
cd /tmp [root@localhost tmp]# chown zhang3:zhang3 confirm777.sh [root@localhost tmp]# ll confirm777.sh -rw-r--r--. 1 zhang3 zhang3 13 Nov 7 04:25 confirm777.sh
給文件所有者增加執行權限。然后分別切換到zhang3,li4用戶執行一下。
通過su 命令,可以切換到其他用戶,一般使用su -進行環境變量的清理;而命令id,能夠看到當前正在執行的用戶信息。
[root@localhost tmp]# chmod u+x confirm777.sh [root@localhost tmp]# su li4 [li4@localhost tmp]$ ./confirm777.sh bash: ./confirm777.sh: Permission denied [li4@localhost tmp]$ exit exit [root@localhost tmp]# su zhang3 [zhang3@localhost tmp]$ ./confirm777.sh root uid=1000(zhang3) gid=1000(zhang3) groups=1000(zhang3) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
可以看到,文件所有者zhang3可以執行文件,但不相關的li4,提示沒有權限。接下來,我們驗證用戶組相關的權限位。
# 去掉zhang3的執行權限 root@localhost tmp]# chmod u-x confirm777.sh [root@localhost tmp]# ll confirm777.sh -rw-r--r--. 1 zhang3 zhang3 13 Nov 7 04:25 confirm777.sh # 增加zhang3組的執行權限,由于li4在zhang3組里,它擁有權限 [root@localhost tmp]# chmod g+x confirm777.sh [root@localhost tmp]# ll confirm777.sh -rw-r-xr--. 1 zhang3 zhang3 13 Nov 7 04:25 confirm777.sh # 切換到zhang3進行執行 [root@localhost tmp]# su - zhang3 [zhang3@localhost tmp]$ ./confirm777.sh bash: ./confirm777.sh: Permission denied [zhang3@localhost tmp]$ exit exit # 切換到li4進行執行 [root@localhost tmp]# su - li4 [li4@localhost tmp]$ ./confirm777.sh root uid=1001(li4) gid=1001(li4) groups=1001(li4),1000(zhang3) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
從命令的執行結果可以看出。這次,li4能夠執行文件,相反的,zhang3卻不能。
我們使用chmod命令來修改文件權限,使用的是類似于a+x這樣的英文字母。拿第一個腳本來說,初始的權限是rw-r--r--,也就是644,在這種情況下,下面的兩個腳本等效。
chmod u+x confirm777.sh chmod 744 confirm777.sh
可以看到,第二個命令,使用的是數字樣式的權限位,多了一步人腦轉換過程。這在日常的使用中,是非常不方便的。所以,使用符號法的表示方式,能夠更加直觀,非常推薦。
為了更直觀的表現這個過程,我專門制作了一張圖。
4、目錄權限
這里有一個非常有意思的地方。把文件設置成可執行,可以把普通文件變成腳本,目錄文件的可執行權限是什么鬼?有什么意義?對文件夾來說:
r 表示允許讀取目錄中的文件名,但不能進入該目錄
w 表示允許用戶修改目錄,可以創建、遷移、刪除、更名目錄下的文件
x 可以獲得目錄下文件的列表,以及進入目錄,執行cd命令
關于r和x的區別,可以看下面的命令結果,仔細感受一下它們的區別。一般的,幾乎所有的目錄,都擁有執行權限,不要隨意對其進行設置。
[root@localhost tmp]# su - li4 [li4@localhost ~]$ cd /tmp [li4@localhost tmp]$ mkdir nox [li4@localhost tmp]$ touch nox/{a,b,c,d} [li4@localhost tmp]$ chmod a-x nox [li4@localhost tmp]$ ls nox ls: cannot access nox/a: Permission denied ls: cannot access nox/b: Permission denied ls: cannot access nox/c: Permission denied ls: cannot access nox/d: Permission denied a b c d [li4@localhost tmp]$ cat nox/a cat: nox/a: Permission denied [li4@localhost tmp]$ chmod a+x nox [li4@localhost tmp]$ chmod a-r nox [li4@localhost tmp]$ ls nox ls: cannot open directory nox: Permission denied
5、sticky bit
接下來,我們介紹一個比較燒腦的粘貼位。
假如你要刪除一個文件,你可以沒有這個文件的寫權限,但是你必須要擁有這個文件上級目錄的寫權限。如何創建一個目錄,可以讓任何人些人文件,但是又不能刪除其他用戶的文件?這就是stick bit的作用。粘貼位一般只用于目錄上,對文件來說并沒有什么用處。粘貼位一般使用t表示。
我們可以看一個典型的目錄/tmp
[root@localhost tmp]# ls -dl /tmp drwxrwxrwt. 9 root root 4096 Nov 7 06:27 /tmp
可以看到,最后一位,顯示的是t,而不是x,意思是普通用戶不能刪除其他用戶的文件。所有用戶在/tmp目錄中,都可以隨意創建文件,但是卻刪除不了其他人的文件,即使文件的權限是777。
[root@localhost tmp]# touch /tmp/stick [root@localhost tmp]# chown li4:li4 /tmp/stick [root@localhost tmp]# chmod 777 /tmp/stick [root@localhost tmp]# su - zhang3 [zhang3@localhost ~]$ rm /tmp/stick rm: cannot remove ‘/tmp/stick’: Operation not permitted
6、小結
本小節創建了兩個用戶zhang3和li4,并拿它們測試了chown和chmod命令,最后介紹了粘貼位。linux比較安全的原因,就是因為有比較詳盡的權限劃分。但權限是枚雙刃劍,超權用戶一個命令就可以搞垮系統,許多隱藏的木馬,通過提權運行在不為人知的地方。
權限相關的幾個命令會經常被使用,下面舉幾個例子。
# 設置/var/lib/mysql的用戶和組為mysql chown -R mysql:mysql /var/lib/mysql # 設置目錄可讀可寫,能夠上傳文件 chmod 777 /var/www/uploads # 增加本目錄下所有sh的執行權限 chomd a+x *.sh # 變更file為可讀可寫可執行 chmod u=rwx,g=rwx,o=rwx file
7、思考&擴展
1、下面這個命令,執行以后,會發生什么情況?警告:不要執行,哪怕把000改成其他數字。
# R遍歷子目錄的意思 chmod -R 000 /
2、有一天,我看到一個命令chmod u+s file,文中并沒有介紹s是什么意思,這是什么意思?
3、如何刪除一個用戶的組?
EndLinux系統的命令是十分枯燥的。本系列不知不覺已經持續了8個周。和預想的一樣,它并未取得廣泛的歡迎,從它和其他文章迥然的閱讀量就可以看出--標題就讓人失去了點擊的欲望。
技術類文章完全不同于扯淡型的天馬行空,耗費的精力也是巨大的,尤其對我一個對正確性有強迫癥的人來說。有時候,我會產生迷茫。不知道這依靠興趣支撐的輸出,能夠持續多久。
能夠翻到結尾,翻到這里的朋友,xjjdog非常感謝。還有幾篇就要結束了,加上以前關于Linux的一些文章,已經可以成為一個體系了。如果你跟蹤至此,至少已經可以在平常的工作中游刃有余了。
xjjdog接下來會找一些讓人歡迎的主題,而不是這么枯燥的知識點。畢竟,有的時候,人家畢竟還是個可愛的女孩紙嘛。
上述就是小編為大家分享的怎樣搞懂Linux權限體系了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。