facl bỏ qua sự cho phép của xv nhưng chỉ trên các tập tin


7

Khi tôi sử dụng setfacl để quản lý các tệp / thư mục con nên có quyền gì, vì một số lý do, các tệp có tất cả các quyền ngoại trừ quyền thực thi ("x").

someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ getfacl .
# file: .
# owner: someuser
# group: webs
# flags: -s-
user::rwx
group::rwx
other::rwx
default:user::rwx
default:group::rwx
default:other::rwx

someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file
someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir
someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l
total 4
drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir
-rw-rw-rw-  1 someuser webs    0 paź 31 13:35 file

Tôi nghĩ rằng nó có một cái gì đó để làm với umask nhưng thay đổi nó theo nhiều cách khác nhau không bao giờ mang lại kết quả như mong đợi trừ khi tôi thiếu một cái gì đó.

Làm thế nào để sửa cái này?

Câu trả lời:


8

Câu trả lời của Hauke ​​Laging đang cố nói:

Bất kỳ chương trình nào tạo tệp hoặc thư mục đều chỉ định chế độ (quyền) mà nó muốn tệp đó có. Điều này hầu như luôn được mã hóa cứng trong chương trình C (hoặc bất kỳ ngôn ngữ nào được sử dụng) và hầu như không thể truy cập trực tiếp cho người dùng. Sau đó, umaskgiá trị và ACL mặc định có thể tắt các bit cho phép, nhưng không thêm chúng.

Vấn đề của bạn là, trong khi mkdirchỉ định chế độ 777 ( rwxrwxrwx), hầu như tất cả các chương trình tạo tệp chỉ định 666 ( rw-rw-rw-). Điều này bao gồm touch, vỏ (cho I / O chuyển hướng; ví dụ ), các biên tập viên ( , , , vv ...), , , và vân vân. Do đó, bạn sẽ không nhận được quyền trên một tệp đơn giản ngay khi tạo (bởi bất kỳ chương trình nào trong số này), bất kể bạn làm gì với ACL; bạn phải tạo tập tin và sau đó nó.program > filevivimemacsddsplitrwxrwxrwxchmod

Có một vài trường hợp ngoại lệ cho quy tắc này:

  • cpvà các chương trình có liên quan (ví dụ cpio, tarvv) mà sao chép hoặc tái tạo một tập tin, mà sẽ (cố gắng) thiết lập các tập tin mới để chế độ tương tự như các tập tin gốc.
  • Trình biên dịch, tạo các tệp thực thi nhị phân, chỉ định chế độ 777 (ít nhất, nếu quá trình biên dịch thành công), do đó người dùng thực sự sẽ có thể thực hiện chương trình họ vừa biên dịch.

Tôi giả định này chỉ áp dụng cho các phương thức truyền thống Unix cho phép, tương ứng với các user, groupothermục ACL. Nếu bạn có các mục ACL mặc định cho người dùng hoặc nhóm được đặt tên, chúng sẽ được kế thừa theo quy định, phải không?
Barmar

Đây có phải là một trích dẫn từ đâu đó? Nếu vậy, vui lòng thêm nguồn và nếu không, vui lòng xóa định dạng trích dẫn.
terdon

