Linux: Mất quyền sở hữu nhóm các tệp


8

Tôi có một dự án với một số tệp mà tôi đã tạo trong Linux.

Và tôi cần phải cho phép người dùng khác viết quyền cho họ. Vì vậy, tôi đã tạo một nhóm "dev" mà anh ấy và tôi là thành viên và thay đổi quyền sở hữu các tập tin thành nhóm này.

Một tệp thông thường hiện có các quyền này:

-rw-rw-r--  1 phil dev   5617 Jul 14 15:45 profile.html

Tuy nhiên, khi tôi chỉnh sửa hồ sơ tập tin.html nó hoàn nguyên với tôi như thế này và đồng nghiệp của tôi mất khả năng chỉnh sửa.

-rw-rw-r--  1 phil phil  5617 Jul 14 15:45 profile.html

Làm thế nào để tôi tránh nó trở lại như thế này? Thay đổi quyền sở hữu là điều sai trái phải làm? Hoặc nó đã được thực hiện với các tùy chọn sai? Hoặc đây là để làm với cấu hình trình soạn thảo (emacs) của tôi?

Câu trả lời:


17

Trên thư mục chứa, bạn sẽ muốn thay đổi nhóm thành dev và sau đó sử dụng đánh dấu set-gid.

chgrp dev <containing-folder>
chmod g+ws <containing-folder>

Bit gid set làm cho các tệp được tạo trong thư mục đó kế thừa nhóm của thư mục cũng như đánh dấu bit setgid trên bất kỳ thư mục mới nào. Bạn sẽ muốn cẩn thận khi di chuyển tệp vào thư mục vì điều đó sẽ bảo vệ các quyền hiện có của họ.


chỉ là một biện pháp khắc phục (xem câu trả lời của tôi)
asdmin


7

Bạn cũng có thể gắn hệ thống tập tin (giả sử ext2 / 3) với tùy chọn mount grpid sẽ làm cho nó bất cứ khi nào bạn tạo một tệp mới trong một thư mục, nó sẽ làm cho chủ sở hữu nhóm giống như thư mục mẹ. Vì vậy, sau đó bạn sẽ làm cho nó trở thành thư mục mà các tệp này tồn tại thuộc sở hữu của nhóm 'dev'.

Để kể lại nếu đó là phân vùng gốc (ví dụ):

sudo mount -o remount,grpid,rw,relatime,errors=remount-ro /

Từ 'người đàn ông gắn kết 8':

grpid or bsdgroups / nogrpid or sysvgroups
These options define what group id a newly created file gets.

Khi grpid được đặt, nó sẽ lấy id nhóm của thư mục mà nó được tạo; mặt khác (mặc định) nó lấy fsgid của tiến trình hiện tại, trừ khi thư mục có tập bit setgid, trong trường hợp đó, nó lấy gid từ thư mục mẹ và cũng lấy bit setgid nếu nó là thư mục.


Tidbit rất hữu ích để biết +1
Frenchie

Điều này cũng sẽ giữ quyền ghi của nhóm nếu bạn tạo hoặc sao chép tệp?
KB

1

Hành vi mặc định cho emacs là tạo tệp sao lưu bằng cách đổi tên. Từ hướng dẫn sử dụng emacs:

Emacs có thể đổi tên tệp gốc để nó trở thành tệp sao lưu và sau đó ghi bộ đệm đang được lưu vào một tệp mới. Sau thủ tục này, bất kỳ tên nào khác (nghĩa là các liên kết cứng) của tệp gốc bây giờ đều đề cập đến tệp sao lưu. Tệp mới được sở hữu bởi người dùng thực hiện chỉnh sửa và nhóm của nó là mặc định cho các tệp mới được viết bởi người dùng trong thư mục đó. Tạm biệt người dùng trong thư mục đó.

Có một số cách để thay đổi điều này.

  • Đặt nhóm và bit dính, như những người khác mô tả.
  • Chạy 'newgrp dev' trước khi chỉnh sửa tệp, để nhóm mặc định của bạn là dev.

Hoặc emacs cụ thể:

  • Đặt cờ-quý-cờ trong emacs, thay đổi hành vi để bảo toàn nhóm, nhưng có tác dụng phụ khác.
  • Đặt sao lưu bằng cách sao chép-khi-không khớp trong emacs, sử dụng sao chép thay vì đổi tên khi điều đó sẽ khiến chủ sở hữu hoặc nhóm thay đổi.

Vì vậy, hãy thêm vào .emacs của bạn:

(setq backup-by-copying-when-mismatch 't)

Sở thích của tôi thực sự là 'newgrp dev', vì nó là một chuyển đổi rõ ràng từ chế độ "cá nhân" (các tệp tôi chỉnh sửa chỉ là của tôi), sang chế độ dev nhóm (các tệp tôi chỉnh sửa hiện được chia sẻ giữa các nhóm).


đây là câu trả lời tốt nhất ở đây
Christopher Neylan
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.