Làm cách nào để buộc nhóm và quyền đối với các tệp được tạo trong một thư mục cụ thể?


27

Cho các tập tin được tạo ra từ các testuser tài khoản trong thư mục / var / www, tôi cần họ có g + rwx như quyền, và www-data như nhóm.

Làm thế nào tôi có thể đạt được điều này?

Tôi đang tạo các tệp qua SSH.


1
Làm thế nào là người dùng của bạn tạo tập tin? Qua FTP stor/ appe? Qua HTTP PUT? Thông qua tài khoản shell? Những chi tiết này rất quan trọng, bởi vì chúng ảnh hưởng lớn đến các câu trả lời có thể, và cần phải nằm trong câu hỏi của bạn.
JdeBP

Cảm ơn về đầu vào :), tôi đang tạo mọi thứ thông qua SSH.
Mr.Gando

Câu trả lời:


53

Để thiết lập nhóm, cung cấp cho /var/wwwcác setgid bit:

chgrp www-data /var/www
chmod g+s /var/www

Để điều chỉnh các thư mục con: find /var/www -type d -exec chmod g+s {} +

Điều này sẽ làm cho tất cả các tệp mới được tạo kế thừa nhóm của thư mục mẹ, thay vì của người dùng.


Để đặt quyền nhóm mặc định, bạn sẽ phải sử dụng ACL . Đặt ACL "mặc định":

setfacl -m "default:group::rwx" /var/www

Để điều chỉnh các thư mục con: find /var/www -type d -exec setfacl -m d:g::rwx {} +

Lưu ý: Hệ thống tệp phải được bật hỗ trợ ACL. Đôi khi nó được bật theo mặc định; trên ext3 hoặc ext4 bạn có thể nhận được "Thao tác không được hỗ trợ", trong trường hợp đó, nó phải được bật thủ công:

  • Đối với một hệ thống tập tin hiện đang gắn kết: mount -o remount,acl /

  • Vĩnh viễn - một trong những phương pháp dưới đây:

    • ở cấp độ fstab: chỉnh sửa /etc/fstabđể có acltrong trường tùy chọn

    • ở cấp hệ thống tập tin: tune2fs -o acl /dev/diskname


bạn không thể có được các thư mục con với chmod -R g + s / var / www? Có vẻ như bạn không cần lệnh find.
bobpaul

4
@bobpaul: Không, vì chmodcũng sẽ nhận được tất cả các tệp.
tham lam

Lưu ý rằng một số lệnh, đặc biệt install, bằng cách nào đó quản lý để bỏ qua ACL mặc định của thư mục.
Ulrich Schwarz

@grawity Đây là một câu trả lời thực sự tuyệt vời và tôi chắc chắn rằng có một giải pháp trong đó cho vấn đề của tôi, nhưng tôi không thể tìm ra nó. Tôi có một /var/www/html/projectsthư mục và khi dữ liệu www tạo một tệp thì nó có rw-rw-rquyền nhưng khi tôi làm gì đó trong bảng điều khiển thì nó sẽ tạo một tệp rw-r--r. Làm cách nào tôi có thể buộc các tệp được tạo mới luôn có rw-rw-rquyền?
lewis4u

@ lewis4u: Toàn cầu hay mỗi thư mục? Các quyền mặc định toàn cầu (tốt, theo quy trình) được kiểm soát bởi umask. Các quyền mặc định cho mỗi thư mục có thể thay đổi bằng cách sử dụng setfaclnhư trong bài viết chính.
grawity

3

Điều này có thể đã khiến một vài người mắc kẹt với câu trả lời 'grawity' trên setgid, nếu nhóm của thư mục khác với nhóm của bạn, bạn có thể cần chạy chmod với quyền root nhưng bạn sẽ không gặp phải bất kỳ lỗi nào cho thấy bạn cần phải làm điều này.

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir

$ chmod g+s dir                                    #no errors

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #but nothing changed

$ touch dir/nosudo && ls -l dir/
-rw-rw-r-- 1 luke luke 0 Mar  9 10:51 nosudo       #and the group is still wrong


$ sudo chmod g+s dir

$ ls -ld dir
drwxrwsr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #the setgid bit is now on

$ touch dir/withsudo && ls -l dir/
-rw-rw-r-- 1 luke luke      0 Mar  9 10:51 nosudo
-rw-rw-r-- 1 luke testgroup 0 Mar  9 10:51 withsudo #and group is set

Tôi đã kéo tóc ra trước khi tôi chạy qua đây. Cảm ơn.
AndrewStevens

0

Nhóm các tệp được tạo bởi người dùng là nhóm của người dùng đó (trong / etc / nhóm). Các quyền được kiểm soát bởi tham số UMASK xem điều này

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.