it-swarm-vi.com

Làm cho tất cả các tệp mới trong một thư mục có thể truy cập vào một nhóm

Giả sử tôi có hai người dùng Alice và Bob và một nhóm GROUPNAME và một thư mục foo, cả hai người dùng đều là thành viên của GROUPNAME (sử dụng Linux và ext3).

Nếu tôi lưu với tư cách là người dùng Alice một tệp trong foo, thì các quyền là: -rw-r--r-- Alice Alice. Tuy nhiên, có thể đạt được rằng mọi tệp được lưu trong một số thư mục con của foo đều có quyền -rwxrwx--- Alice GROUPNAME (tức là chủ sở hữu Alice, nhóm GROUPNAME)?

132
student

Bạn có thể kiểm soát các bit quyền được gán bằng umask và nhóm bằng cách tạo thư mục setgid thành GROUPNAME.

$ umask 002            # allow group write; everyone must do this
$ chgrp GROUPNAME .    # set directory group to GROUPNAME
$ chmod g+s .          # files created in directory will be in group GROUPNAME

Lưu ý rằng bạn phải thực hiện chgrp/chmod cho mọi thư mục con; nó không tự động lan truyền (nghĩa là không tồn tại hoặc không có thư mục được tạo sau đó trong thư mục setgid sẽ là setgid , mặc dù cái sau sẽ nằm trong nhóm GROUPNAME).

Cũng lưu ý rằng umask là một thuộc tính quy trình và áp dụng cho tất cả các tệp được tạo bởi quá trình đó và các phần tử con của nó (kế thừa umask có hiệu lực trong cha mẹ của chúng tại fork() time) . Người dùng có thể cần đặt cái này trong ~/.profile Và có thể cần coi chừng những thứ không liên quan đến thư mục của bạn cần các quyền khác nhau. mô-đun có thể hữu ích nếu bạn cần các cài đặt khác nhau khi thực hiện các thao tác khác nhau.

Bạn có thể kiểm soát mọi thứ tốt hơn một chút nếu bạn có thể sử dụng POSIX ACL; có thể chỉ định cả mặt nạ quyền và nhóm và để chúng lan truyền hợp lý. Tuy nhiên, hỗ trợ cho POSIX ACL có phần thay đổi.

96
geekosaur

Nếu có thể, sử dụng danh sách kiểm soát truy cập (ACL) .

Trong Linux, đảm bảo rằng hệ thống tệp bạn đang sử dụng hỗ trợ ACL (hầu hết các hệ thống tệp unix đều làm). Bạn có thể cần thay đổi tùy chọn gắn kết để bật ACL: với ext2/ext3/ext4, bạn cần chỉ định rõ ràng tùy chọn gắn kết acl, do đó, mục nhập trong /etc/fstab Sẽ giống như /dev/sda1 / ext4 errors=remount-ro,acl 0 1. Chạy mount -o remount,acl / Để kích hoạt ACL mà không cần khởi động lại. Đồng thời cài đặt các công cụ dòng lệnh ACL getfaclsetfacl, thường được cung cấp trong gói có tên acl.

Bây giờ, quá trình thiết lập một lần đã kết thúc, hãy thay đổi ACL của thư mục để cấp cho quyền ghi nhóm và để các quyền này được kế thừa bởi các tệp mới được tạo. Trong Linux:

setfacl -d -m group:GROUPNAME:rwx /path/to/directory
setfacl -m group:GROUPNAME:rwx /path/to/directory

Nếu ACL không phải là một tùy chọn, hãy tạo thư mục thuộc sở hữu của nhóm GROUPNAME và đặt quyền của nó thành 2775 hoặc 2770: chmod g+rwxs /path/to/directory. s ở đây có nghĩa là bit setgid; đối với một thư mục, điều đó có nghĩa là các tệp được tạo trong thư mục này sẽ thuộc về nhóm sở hữu thư mục đó.

Bạn cũng cần đặt Alice và Bob's mask để làm cho tất cả các tệp của họ có thể ghi thành nhóm theo mặc định. Ô mặc định trên hầu hết các hệ thống là 022, có nghĩa là các tệp có thể có tất cả các quyền ngoại trừ ghi theo nhóm và khác. Thay đổi điều đó thành 002, nghĩa là chỉ cấm quyền viết khác. Thông thường bạn sẽ đặt cài đặt đó trong ~/.profile:

umask 002    # or 007 to have files not readable by others

Câu hỏi này rất phù hợp với linux acl . Vì bạn không nêu hệ điều hành của mình, tôi sẽ giả sử Linux trong phần tiếp theo. Đây là một phiên ví dụ.

Tôi không biết về một hướng dẫn acl thực sự tốt, nhưng bạn có thể làm tồi tệ hơn http://www.vanemery.com/Linux/ACL/linux-acl.html

Lưu ý rằng acl mặc định hoạt động giống như một ô địa phương. Vì ít nhất là trong Linux, các nhiệm vụ được áp dụng trên toàn cầu, đây là cách duy nhất tôi biết để có được hiệu ứng của một địa phương. Đối với một số lý do này một tính năng ít được biết đến. Mạng lưới tràn ngập những người hỏi về việc ghi đè ô cục bộ, nhưng hầu như không ai nghĩ đến việc sử dụng acl.

Cũng lưu ý rằng bạn cần gắn kết phân vùng mà bạn đang làm việc với hỗ trợ acl, vd.

/dev/mapper/debian-acl /mnt/acl        ext3    defaults,acl        0       2

Phiên sau:

/mnt/acl$ mkdir foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: faheem
user::rwx
group::r-x
other::r-x

Đặt nhóm foo thành staff, và đặt acl của nhóm và người dùng của foo thành rwx.

/mnt/acl$ chgrp staff foo
/mnt/acl$ setfacl -R -m u::rwx,g::rwx foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x

Đặt acls mặc định của người dùng và nhóm thành rwx. Điều này xác định các quyền mà các tệp và thư mục kế thừa từ foo. Vì vậy, tất cả các tệp và thư mục được tạo trong foo sẽ có quyền nhóm rw.

/mnt/acl$ setfacl -d --set u::rwx,g::rwx,o::- foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::---

Bây giờ tạo một số tệp trong foo là người dùng faheemjohn.

/mnt/acl$ cd foo
/mnt/acl/foo$ touch bar

# switch to user john for this next command.

/mnt/acl/foo$ touch baz

Liệt kê các tập tin. Lưu ý rằng cả hai tệp thuộc sở hữu của faheem và các tệp thuộc sở hữu của john được tạo với quyền của nhóm rw.

/mnt/acl/foo$ ls -la
total 3
drwxrwxr-x+ 2 faheem staff  1024 May  9 01:22 .
drwxr-xr-x  4 faheem faheem 1024 May  9 01:20 ..
-rw-rw----  1 faheem faheem    0 May  9 01:20 bar
-rw-rw----  1 john   john      0 May  9 01:22 baz
24
Faheem Mitha