Linux

為所有使用者設置 umask

  • December 18, 2012

我正在嘗試將所有使用者的預設 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 002profile.d所有從登錄 shell 啟動程序的使用者設置它。

你的兩個例子性質不同。init.d對於 Apache,您可以在啟動 http 伺服器的腳本中設置 umask 。

對於以您開始的程序,sudo您可以使用umasksudoers 文件中的選項。

完成 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文件中。

這就是我到目前為止的工作方式,但如果有其他意見,我很高興知道。

引用自:https://serverfault.com/questions/458533