2012-04-19 458 views
58

我正在一個運行Linux(Debian和Ubuntu)的實驗室工作。用戶名和組名由NIS和yp處理。我們有一些每個人都可以訪問的普通用戶來運行實驗,然後我們每個人都有自己的用戶,另外還有一個我們都是其成員的公共組。如何設置系統範圍的umask?

如何使共享/home/驅動器(NFS)上的所有文件和目錄都可由用戶/組讀取/寫入(/可執行文件)?基本上我想要的是

chmod -R 664 /home 
chgrp -R commongroup /home 

或等效地umask 0002

但是,運行上述命令只修復文件夾中的當前文件,而umask僅適用於單個用戶,並且每次用戶登錄時都必須運行umask。在.bashrc文件中(並且這將通過gnome工作於更改模式?)。是否有系統範圍的命令或設置可用於確保我們的commongroup可以訪問公用文件?

+2

我相信你可以使用'setfacl'遞歸設置(和維護)訪問設置的目錄。 http://linuxcommand.org/man_pages/setfacl1.html – tMC 2012-04-19 02:08:17

+2

你不*想'chmod -R 644/home':這會從目錄中刪除eXecute位,這使得它們不可搜索。 – ephemient 2012-04-19 04:02:33

+0

跟隨tMC的評論:如果你想在特定的目錄(和可選的子目錄)上進行此操作,而不是將其綁定到屬於特定用戶的所有(!)文件和目錄,則使用ACL。這是[一個很好的答案](http://stackoverflow.com/a/6550059/923794)到一個類似的問題 – cfi 2014-03-15 12:31:51

回答

90

Debian和Ubuntu都配有pam_umask。這使您可以在/etc/login.defs配置的umask,並讓它們在應用系統範圍,不管如何在用戶登錄的。

要啓用它,你可能需要添加一行/etc/pam.d/common-session閱讀

session optional pam_umask.so 

或它可能已經啓用。然後編輯/etc/login.defs並更改UMASK

UMASK   002 

(默認爲022)。

注意,用戶仍然可以覆蓋的umask在自己~/.profile~/.bashrc或相似的,但(至少在新Debian和Ubuntu的安裝)不應該有umask的任何凌駕在/etc/profile/etc/bash.bashrc。 (如果有,請將其刪除。)

+3

在12.04它默認啓用。 – 2013-03-06 14:30:24

+6

debian 7 does ** not **默認啓用此項。 – earthmeLon 2014-04-09 15:41:13

+0

如何將自定義umask設置爲一個特定用戶? – brauliobo 2014-08-01 00:25:08

20

首先,確保已安裝pam-modules軟件包。這使得pam_umask模塊可用。然後確保/etc/pam.d/common-session具有使pam_umask啓用了線的形式

session optional pam_umask.so 

的。

現在,根據pam_umask手冊頁,默認的umask是在登錄時通過檢查下列各地方,爲了確定:

  1. 硬系統默認的設置/etc/pam.d/common-session。要設置這種方式,代替從這個上面提到的那個文件行:

    session optional pam_umask.so umask=002 
    
  2. /etc/passwd在個人用戶的GECOS字段中的條目將覆蓋特定用戶的軟系統範圍內的默認。使用此表單創建的命令條目:

    chfn --other='umask=002' username 
    
  3. 形式UMASK=002/etc/default/login(您可能需要創建一個文件)的行設置的軟系統範圍內的默認。

  4. UMASK值從/etc/login.defs。該值還用於其他內容(計算正在創建的新用戶的主目錄的權限;有關更多詳細信息,請參閱/etc/login.defs中的註釋)。因此,最好避免依靠此設置常規登錄的默認umask,以保持獨立。

所以你的情況,您應該在/etc/default/login,如果你希望它是能夠覆蓋個別用戶的設置,或者如果你想它是與上述相同設置在/etc/pam.d/common-session配置此爲所有用戶。

請注意,即使採用硬默認設置,用戶仍然可以在shell提示符或其.profile腳本中使用umask命令手動覆蓋默認值umask

另請注意,傳統的Unix方式來設置這個默認是通過umask命令/etc/profile,這也將仍然工作。但是在Ubuntu上配置這樣的東西並不是建議的方式,因爲使用腳本和GUI很難可靠地進行管理。

注意,不幸的是這個stopped working for any application which has been converted to launch via systemd --user

+1

在某些情況下,有'USERGROUPS_ENAB'選項可以將'022'更改爲'002'。 – 2016-07-13 09:02:54

+0

在Ubuntu Server 16.04.1中,軟件包'libpam-modules'包含模塊'pam_umask'。 (命令'dpkg-query --search/lib/x86_64-linux-gnu/security/pam_umask.so'打印'libpam-modules:amd64:/ lib/x86_64-linux-gnu/security/pam_umask.so'。) – 2016-10-31 17:45:35

+3

Ubuntu Server 16.04.1中不存在「/ etc/defaults」。正確的路徑可以是「/ etc/default/login」嗎? – 2016-10-31 19:02:42

0

爲了匹配組權限,在服務器上,set gid位(其中一個「粘性位」)可以被視爲附加選項。

如果共享目錄鏈接到,發射(使用根): 搭配chmod -R 2775 folder_for_the_group可能是有趣。

對於在該文件夾中創建的任何新文件,創建者將是所有者,但該組將自動指定(只要創建者是該組的一部分)。

權利網格現在顯示爲-rwxrwsr-X +