文件模式分成了三組,每組都有讀權限,寫權限,執行權限,每一組的權限如果用二進制的數字表示,可以寫為111,1代表有該權限,0代表沒有,權限設置為111-110-110則意味著文件擁有者擁有讀,寫和執行三個權限,而用戶組成員和其他人只擁有對文件讀和寫的權限。但是用二進制來設定很麻煩,所以,實際使用數字設置權限的時候,使用八進制,比如設置一個文件的權限為只有擁有者可以讀寫,那么二進制寫作110 000 000,在使用chmod命令的時候寫作chmod 600。
我們看到,新建文件test的文件模式為rw- rw- r–
我們修改一下umask的值,再新建一個文件試試

umask顯示的值是文件模式的掩碼,是一個八進制的數字。先撇開掩碼的第一位,初始后三位是002,變成二進制數就是000 000 010,這個掩碼對應的權限就是rw- rw- r–,之后我們修改掩碼,變為000 000 000,這時候掩碼對應的權限就是rw- rw- rw-,是不是已經能看出倪端了?對,當我們將二進制格式的掩碼某一位設置為0,實際上是打開了該位置的權限(但是執行權限無法開啟,這也是處于安全考慮,新建的文件沒有執行權限)
那么第一個八進制的0是什么含義?
除了常用的讀權限,寫權限和執行權限,還有一些特別的權限。
1:setuid位,他在掩碼的第一位,如果開啟,那么文件權限的掩碼應該是4000。setuid有什么作用呢?如果某個文件開啟了setuid位,那么該文件執行的時候,該文件具有文件所有者的權限,比如你是一個一般用戶,你執行了一個root用戶的文件,并且該文件設置了setuid位,那么文件執行的時候是擁有root權限的,所以對于setuid位的設置要慎重。
如何開啟setuid位呢
chmod u+s 文件,表示開啟setuid
2:和setuid位類似,他在掩碼的第二位,開啟的話,掩碼的設置是2000。setgid表示操作一個文件的時候,操作文件的用戶組會由當前組變為文件所在組的權限。對于文件所屬組不是文件創造者所在組的情況,可能會帶來權限的變化。
開啟setgid
chmod g+s 文件,開啟setgid位
3:sticky位,掩碼中的第三位,開啟時,掩碼設置是1000,這個權限位通常用來限制訪問,如果它開啟,那么它能阻止用戶刪除或重命名文件,除非用戶是這個文件所有者,或是超級用戶。
開啟sticky位
chmod +t 文件
如何確定某個文件是否開啟了setuid位,segid位呢?當某個文件開啟了某個特殊權限位,那么在對應的權限分組中,該組的執行權限會顯示s。
比如某個文件開啟了setuid位,那么他的權限是rws r– r–;開啟了setgid位,則是rw- rws r–;sticky位則在其他人組中體現,rw- rw- rwt
su/sudo 身份的切換
除非是root用戶,否則一般用戶在很多情況下都會有對系統進行操作的限制。如果一個一般用戶進行某個操作,比如執行某個文件,但是他沒有這個文件的執行權限,那么該怎么辦呢?最簡單粗暴的方式就是注銷,使用root用戶登錄進行操作。雖然可行,但是不可取,畢竟太不方便了。
su:使用替代用戶執行命令
這個命令不太好記,全稱是run a command with substitute user and group ID,看起來是substitute user的縮寫。作用就是使用替代用戶來執行操作。
示例:切換一個用戶,如果不指定用戶,那么默認切換到root
su [用戶]

直接使用su之后,系統提示我們輸入密碼,注意,這里輸入的是root用戶的密碼,而不是當前用戶的密碼。之后,我們會發現shell提示符酉“$”變成了“#”
有一個常用選項是”-l”(他有一個別名是“-”),添加“-l”會出現一個需要登錄的shell,加載替代用戶的shell環境。我們看到,添加“-l”之后登錄,初始目錄定位到了root用戶的家目錄

