Làm thế nào để tạo quyền kế thừa tập tin mới từ thư mục cha?


85

Tôi có một thư mục được gọi data. Sau đó, tôi đang chạy một tập lệnh dưới id người dùng 'robot'. robot ghi vào datathư mục và cập nhật tập tin bên trong. Ý tưởng được datamở cho cả tôi và robot để cập nhật.

Vì vậy, tôi thiết lập sự cho phép và nhóm chủ sở hữu như thế này

drwxrwxr-x  2 me robot-grp 4096 Jun 11 20:50 data

nơi cả tôi và robot đều thuộc về 'robot-grp'. Tôi thay đổi quyền và nhóm chủ sở hữu đệ quy như thư mục mẹ.

Tôi thường xuyên tải các tập tin mới vào datathư mục bằng cách sử dụng rsync. Thật không may, các tệp mới được tải lên không kế thừa sự cho phép của thư mục mẹ như tôi hy vọng. Thay vào đó nó trông như thế này

-rw-r--r-- 1 me users       6 Jun 11 20:50 new-file.txt

Khi robot cố gắng cập nhật new-file.txt, nó không thành công do thiếu sự cho phép của tập tin.

Tôi không chắc chắn nếu cài đặt umask giúp. Trong mọi trường hợp, các tập tin mới không thực sự theo nó.

$ umask -S
u=rwx,g=rx,o=rx

Tôi thường bị bối rối bởi sự cho phép tập tin Unix. Tôi thậm chí có một kế hoạch đúng đắn? Tôi đang sử dụng Debian lenny.

Câu trả lời:


53

Bạn không muốn thay đổi ô mặc định của hệ thống, đó là một rủi ro bảo mật. Tùy chọn dính bit sẽ hoạt động ở một mức độ nào đó, nhưng sử dụng ACL là cách tốt nhất để sử dụng. Điều này dễ dàng hơn bạn nghĩ. Vấn đề với ACL cơ bản là chúng không được đệ quy theo mặc định. Nếu bạn đặt ACL trên một thư mục, chỉ các tệp trong thư mục đó mới kế thừa ACL. Nếu bạn tạo thư mục con, nó sẽ không nhận được ACL gốc trừ khi ACL được đặt thành lặp lại.

Trước tiên, hãy đảm bảo ACL được bật cho âm lượng mà thư mục được bật. Nếu bạn có tune2fs, bạn có thể thực hiện như sau:

# tune2fs -l /dev/sda1 | grep acl
Default mount options:    user_xattr acl

Nếu bạn không có tune2fs, sau đó kiểm tra fstabs:

# cat /etc/fstab 
/dev/system/root        /                       ext3    defaults        1 1
/dev/system/home        /home                   ext3    defaults        1 2
/dev/storage/data       /data                   ext3    defaults        1 2
LABEL=/boot             /boot                   ext3    defaults        1 2

Cột thứ 4 có nghĩa là "mặc định" có nghĩa là trên hệ thống của tôi (CentOS 5.5), ACL đang bật. Khi nghi ngờ, hãy để nó như mặc định. Nếu bạn cố gắng đặt ACL và nó bị lỗi, hãy quay lại và thêm tùy chọn acl vào / etc / fstab ngay sau khi mặc định : defaults,acl.

Theo những gì tôi hiểu, bạn muốn mọi người trong nhóm người dùng có quyền truy cập ghi vào thư mục dữ liệu. Điều đó được thực hiện bằng cách sau:

setfacl -Rm g:users:rwX,d:g:users:rwX data/

Tôi đã sử dụng lệnh này nhưng nó không khắc phục được sự cố của tôi, làm thế nào tôi có thể hoàn tác lệnh này?
Itai Ganot

Đã lừa trên ubfox với sudo setfacl -Rm g:users:rwX,d:g:users:rwX /var/www/logs_or_something. Có vấn đề với các bài kiểm tra PHPUnit. Sau khi tạo tệp nhật ký từ chạy thử nghiệm apache, người dùng www-datakhông thể ghi / đọc chúng.
s3m3n

2
@Itai Ganot - theo setfacltrang người đàn ông , -bhoặc --remove-allloại bỏ các ACL mở rộng.
jww

Vì vậy, bạn sẽ chỉ nối setfacl -Rm g:users:rwX,d:g:users:rwX data/vào cuối /etc/fstab?
425nesp

@ piña không. thay đổi duy nhất bạn thực hiện thành / etc / fstab là thay đổi defaultsthành defaults,acl. setfacllà một lệnh bạn nên chạy từ thiết bị đầu cuối. data/nên được thay thế bằng đường dẫn đến thư mục bạn muốn thay đổi.
Segfault

32

Đánh dấu thư mục setgid ( g+s) sẽ khiến các tệp mới kế thừa quyền sở hữu nhóm của thư mục, nhưng -gtùy chọn rsync sẽ cố gắng ghi đè lên tệp này.


11
Bit setgid chỉ làm cho các tệp được tạo kế thừa nhóm / if / người tạo tệp mới là thành viên của nhóm đó; nếu người dùng tạo là chủ sở hữu nhưng không phải là thành viên của nhóm hoặc thư mục có thể ghi trên thế giới, bit setgid sẽ không làm gì cả. Và ô cho tất cả người dùng tạo tệp vẫn cần được đặt để cho phép truy cập nhóm thích hợp.
dannysauer

1
@dannysauer "nếu người dùng tạo là chủ sở hữu nhưng không phải là thành viên của nhóm ... bit setgid sẽ không làm gì cả" - cảm ơn bạn. Bây giờ có nghĩa là - nhưng không có phản hồi từ rsync, đã tự hỏi tại sao nó không hoạt động.
user12345

4

Các câu trả lời khác áp dụng trong trường hợp chung, nhưng khi bạn đề cập rằng rsync là nguồn gốc của vấn đề, bạn có thể chỉ cần điều chỉnh lời gọi của nó.

Để bắt đầu, -acờ phổ biến làm cho quyền sao chép rsync; sử dụng -ristead của -ahoặc thêm -no-p(không đồng bộ hóa quyền) và -no-g(không đồng bộ hóa nhóm). Ngoài ra rsync hỗ trợ --chmodcờ để thay đổi quyền trên các tệp mới được tạo.


3

Umask của bạn là sai cho các quyền bạn muốn. Bạn muốn có một ô là 002. Hiện tại bạn có số ô là 022. Ngoài ra, nhận xét về việc tạo thư mục setgid là chính xác, nhưng tôi không chắc quyền sở hữu nhóm tệp có phải là thứ bạn muốn thay đổi hay không.

Quyền truy cập tệp Unix thực sự là một mô hình rất đơn giản. Tôi thấy ACL hoàn toàn khó hiểu bản thân mình. :-)


4
"Quyền truy cập tệp Unix thực sự là một mô hình rất đơn giản. Tôi thấy ACL hoàn toàn khó hiểu với chính mình." - Tôi cảm thấy ngược lại (nhưng dù sao +1). ACL (và Cho phép / Từ chối ACE) rất đơn giản và các quyền của Unix không có ý nghĩa gì. Nhưng điều đó đến từ một anh chàng đang chịu sự cài đặt Postfix / Dovecot / Clam / SpamAssassin.
jww
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.