Cách cấp quyền đọc ghi nhưng không xóa tệp


12

Tôi muốn cung cấp cho người dùng khả năng tạo tệp ghi và đọc trong thư mục người dùng khác, nhưng không có tùy chọn xóa tệp sau khi tạo (ví dụ như bit dính sẽ không hoạt động ở đây ...):

Tôi có người dùng manager với thư mục repository
Tôi có người dùng worker1cần ghi tệp /manager/repositorynhưng không thể xóa các tệp
tôi có người dùng worker2cần ghi tệp /manager/repository nhưng không thể xóa các tệp
tôi có người dùng worker3cần ghi tệp /manager/repository nhưng không thể xóa các tập tin

nhưng worker 1-2-3không thể xóa các tệp sau khi chỉ được tạo managerrootcó thể xóa các tệp worker 1-2-3được tạo.

Tôi cố gắng vài chownchmodthủ đoạn với việc áp dụng các bit dính nhưng không thành công.


1
Đừng các worker*người dùng ghi vào thư mục theo một cách nào? Bạn đã đề cập trong một bình luận rằng các tệp nhật ký ở đây, vì vậy điều đó có nghĩa là một tệp thực thi nào đó được khởi chạy để tạo tệp ở đây? Nếu vậy bạn có thể cho phép workernhóm sudođể chạy thực thi như manager. Sau đó, tệp thực thi sẽ tạo ra các bản ghi như managerngười dùng mà người lao động có thể đọc được.
Centimane

Nếu người dùng có thể sửa đổi tập tin thì họ cũng có thể xóa nội dung của nó, do đó "xóa" nó một cách hiệu quả. Có vẻ như bạn cần một số loại giao diện "trình", không phải hệ thống tập tin. Email sẽ là đơn giản nhất.
ybungalobill

Câu trả lời:


8

Không giống như Windows, không có quyền xóa riêng biệt trong Unix / Linux. Quyền xóa (hoặc tạo hoặc đổi tên) một tệp được liên kết với thư mục chứa. Xóa quyền ghi cho công nhân trên /manager/repository/để từ chối công nhân tạo, xóa và đổi tên tệp.

Lưu ý rằng không thể cho phép tạo tệp nhưng từ chối xóa chúng.


Làm thế nào có thể xóa quyền ghi vì tệp sẽ được ghi trong toàn bộ thời gian là tệp nhật ký
user63898

. Trong khi đó sử dụng đến mức khó tin, nhiều hệ thống hiện đại hỗ trợ ACL mở rộng (NFSv4 ACL được hỗ trợ bởi FreeBSD, Solaris hoặc Linux (Richacl vá) mà cung cấp cho khả năng tương tự như Windows NT ACL bản phân phối Linux chứng khoán của bạn có thể không có nó mặc dù.
Stéphane Chazelas

@ user63898 bạn xóa quyền ghi từ thư mục của tệp, không phải từ chính tệp.
GnP

6

Trước hết, đảm bảo ACL được bật trong hệ thống của bạn, sau đó chạy lệnh này

setfacl -d -R -m user::rwx,user:worker1:---,user:worker2:---,user:worker3:--- \
/manager/repository

Làm thế nào nó hoạt động

  • Lệnh này sẽ cung cấp cho phép đọc, ghi và thực thi quyền cho chủ sở hữu trên thư mục /manager/repository. Nó sẽ thu hồi tất cả các quyền cho worker1, worker2worker3.

  • Điều này sẽ cung cấp cho người dùng khác, truy cập đọc và ghi nhưng sẽ từ chối quyền truy cập xóa.


Từ man setfacl:

-d, --default
       All  operations  apply to the Default ACL.

-R, --recursive
       Apply operations to all files and directories recursively.

-m, --modify
       Options to modify the ACL of a file or directory.

cảm ơn, nhưng vấn đề là người dùng được tạo ra mọi lúc. và một số bị xóa bởi quản trị viên. vậy có nghĩa là tôi cần mỗi lần cập nhật thư mục với setfacl? Có giải pháp nào chung chung hơn không?
dùng63898

có khi tôi cố gắng tạo tệp từ worker1 touch /manager/reposective/x.txt tôi đang nhận: touch: không thể chạm `/manager/reposective/x.txt ': Quyền bị từ chối
user63898

vẫn bị từ chối quyền khi tôi làm kho lưu trữ ls -ld tôi đang nhận: drwxrwxr-t 2 người quản lý người dùng 4096 ngày 7 tháng 9 11:30 kho /
user63898

khi thực hiện setfacl -d -R -m user :: rwx, user: worker1: --- repository / và sau đó cố gắng tạo tệp từ worker1 touch /manager/reposeective/x.txt im get: touch: could touch `/ manager /reposeective/x.txt ': Quyền bị từ chối
user63898

5
điều này vẫn không cho phép ai đó viết một tập tin trống ở đây chứ? Like echo " " > $filesẽ ghi đè nội dung tệp bằng "", về mặt kỹ thuật là ghi, nhưng xóa nội dung một cách hiệu quả. Có vẻ như một repo thực tế như svn sẽ được đặt cược tốt nhất ở đây.
Centimane

3

Để làm điều đó với quyền, bạn cần một hệ thống có hỗ trợ cho ACL tương tự như ACL NFSv4. Chẳng hạn, trên FreeBSD, nếu hệ thống tập tin được gắn nfsv4aclscờ, bạn có thể làm:

mkdir testdir
chown manager:worker-group testdir
chmod 775 testdir
setfacl -m group@:D::deny testdir

Để từ chối một cách rõ ràng sự delete_childcho phép đối với các thành viên của worker-groupnhóm.

Tuy nhiên, lưu ý rằng vì các công nhân sẽ là chủ sở hữu của các tệp mà họ tạo, họ vẫn có thể sửa đổi các ACL trên chúng và bằng cách tự cấp deletephép, điều đó sẽ được ưu tiên hơn so với sự delete_childcho phép của thư mục mẹ và tôi thì không chắc chắn có một cách xung quanh đó (ít nhất là trên các hệ thống tập tin UFS trên FreeBSD). Chẳng hạn, họ có thể làm:

$ touch file
$ rm -f file
rm: file: Operation not permitted
$ setfacl -m owner@:d::allow file
$ rm -f file
$

0

Để có quyền ghi từ /manager/repositorythư mục. Vì vậy, tất cả người dùng không root sẽ có thể ghi hoặc xóa từ các tệp bên trong /manager/repository, nhưng không xóa bất kỳ tệp nào khỏi thư mục này.

chmod 755 /manager/repository

0

chúng tôi có thể sửa đổi các tập tin và thư mục nhưng không thể xóa.

Để xóa các thuộc tính, hãy chạy các lệnh sau:

Đối với tệp:

$ sudo chattr -R -a file.txt

Đối với thư mục:

$ sudo chattr -R -a dir1/

(1) Theo tài liệu, athuộc tính có nghĩa là chỉ phụ lục. Người dùng có thể chỉnh sửa các tập tin này? (2) Hiệu ứng của việc đặt athuộc tính trên một thư mục là gì?
Scott
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.