2015-07-22 44 views
1

我想告訴Linux,除了缺省權限之外,在特定目錄中創建的每個文件都應該有g + w。Linux - 如何預先設置新文件的組權限

我怎麼說?我需要那個目錄的粘性位,不是嗎? (該目錄已經有drwsrwsr-x,我希望新的文件會繼承,但顯然他們不...)

+1

閱讀關於['umask'](http:// man7。組織/ LINUX /人-頁/男2/umask.2.html)。 –

+0

感謝,嗯,對我來說,這看起來像一個系統範圍的設置?我只希望這發生在某個文件夾中。爲什麼我需要這個:它是一個日誌文件的文件夾,其中apache和本地運行的php腳本(由upstart啓動)都需要寫入日誌文件。有時候我清除這個文件夾,所以這些文件被重新創建,然後發生權限過於嚴格。我在upstart腳本中放了一個「chmod g + w * .log」,但稍後會在應用程序中的某些事件中創建一些日誌,所以這不起作用。 – Philippp

回答

1

有幾個有關權限的操作機制:

  • umask讓你禁用權限位每個應用程序。它不允許既不啓用權限,也不允許每個目錄執行此操作。這也不是全球性的。它是從父進程繼承的每進程屬性。例如。您可以在初始化腳本中設置其默認值,但程序(特別是守護進程)可能會覆蓋它們的umask
  • sticky bit限制目錄訪問權限,以便該目錄中的文件只能由根或目錄所有者或文件所有者取消鏈接或重命名。
  • setgit bit on目錄強制在該目錄內創建的任何新文件將其組設置爲目錄上設置的同一組。它允許覆蓋組所有者,但不允許。
  • bsdgroupsgrpid安裝選項啓用setgit bit行爲爲所有目錄,即使setgit bit未設置。
  • ACL(訪問控制列表)允許您爲目錄或文件設置每個用戶和每個組的權限。當在該目錄中創建新文件時,它們也從父目錄繼承。但是,ACL權限被傳統POSIX權限屏蔽,該權限由文件創建者及其umask設置,因此您不能繼承文件創建者允許的更多權限。

除了umask以外的所有這些機制都是Linux特有的。有關setgit bitACLs的一些詳細信息,請參見this question

我想這些都不是你的問題的直接解決方案。你可以做什麼:

  • 配置程序創建這些文件,以足夠的權限來創建它們。例如,如果他們以權限0777創建它們(或者可以這樣配置),則設置umask000應該是足夠的。見@ KasunRathnayaka的答案。
  • 如果不是選項,您可以使用bindfs工具與--create-with-perms及相關選項。它允許將目錄掛載到另一個目錄,並在創建或修改文件時覆蓋權限和用戶/組所有者。見manual page
+0

謝謝你的這個概述 - 因爲我不是經常使用Linux,這將幫助我選擇一個體面的方法! – Philippp

0

你可以在你的linuxbox中更改umask。作爲你想要的。

Umask Created Files  Created Directories 
------------------------------------------------------------- 
000  666 (rw-rw-rw-)  777  (rwxrwxrwx) 
002  664 (rw-rw-r--)  775  (rwxrwxr-x) 
022  644 (rw-r--r--)  755  (rwxr-xr-x) 
027  640 (rw-r-----)  750  (rwxr-x---) 
077  600 (rw-------)  700  (rwx------) 
277  400 (r--------)  500  (r-x------) 

如:

[email protected]:/usr/share/nginx/html/tt# umask 
0022 
[email protected]:/usr/share/nginx/html/tt# umask 0027 
[email protected]:/usr/share/nginx/html/tt# mkdir yy 
[email protected]:/usr/share/nginx/html/tt# ls 
yy 
[email protected]:/usr/share/nginx/html/tt# ls -al 
total 12 
drwxr-xr-x 3 root root 4096 ජූලි 22 15:20 . 
drwxr-xr-x 4 root root 4096 ජූලි 22 15:19 .. 
drwxr-x--- 2 root root 4096 ජූලි 22 15:20 yy