當你在一個工作目權限為777的文件下,新建一個文件的時候,就有可能發生,新建的這個文件,權限和其他文件,或者工作目錄不一致的問題,我們不可能每次新建一個文件,就要
sudo chmod -R 777 /PATH
所以就不得不聊一聊權限繼承的問題,即我們如何讓新建的文件權限與目錄保持一致。
一 通過ACL設置,繼承權限(部分文件)(推薦)?
1. 確保Linux系統支持ACL
下載(Ubuntu)
sudo apt install acl
2. 為目錄設置默認ACL規則
將目標目錄的權限模式(如?
777
)設置為默認繼承規則:
-d
:設置默認 ACL(對新創建的文件和目錄生效)。
-m
:修改 ACL 條目。
u::rwx,g::rwx,o::rwx
:用戶、組、其他用戶均擁有?rwx
?權限。
-R
:遞歸應用到現有子目錄(可選)。sudo setfacl -Rdm u::rwx,g::rwx,o::rwx /PATH
3. 驗證ACL規則
查看目錄內的ACL配置:
getfacl /path/
輸出應該為:
default:user::rwx default:group::rwx default:other::rwx
?
?4. 測試新建文件的權限
touch /path/newfile.txt
ls -l /path/newfile.txt
新建文件test04.sh與03.sh的區別
?
二 通過umask?設置,繼承權限(全局)
通過修改?umask?值,控制新創建文件的默認權限。但此方法影響整個用戶會話,存在安全風險。
1.?臨時修改 umask(僅當前終端有效)
在終端中設置 umask 為?
000
:
000
:新建文件權限為?666
(rw-rw-rw-),目錄為?777
(rwxrwxrwx)。
umask 000
?2.?永久修改 umask(謹慎操作)
1. 編輯用戶配置文件(如?
~/.bashrc
),添加:umask 000
2.?然后重新加載配置:
source ~/.bashrc
三 權限繼承原理與注意事項
-
ACL 與 umask 的優先級
-
若目錄設置了默認 ACL,新文件的權限由?ACL 規則與 umask 共同決定。
-
例如:若 umask 為?
022
,則文件最終權限為?ACL權限 & ~umask
(即?666 & ~022 = 644
)。 -
推薦優先使用 ACL,避免全局修改 umask。
-
-
文件與目錄的權限差異
-
文件默認不繼承執行權限(
x
),需手動添加(如通過 ACL 顯式設置)。 -
目錄需要執行權限(
x
)才能進入,因此默認應保留?rwx
。
-
-
安全性警告
-
風險:開放?
777
?權限可能導致惡意用戶篡改或刪除文件。 -
建議:僅在測試環境或完全信任的場景下使用,生產環境應精細化控制權限。
-
總結:
-
最佳方案:使用?
setfacl
?設置目錄的默認 ACL 規則,實現權限自動繼承。 -
應急方案:臨時修改 umask,但需注意安全影響。
-
驗證命令:通過?
getfacl
?和?ls -l
?檢查權限是否符合預期。