使用 ACL 設定“x”(可執行)位

使用 ACL 設定“x”(可執行)位

我無法設法將 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 位於rwxacl 中!

讓我們看看本地目錄的 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 被複製到檔案的權限,但是

  1. 修改檔案權限位對應的存取ACL條目,使其不包含mode參數指定的權限以外的權限 [給予open()creat()等等]

由於權限位元遮罩對應於群組權限位,因此它在這裡受到影響。

如果沒有預設 ACL,umask則會使用預設 ACL,但仍會進行相同的屏蔽。

這當然符合程式的通常習慣,能夠將權限限制為open建立檔案時傳遞給的權限,無論是使用 mode 排除執行權限0666,或是使用 mode 排除其他使用者存取該檔案0600

答案2

這兩個問題已經得到了外圍的回答:

umask 如何影響 ACL?

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 做您想做的事情,因為很少有程式實際上明確表示它們想要建立可執行檔。

相關內容