@terdon: Đây không phải là một trích dẫn; đó là (như được mô tả) một cách diễn đạt câu trả lời của Hauke ​​Laging . Làm thế nào điều này nên được xử lý? (1) Tôi có thể đã chỉnh sửa câu trả lời khác, nhưng tôi biết rằng các bài viết lớn của người khác được tán thành. (Và lưu ý, FWIW, rằng đại diện của tôi trên trang web này là <2000 vào tháng 10 năm 2014.) (2) Tôi có thể đã đăng nó dưới dạng nhận xét về câu trả lời khác. Hay đúng hơn, tôi có thể đã đăng nó dưới dạng một loạt ba bình luận, vì nó> 1200 ký tự. Nhưng điều đó không phù hợp với sự hiểu biết của tôi về mục đích bình luận. Tiết (Cont'd)
Scott

(Tiếp), Ngoài ra, chúng tôi liên tục được thông báo rằng các bình luận thậm chí còn phù hợp hơn các bài đăng. Tôi không muốn phân tán những viên ngọc khôn ngoan của mình trên cát, nơi chúng có thể thổi bay (hoặc bị thổi bay, nếu câu trả lời của Hauke ​​Laging bị xóa). (3) Tôi có thể vừa đăng đoạn trích dẫn như một câu trả lời tự do, không có câu trả lời. Nhưng điều đó sẽ có cảm giác như đạo văn biên giới, vì tôi đang diễn giải câu trả lời của anh ấy (hoặc dịch nó sang tiếng Anh rõ ràng, nếu bạn thích), được hướng dẫn bởi sự hiểu biết sâu sắc không kém của tôi về vấn đề này. Tiết (Cont'd)
Scott

(Tiếp theo) Tôi muốn chỉ ra rằng, trong khi các từ là của tôi, thông tin cần thiết đã được cung cấp bởi người khác (mặc dù là cha chaallyally cha). Nhìn lại, tôi cho rằng đáng lẽ tôi nên liên kết với câu trả lời khác ngay từ đầu, thay vì chỉ nói Câu trả lời khác. Lỗi của tôi. Đã 4 giờ sau khi câu hỏi được đăng, và chỉ có một câu trả lời khác, vì vậy tôi tin rằng tài liệu tham khảo là độc nhất và không mơ hồ. Mạnh mẽ và đáng tin cậy, tất cả đều quan trọng và đáng tin cậy.
Scott

4

Bạn không đề cập đến "kết quả mong đợi" là gì. Tôi giả sử đó là các tập tin có các xbit được đặt.

Bạn không thể thực thi rằng ACL mặc định (như umask) chỉ ngăn chặn các quyền nhưng không tự đặt chúng. Một thư mục hoặc tệp mới không nhận được nhiều quyền hơn (đối với người dùng, nhóm và khác) so với open()hoặc mkdir()cuộc gọi tạo ra yêu cầu.

Đối với các tập tin thường chỉ có quyền đọc và ghi được yêu cầu. Nhưng nếu một trình biên dịch tạo một tệp nhị phân thì nó cũng yêu cầu quyền thực thi.


Phản ứng của bạn khá hỗn loạn theo quan điểm tiếng Anh. Bạn có thể vui lòng sửa nó? Ngoài ra tôi không chắc ý của bạn là gì. Hãy xem mã của tôi. Đối với các thư mục nó luôn luôn hoạt động. Đối với các tệp, nó cũng luôn hoạt động ngoại trừ bit "x". Ngoài ra, nếu đó không phải là cách thích hợp để làm điều này, thì điều gì ngoại trừ việc đặt ô mỗi khi một thư mục được truy cập?
dùng294034

1

$ touch file && chmod a+x file

Các giải thích trong câu trả lời khác là tuyệt vời. Tôi muốn thêm một cái gì đó thực sự đưa ra câu trả lời cho câu hỏi,

Làm thế nào để sửa cái này?

với mã cụ thể. @Scott nói làm thế nào để làm điều này,

bạn phải tạo tập tin và sau đó chmodnó.

Mã trong câu trả lời của tôi cho thấy cách thực hiện và làm nổi bật nó bằng cách đặt nó lên đầu tiên.


Giải thích thêm

Để bắt đầu, để đơn giản, tôi chỉ cần thêm vào touchlệnh do OP đưa ra, cụ thể là touch filetrở thành touch file && chmod a+x file.

someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file && chmod a+x file
someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir
someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l
total 4
drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir
-rwxrwxrwx  1 someuser webs    0 paź 31 13:35 file

Ở đây, tôi sẽ thiết lập tình huống tương tự trên máy của mình (Cygwin) để cho thấy rằng nó hoạt động, sau đó thực hiện tương tự trên hộp Ubuntu ảo để hiển thị sự khác biệt trong thiết lập. (Lưu ý rằng lệnh thực tế để sửa chữa mọi thứ không thay đổi, tôi chỉ đơn giản muốn hiển thị một số khác biệt có thể xảy ra setfacl, cũng như để tự xác minh rằng nó hoạt động.)

$ uname -a | head -n 1 
CYGWIN_NT-10.0 my_machine 2.10.0(0.325/5/3) 2018-02-02 15:16 x86_64 Cygwin
$ pwd
/home/me
$ mkdir user294034
$ setfacl -m u::rwx user294034/
$ setfacl -m d:u::rwx user294034/
$ setfacl -m g::rwX user294034/
setfacl: illegal acl entries
$ setfacl -m g::rws user294034/
setfacl: illegal acl entries
$ # I guess I don't know how to get the `flags: -s-` on Cygwin
$ setfacl -m g::rwx user294034/
$ setfacl -m d:g::rwx user294034/
$ setfacl -m o::rwx user294034/
$ setfacl -m d:o::rwx user294034/
$ cd user294034
$ getfacl .
# file: .
# owner: me
# group: my_group
user::rwx
group::rwx
other:rwx
default:user::rwx
default:group::rwx
default:other:rwx
$ # I admitted that I don't know how to get `# flags: -s-`
$ umask
0022
$ umask 0000
$ touch file
$ mkdir dir
$ # Here, we'll see the same problem
$ ls -l
total 0
drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir
-rw-rw-rw-  1 me my_group 0 Sep 18 20:31 file
$ # Here, we'll fix the problem
$ rm file
$ touch file && chmod a+x file
$ ls -l
total 0
drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir
-rwxrwxrwx  1 me my_group 0 Sep 18 20:32 file

0

Bạn có thể thử tập lệnh đơn giản này thay thế các bản ghi ACL cho từng tệp và thư mục, cung cấp các quyền mặc định được chỉ định.

$ cd ~
$ mkdir .config
$ cat <<'EOF' >> .config/dacl
user::rwx
group::rwx
other:r-x
default:user::rwx
default:group::rwx
default:other:r-x
EOF
$ cat <<'EOF' >> .config/facl
user::rw-
group::rw-
other:r--
default:user::rw-
default:group::rw-
default:other:r--
EOF

$ cd /
$ find $1 -type d -exec setfacl -f ~/.config/dacl {} \;
$ find $1 -type f -exec setfacl -f ~/.config/facl {} \;

$ getfacl .
# file: .
# owner: MyUser
# group: Administrators
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.