我無法設法將 x 位元設定為已建立的檔案。
archemar@foobar:~/D> echo echo hello world > v.sh
archemar@foobar:~/D> ls -l v.sh
-rw-rw-r--+ 1 archemar group1 17 Apr 12 08:12 v.sh
沒有x位,讓我們看看acl
archemar@foobar:~/D> getfacl v.sh
# file: v.sh
# owner: archemar
# group: group1
user::rw-
group::rwx #effective:rw-
group:group1:rwx #effective:rw-
mask::rw-
other::r--
group1 位於rwx
acl 中!
讓我們看看本地目錄的 acl
archemar@foobar:~/D> getfacl .
# file: .
# owner: FTP_D_adm
# group: admin
user::rwx
group::rwx
group:group2:rwx
group:admin:rwx
group:group1:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:group1:rwx
default:mask::rwx
default:other::r-x
我是 group1 的成員:
archemar@foobar:~/D> id
uid=1001(archemar) gid=1001(group1) groups=1001(group1),16(dialout),33(video)
讓我們嘗試執行
archemar@foobar:~/D> ./v.sh
-bash: ./v.sh: Permission denied
設定 g+x 很簡單,但實際檔案將透過 ftp 傳輸。有沒有辦法設定位 x ?
作業系統是 suse 11.4,目錄是 NFS 3 掛載的,ACL 在檔案系統上設定。
答案1
我不認為你可以強制使用ACL放一個許可位。
使用Linux ACL 手冊頁作為參考,預設 ACL 被複製到檔案的權限,但是
- 修改檔案權限位對應的存取ACL條目,使其不包含mode參數指定的權限以外的權限 [給予
open()
,creat()
等等]。
由於權限位元遮罩對應於群組權限位,因此它在這裡受到影響。
如果沒有預設 ACL,umask
則會使用預設 ACL,但仍會進行相同的屏蔽。
這當然符合程式的通常習慣,能夠將權限限制為open
建立檔案時傳遞給的權限,無論是使用 mode 排除執行權限0666
,或是使用 mode 排除其他使用者存取該檔案0600
。
答案2
這兩個問題已經得到了外圍的回答:
https://superuser.com/questions/180545/setting-differing-acls-on-directories-and-files
相關位元通常來自man setfacl
:
perms 欄位是表示 > 權限的字元組合:讀取 (r)、寫入 (w)、執行 (x)、僅當檔案是目錄或已具有某個使用者 (X) 的執行權限時才執行。 或者,perms 欄位可以是八進位數字 (0-7)。
(強調我的)
答案中第一個問題的相關部分@slm♦如下:
總結一下
文件不會獲得執行權限(屏蔽或有效)。我們使用哪種方法並不重要:ACL、umask 或 mask & ACL。
目錄可以獲得執行權限,但這取決於屏蔽字段如何設定。
為 ACL 權限下的檔案設定執行權限的唯一方法是使用 chmod 手動設定它們。
這基本上意味著您似乎無法使用 ACL 做您想做的事情,因為很少有程式實際上明確表示它們想要建立可執行檔。