其實有時候我們并不需要切換用戶,只是需要使用個別用戶的權限來做一些操作罷了,還有一個常用選項是“-c”,執行一個命令。比如一個一般用戶希望查看一下root用戶的家目錄

只執行單個命令,而不是啟動一個新的可交互的 shell,使用“-c”選項,命令將傳遞到一個新的shell中執行,所以命令參數需要單引號引起作為一個參數。
sudo:使用替代用戶去執行操作,但是提供靈活的配置
sudo和su類似,都是以另一個身份去執行某些操作,但是sudo允許管理員進行靈活的配置,比如某些操作只允許特定用戶來執行,在經過配置之后,特定用戶不需要管理員的密碼,只需要輸入自己的密碼就可以使用管理員權限來執行特定操作。通常情況下,sudo并不會啟動一個新的shell,也不會加載其他用戶的shell環境。
除了切換當前的用戶,獲取root權限等,我們還需要更改文件的所有者,所屬組
chown:更改文件的所有者和所屬組
這個命令可以同時修改兩個所屬關系,也可以單獨修改。
命令格式:chown [OPTION]… [OWNER][:[GROUP]] FILE…,這是文檔的原話,我們添點料
最簡單的使用:chown alvindu327 a.txt,把a.txt文件的所有者從原所有者變為alvindu327

然后,說一下比較全面的用法
1,同時變更所屬用戶和所屬組。chown alvindu327: a.txt,剛才的命令我們可以看到,a.txt的所屬組依然屬于root,在所屬用戶之后添加“:”,意為著將文件原所屬組變更為新用戶登陸時的所屬組

2,單獨變更所屬用戶和所屬組。
chown alvindu327:demonuser a.txt,將a.txt的所屬用戶變為alvindu327,所屬組變更為demonuser
3,只變更所屬組
chown :onlygrp a.txt,將a.txt的所屬組變更為onlygrp,所屬者不變
接下來還剩下不少命令需要了解,比如新建用戶,新建組,修改密碼等等,但是一一列舉出來沒什么意思,為什么不用apropos去模糊查詢一下呢,新建用戶,或許會是adduser吧,要不createuser?猜測和搜索也是很好的學習方式。
喔,最后幾乎忘了一個重要的內容,雖然常用權限有讀,寫,和執行,看起來很簡單,但是你真正明白他們的含義嗎?
對于文件而言
- 讀權限:表示可以查看這個文件的內容(可以使用cat,less,more等命令進行查看)
- 寫權限:表示可以修改這個文件的內容(可以使用編輯器修改這個文件)
- 執行權限:表示該文件(可能是命令,或者腳本)可以執行
對于目錄而言(雖然目錄也是文件,但是這里做一個區分)
- 讀權限:表示可以列出目錄內的內容(使用ls可以查看文件的內容)
- 寫權限:表示可以在目錄中創建,刪除文件(touch文件,mkdir目錄,或者rm文件)
- 執行權限:表示可以進入到這個目錄中
對于常用讀寫執行權限,我本來也和很多人一樣,認為很簡單,但是其中真的有幾個誤區需要掃盲:
*我對一個文件有寫權限,我就可以刪除這個文件嗎?答案是否定的,寫權限僅僅是修改文件的內容而已,如果你需要刪除這個文件,你需要擁有對這個文件所在目錄的寫權限才行。
*我對一個目錄有讀權限,我就可以查看這個目錄的內容嗎(雖然聽起來沒什么不對)?答案是否定的,對一個目錄有讀權限,僅僅是讓你能看到這個目錄的存在,而查看目錄的內容,你需要目錄的執行權限,所以,目錄的讀權限和執行權限一般都是同時存在的,倘若一個目錄只有讀權限,那就是耍流氓,知道有,看不了;倘若只有執行權限,那就是特供情報,雖然“沒有”,但是能查看…