為什麼目錄會設定黏滯位元而不設定可執行位?

為什麼目錄會設定黏滯位元而不設定可執行位?

在 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 相關,而不僅僅是他們的姓名

相關內容