
在 Ubuntu 14.04 中,列出目錄的內容/var/spool/cron
提供ls -l
了對其中目錄的以下權限(不相關的列被剪掉):
drwxrwx--T daemon daemon atjobs
drwxrwx--T daemon daemon atspool
drwx-wx--T root crontab crontabs
在沒有可執行位的目錄上設定黏滯位有何目的?
答案1
從手冊頁sticky
:
黏性目錄
設定了「黏性位」的目錄成為僅追加目錄,或者更準確地說,成為限制刪除檔案的目錄。只有當使用者俱有該目錄的寫入權限且該使用者是該檔案的擁有者、該目錄的擁有者或超級使用者時,該使用者才可以刪除或重新命名黏性目錄中的檔案。此功能可有效應用於 /tmp 等必須可公開寫入的目錄,但應拒絕使用者任意刪除或重新命名彼此檔案的許可。
任何使用者都可以建立黏性目錄。有關修改文件模式的詳細信息,請參閱 chmod(1)。
這樣做的結果是,只有黏性目錄中檔案的擁有者才能刪除該檔案。就表格而言cron
,這意味著我不能進去並刪除你的cron 表格並將其替換為以下之一我的選擇,即使我可能具有對該目錄的寫入存取權限。也正是因為這個原因,/tmp
才具有黏性。
答案2
在沒有可執行位的目錄上設定黏滯位有何目的?
drwx-wx--T 2 root crontab 4096 Apr 24 15:00 /var/spool/cron/crontabs/
您所看到的與 Debian 上的類似。目錄做為所有者和群組設定可執行位。僅對於所有者而言,粘性沒有多大意義,因為根據定義,只有一個用戶(並且所有者無論如何都可以覆蓋粘性)。但對於該群組來說,它與像 之類的世界可寫目錄一樣重要/tmp
,即普通用戶無法刪除屬於其他用戶的檔案。
但為什麼有人會成為該組織的成員呢crontab
?
當然是能夠修改他們的 crontab! Debiancrontab
使用 setgid 權限,因此允許任何常規使用者使用自己的 UID 和 GID 存取目錄crontab
。這比讓他們crontab
用 set運行稍微安全一些uid特權,因為使用戶彼此分離。
-rwxr-srx 1 root crontab 36008 2015 年 6 月 11 日 /usr/bin/crontab
現在,正常情況下,目錄中的檔案由各自的擁有者擁有和命名,如果crontab
只允許刪除使用者自己的 crontab,應該不會有問題。像這樣設定檔案權限可以防止程式中出現錯誤,和使訪問用戶的實際 UID 相關,而不僅僅是他們的姓名。