Nhận tệp mới để kế thừa quyền của nhóm trên Linux


87

Tôi gặp vấn đề với quyền trên máy chủ Linux. Tôi đã quen với BSD. Khi một thư mục thuộc sở hữu của một nhóm mà người dùng sở hữu nó không thuộc dữ liệu www, các tệp được tạo trong đó sẽ thuộc sở hữu của nhóm đó. Điều này rất quan trọng vì tôi muốn các tệp có thể đọc được bởi máy chủ web (mà tôi sẽ không chạy bằng root) nhưng vì vậy người dùng vẫn có thể đặt các tệp mới vào thư mục. Tôi không thể đưa người dùng vào dữ liệu www vì sau đó họ có thể đọc mọi trang web của người dùng khác.

Tôi muốn máy chủ web đọc tất cả các trang web, tôi muốn người dùng có thể thay đổi trang web của riêng họ.

Các quyền được đặt như thế này trên các thư mục tại thời điểm này ....

drwxr-x--- 3 john www-data 4096 Feb 17 21:27 john

Đó là hành vi tiêu chuẩn trên BSD để cấp phép hoạt động theo cách này. Làm cách nào để Linux có thể làm điều này?


2
Bạn có thể sử dụng ACL không?
slm

Câu trả lời:


128

Có vẻ như bạn đang mô tả chức năng bit setgid trong đó khi một thư mục được thiết lập, sẽ buộc bất kỳ tệp mới nào được tạo trong đó phải đặt nhóm của chúng vào cùng một nhóm được đặt trên thư mục mẹ.

Thí dụ

$ whoami
saml

$ groups
saml wheel wireshark

thiết lập một thư mục với perms + quyền sở hữu

$ sudo mkdir --mode=u+rwx,g+rs,g-w,o-rwx somedir
$ sudo chown saml.apache somedir
$ ll -d somedir/
drwxr-s---. 2 saml apache 4096 Feb 17 20:10 somedir/

chạm vào một tập tin như saml trong thư mục này

$ whoami
saml

$ touch somedir/afile
$ ll somedir/afile 
-rw-rw-r--. 1 saml apache 0 Feb 17 20:11 somedir/afile

Điều này sẽ cung cấp cho bạn khoảng những gì nó nghe như bạn muốn. Nếu bạn thực sự muốn chính xác những gì bạn đã mô tả, tôi nghĩ bạn sẽ cần phải sử dụng chức năng Danh sách điều khiển truy cập để có được điều đó (ACL).

ACL

Nếu bạn muốn có thêm một chút quyền kiểm soát đối với các quyền trên các tệp được tạo trong thư mục somedir, bạn có thể thêm quy tắc ACL sau để đặt các quyền mặc định như vậy.

trước

$ ll -d somedir
drwxr-s---. 2 saml apache 4096 Feb 17 20:46 somedir

đặt quyền

$ sudo setfacl -Rdm g:apache:rx somedir
$ ll -d somedir/
drwxr-s---+ 2 saml apache 4096 Feb 17 20:46 somedir/

Lưu ý +ở cuối, điều đó có nghĩa là thư mục này có ACL được áp dụng cho nó.

$ getfacl somedir
# file: somedir
# owner: saml
# group: apache
# flags: -s-
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:group:apache:r-x
default:mask::r-x
default:other::---

sau

$ touch somedir/afile
$ ll somedir/afile 
-rw-r-----+ 1 saml apache 0 Feb 17 21:27 somedir/afile
$ 

$ getfacl somedir/afile
# file: somedir/afile
# owner: saml
# group: apache
user::rw-
group::r-x              #effective:r--
group:apache:r-x        #effective:r--
mask::r--
other::---

Lưu ý với các quyền mặc định ( setfacl -Rdm) được đặt để các quyền là ( r-x) theo mặc định ( g:apache:rx). Điều này buộc bất kỳ tập tin mới chỉ rkích hoạt bit của họ .


Điều đó dường như cung cấp các chức năng tôi muốn, cảm ơn.
John Tate

Điều này dường như cũng giải quyết vấn đề tương tự của tôi. Tuy nhiên, tôi hoàn toàn không hiểu câu cuối cùng: "Điều này buộc bất kỳ tệp mới nào chỉ kích hoạt bit r của chúng." Tại sao quyền x không được kích hoạt? Có cách nào để kích hoạt nó theo mặc định ??
yaobin

1
@yaobin Tôi nghĩ đó là một điều bảo mật, bạn không thực sự muốn có một tệp thực thi theo mặc định
cdarken

Điều này không làm việc với unzip?
datan.io

@ datan.io - nhìn vào trang người đàn ông của unzip. Cụ thể là -Xcông tắc.
slm

37

TL: DR; để tạo các tệp mới kế thừa nhóm của thư mục container, hãy làm:

$ chmod g+s somefolder

Lưu ý: nó ngụ ý trong câu trả lời được chấp nhận, đây chỉ là một đoạn trích.


3
setgid có nghĩa là các tệp và thư mục mới sẽ có đúng nhóm, nhưng hãy nhớ rằng nếu bạn di chuyển tệp vào cây, chúng sẽ không được cấu hình đúng chủ sở hữu. Cách tiếp cận ACL đối phó với điều đó (nói chung).
Chris Morgan

@ChrisMorgan làm thế nào để đối phó với nó? Các giải pháp từ câu trả lời được chấp nhận đã không làm gì cho các tệp được di chuyển trong trường hợp của tôi.
Dan M.

@DanM.: Với chế độ tệp, bạn đặt quyền không được kế thừa; nhưng với ACL, bạn đặt quyền được kế thừa (mặc dù trẻ em có thể chỉ định ACL của chính chúng ghi đè lên điều đó), đang được kiểm tra khi chạy.
Chris Morgan

@ChrisM tổ chức có. Làm thế nào để bạn làm điều đó? Giải pháp sử dụng câu trả lời được chấp nhận dưới dạng ACL không hoạt động.
Dan M.

10

Để bổ sung cho câu trả lời của slm, lưu ý rằng, trên hệ thống tệp ext2 / 3/4, bạn có thể sao chép hành vi BSD mà bạn mô tả bằng cách sử dụng bsdgroupstùy chọn gắn kết trên phân vùng. Từ mount(1)trang người đàn ông:

grpid|bsdgroups and nogrpid|sysvgroups
              These options define what group id a newly  created  file  gets.
              When  grpid  is  set,  it takes the group id of the directory in
              which it is created; otherwise (the default) it takes the  fsgid
              of  the current process, unless the directory has the setgid bit
              set, in which case it takes the gid from the  parent  directory,
              and also gets the setgid bit set if it is a directory itself.
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.