Linux

讓程序以任意深度讀取和寫入某個目錄內的所有文件

  • November 18, 2016

我有一個由我擁有的目錄(例如/sync)和一個由我執行的程序,我希望擁有對該目錄的完全讀寫訪問權限(在我的情況下,該程序是 Resilio Sync,以前稱為 BitTorrent Sync)。此目錄中的所有文件都是個人項目和文件。其中 99% 歸我所有,但有時,出於不可避免的原因,某些目錄和文件是由 root 創建的。我將如何以某種方式讓程序更改、移動和/或刪除此類目錄和文件?

我嘗試了粘性位(設置g+son /sync,以便所有文件繼承該組)和自定義 ACL 規則(嘗試讓粘性位自動傳播到新創建的目錄)的組合,但是,如本答案及其評論,如果沒有 inotify 就無法完成(為簡單起見,我想避免這樣做)。

但是,我想知道,也許還有其他方法可以解決這個問題?就像在某個目錄及其中的所有內容中賦予一個特定程序更多權力,而忽略所有文件權限?如果這是可能的,是否有任何我需要注意的安全隱患?

我不認為這個目標需要粘性位。假設程序以使用者身份執行resilio,而您的使用者帳戶是olegs。(我看到執行該過程的是您的帳戶;我添加這個是為了展示。)

# Change all ownership to root:root
chown -R root:root /sync

# Make sure only root (and group members of root) can get a directory listing.
chmod 0750 /sync

# Now, let's augment standard permissions with ACLs.

# Set default masks for all new file system objects in /sync.
# (The root user already has permission.)
setfacl -d -m u:resilio:7 /sync
setfacl -d -m u:olegs:7 /sync

# Apply a mask to all existing files (and dirs) to give full control
# to the directory contents to olegs and resilio.

setfacl -m -R u:resilio:7 /sync
setfacl -m -R u:olegs:7 /sync

現在,這些使用者可以完全控制目錄:rootolegsresilio. 否則,沒有其他使用者可以看到/sync目錄的內容。儘管遮罩指定7(讀/寫/執行),但目錄變為 rwx,文件實際上變為6(讀/寫)。

引用自:https://unix.stackexchange.com/questions/324341