Làm cách nào để đặt quyền mặc định cho các tệp được di chuyển hoặc sao chép vào một thư mục?


9

Câu hỏi của tôi tương tự như Cách đặt quyền truy cập tệp mặc định trên TẤT CẢ các tệp mới được tạo trong linux - nhưng khác nhau theo các cách quan trọng:

Tôi muốn tất cả các tệp được tạo trong (hoặc sao chép vào hoặc di chuyển đến) một thư mục nhất định để kế thừa một tập các quyền mặc định khác với mặc định của hệ thống.

Đặt vấn đề: Thư mục trong câu hỏi là "phễu nạp" cho một ứng dụng. Người dùng trong một nhóm đặt các tệp trong thư mục và ứng dụng (chạy dưới id người dùng khác trong cùng nhóm) sẽ lấy chúng và xử lý chúng. Vấn đề là chủ sở hữu của mỗi tệp được đặt trong thư mục là người dùng đã đặt nó ở đó và các quyền được mặc định là "rw-r - r--"; Tôi muốn đổi nó thành "rw-rw ----". Ứng dụng thực hiện việc nhập liệu không thể thực hiện điều đó một cách rõ ràng, vì id người dùng mà ứng dụng đang chạy không sở hữu tệp được đề cập và các quyền mặc định không cho phép ứng dụng chmod trên tệp! Rõ ràng, người dùng có thể thực hiện một chmod sau khi đặt tệp ở đó - nhưng tôi muốn giữ cho người dùng "thả" đơn giản nhất có thể. (Những người này không biết chữ linux,

umask dường như quá mạnh mẽ: Tôi không muốn đặt quyền mặc định cho mọi tệp được tạo bởi bất kỳ ai bởi những người dùng này - chỉ những người được tạo trong (hoặc được đặt trong) thư mục này.

Xin tư vấn, cảm ơn!

Câu trả lời:


5

Bạn có thể sử dụng ACL (danh sách kiểm soát truy cập) để đặt quyền mặc định cho các tệp trong một thư mục.

Từ man 5 acl:

Nếu một ACL mặc định được liên kết với một thư mục, tham số chế độ cho các chức năng tạo các đối tượng tệp và ACL mặc định của thư mục được sử dụng để xác định ACL của đối tượng mới:

  1. Đối tượng mới kế thừa ACL mặc định của thư mục chứa là ACL truy cập của nó.

  2. Các mục ACL truy cập tương ứng với các bit quyền của tệp được sửa đổi để chúng không chứa các quyền không có trong các quyền được chỉ định bởi tham số chế độ.

Để thiết lập nó (thay đổi thiết bị, thư mục, v.v., theo đó):

Chỉnh sửa /etc/fstabtập tin của bạn và thêm acltùy chọn gắn kết.

/dev/mapper/star-home /home ext3  defaults,acl 0 2

Remount ( trang man Sambamount.cifs ) hệ thống tập tin của bạn bằng cách khởi động lại hoặc sử dụng:

mount -o remount,acl /home

Hãy chắc chắn rằng bạn có setfaclgetfaclcác tiện ích.

Đặt ACL mặc định trên thư mục (bạn cũng có thể cần đặt ACL trên các tệp hiện có):

$ setfacl -m d:user:george:rwx,d:group:sales-g:rwx,d:group:marketing-g:rwx projections

Xem hướng dẫn liên kết để biết thêm thông tin.

Nguồn: Hướng dẫn Phần 1Phần 2

Tham khảo: Danh sách kiểm soát truy cập POSIX trên Linux


Tôi không nghĩ bạn nên thêm acldưới dạng một tùy chọn trong mountlệnh khi bạn đã thêm nó vào /etc/fstab. Nó sẽ là dư thừa và khi bạn chạy mountlệnh trong câu trả lời của mình, bạn sẽ nhận được một đầu ra như thế này: /dev/vda1 on / type ext4 (rw,errors=remount-ro,acl,acl)(xem acl,aclcuối cùng). Hãy sửa nó nếu tôi không sai.
it_me

1

Tôi có thể đưa ra một cách giải quyết: Tạo một thư mục "thả" riêng, chạy một minijob riêng ở đó để sửa các quyền và sau đó di chuyển các tệp vào thư mục dữ liệu của ứng dụng. Bạn có thể sử dụng incron cho điều đó vì vậy sẽ hầu như không có độ trễ thời gian đáng chú ý.


1

Tôi có thể nghĩ về bốn phương pháp có thể làm việc này:

  • umask, mà bạn không muốn sử dụng
  • trình bao bọc chương trình, thiết lập ô của ứng dụng đó, không phải của người dùng
  • cron, như @Peter Eisentraut đã mô tả; find $HOME/intake -type f -exec chmod 660 {} \;, các hệ thống khác nhau có cải tiến hiệu suất về điều này (như -exec+tùy chọn)
  • cài đặt dựa trên thư mục, yêu cầu một chút lập trình shell để thực hiện, nhưng về cơ bản shell, khi đặt dấu nhắc hoặc gọi cd, sẽ thay đổi ô nếu có một tệp chấm trong thư mục đó (hoặc có thể là thư mục tổ tiên); đối với bash, PROMPT_COMMAND='test -s $PWD/.umask && umask $(cat $PWD/.umask)'";$PROMPT_COMMAND"sẽ là đơn giản nhất.
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.