我在上篇文章中詳細介紹了 Linux 下文件和目錄的許可權:Linux 許可權管理 在介紹掩碼 umask 的時候有提到高級許可權,但是沒有具體講,今天我們就來看看這些特殊的許可權是怎麼樣的。

Linux 許可權管理 這篇文章中,umask 掩碼的使用的時候,都是用文件的原始許可權減去掩碼中後三位八進位數展開為二進位數後為 1 的位的許可權得到文件的默認許可權。那為什麼第一位省略了呢?其實不是省略了,是一般情況下用不到,只在特殊的情況下才會用到。雖然我們通常看到一個八進位的許可權掩碼用後三位數字來表示,但是從技術層面上來講, 用四位數字來表示它更確切些。為什麼呢?因為除了讀取、寫入和執行許可權之外,還有其它較少用到的許可權設置。

1. setuid 位

我們在講 sudo 命令的時候,sudo 的作用就是讓普通用戶使用 root 用戶的許可權去運行其他命令。這是怎麼做到的呢?其實是使用 sudo 執行命令後,運行的程序會把用戶 ID 設置成 root 用戶的 ID,也就是要運行的程序屬於 root 用戶。這種操作通常會應用到一些由超級用戶所擁有的程序。當一個普通用戶運行一個程序,這個程序由根用戶 (root) 所有,並且設置了 setuid 位,這個程序運行時具有超級用戶的特權,這樣程序就可以訪問普通用戶禁止訪問的文件和目錄。很明顯,因為這會引起安全方面的問題,所有可以設置 setuid 位的程序個數,必須控制在絕對小的範圍內。

setuid 的 umask 是:4000

2. setgid 位

如果設置了一個目錄的 setgid 位,則目錄中新創建的文件 具有這個目錄用戶組的所有權,而不是文件創建者所屬用戶組的所有權。對於共享目錄來說, 當一個普通用戶組中的成員,需要訪問共享目錄中的所有文件,而不管文件所有者的主用戶組時, 那麼設置 setgid 位很有用處。

setgid 的 umask 是:2000

3. sticky 位

sticky 位繼承於 Unix,在 Unix 中,它可能把一個可執行文件標誌為「不可交換的」。在 Linux 中,會忽略文件的 sticky 位,但是如果一個目錄設置了 sticky 位, 那麼它能阻止用戶刪除或重命名文件,除非用戶是這個目錄的所有者,或者是文件所有者,或是超級用戶。這個經常用來控制訪問共享目錄,比方說 /tmp。

sticky 的 umask 是:1000

4. 其他

還有一些例子,使用 chmod 命令和符號表示法,來設置這些特殊的許可權。

  • 首先, 授予一個程序 setuid 許可權
    • chmod u+s program
  • 下一步,授予一個目錄 setgid 許可權
    • chmod g+s dir
  • 最後,授予一個目錄 sticky 許可權
    • chmod +t dir

當我們使用 ls 命令查看文件的時候,會看到類似下面的例子:

  • setuid 屬性
    • -rwsr-xr-x
  • setgid 屬性
    • drwxrwsr-x
  • 設置了 sticky 位
    • drwxrwxrwt

今天的內容很少,但是不容小覷,它是非常重要的,在以後的使用中會非常的有用。

到目前為止,和 Linux shell 的基本操作相關的內容就介紹玩了,我把 Linux shell 相關的文章整理成了一個目錄,方便大家查看,如下:

Linux shell 基本使用相關文章目錄:

  • 談談計劃
  • 你真的認識 shell 嗎?
  • Linux 下如何切換工作目錄
  • 一些對使用 Linux 系統有幫助的命令
  • 幾個操作文件和目錄的命令
  • 學會使用 Linux 命令
  • Linux 下強大得不得了的 IO 重定向
  • 探索 shell 的工作方式
  • 一些由 shell 提供的鍵盤操作技巧
  • Linux 許可權管理
  • 還有就是本文了哦

好了,今天的分享就到這裡了。

歡迎關注知乎專欄:Linux 漫遊之旅,歡迎關注微信公眾號:Linux 漫遊之旅,免費提供 CSDN 下載服務。

推薦閱讀:

相關文章