為所有使用者設置 umask
我正在嘗試將所有使用者的預設 umask 設置為 002,包括我的 CentOS 機器上的 root。
根據這個和其他答案,這可以通過編輯來實現
/etc/profile
。然而,該文件頂部的評論說:除非您知道自己在做什麼,否則更改此文件不是一個好主意。最好在 /etc/profile.d/ 中創建一個 custom.sh shell 腳本來對您的環境進行自定義更改,因為這樣可以避免在未來的更新中進行合併。
所以我繼續創建了以下文件:
/etc/profile.d/myapp.sh
與單行:
umask 002
現在,當我創建一個以 root 身份登錄的文件時,該文件以 664 權限出生,這是我希望的方式。但是由我的 Apache mod_wsgi 應用程序創建的文件,或使用 sudo 創建的文件,仍然預設為 644 權限…
$ touch newfile
(作為根):結果 = 664(工作)
$ sudo touch newfile
:結果 = 644(不起作用)
Apache mod_wsgi 應用程序創建的文件:
結果 = 644(不起作用)
由 Python 的 RotatingFileHandler 創建的文件:
Result = 644(不起作用)
為什麼會發生這種情況,以及如何確保系統範圍內的 664 文件權限,無論創建文件是什麼?
profile
是 shell 的啟動文件。設置umask 002
為profile.d
所有從登錄 shell 啟動程序的使用者設置它。你的兩個例子性質不同。
init.d
對於 Apache,您可以在啟動 http 伺服器的腳本中設置 umask 。對於以您開始的程序,
sudo
您可以使用umask
sudoers 文件中的選項。
完成 umask 的最佳方法是
/etc/bashrc
為 root 編輯文件並~/.bashrc
為其他使用者編輯文件。您為特定使用者輸入的任何內容~/.bashrc
都將覆蓋您在 /etc/profile.d 中輸入的內容。因此,找出您的 apache 在哪個使用者下執行並將 umask 放入
~./bashrc
文件中。這適用於使用者。它包括互動式使用者登錄,並且可以通過獲取文件來開始工作。不需要註銷和登錄。
但是,如果您要為守護程序設置 umask,那麼您需要進入 init 腳本並在它獲取
/etc/rc.d/init.d/functions
文件後將 umask 放在那裡。如果在此之前設置 umask,它可能不起作用。但是我看到一些守護程序即使在它們的初始化腳本中設置 umask 也無法工作,一個簡單的例子就是 RHEL 中的 cobblerd。為此,您需要將 umask 放入/etc/rc.d/init.d/functions
文件本身。但主要是通過將 umask 值放入
~/.bashrc
文件中。這就是我到目前為止的工作方式,但如果有其他意見,我很高興知道。