Chỉ định nhóm mặc định và quyền cho các tệp mới trong một thư mục nhất định


15

Tôi có một thư mục nhất định trong đó có một dự án được chia sẻ bởi nhiều người dùng. Những người dùng này sử dụng SSH để có quyền truy cập vào thư mục này và sửa đổi / tạo tệp.

Dự án này chỉ có thể được ghi cho một nhóm người dùng nhất định: hãy gọi nó là "mygroup". Trong phiên SSH, tất cả các tệp / thư mục được tạo bởi người dùng hiện tại theo mặc định phải thuộc sở hữu của nhóm "mygroup" và có quyền ghi nhóm.

Tôi có thể giải quyết vấn đề quyền với umask:

$ cd project
$ umask 002
$ touch test.txt

Tệp "test.txt" hiện có thể ghi theo nhóm, nhưng vẫn thuộc nhóm mặc định của tôi ("mislav", giống như tên người dùng của tôi) và không thuộc "nhóm của tôi". Tôi có thể chgrpđệ quy để đặt nhóm mong muốn, nhưng tôi muốn biết có cách nào để đặt một số nhóm hoàn toàn giống như umask thay đổi quyền mặc định trong một phiên.

Thư mục cụ thể này là một repo git được chia sẻ với một bản sao đang hoạt động và tôi muốn git checkoutvà các git resetthao tác để đặt mặt nạ và nhóm chính xác cho các tệp mới được tạo trong bản sao làm việc. HĐH là Ubuntu Linux.

Cập nhật: một đồng nghiệp gợi ý tôi nên xem xét getfacl / setfacl của POSIX ACL nhưng giải pháp bên dưới kết hợp với umask 002trong phiên hiện tại là đủ tốt cho tôi và đơn giản hơn nhiều.

Câu trả lời:


19

Để có tất cả các tệp trong một thư mục nhất định kế thừa quyền nhóm, bạn cần sử dụng bit setgid trên thư mục của mình. Xem liên kết này .

 $ mkdir test
 $ sudo chown raphink.staff test
 $ ls -lhd test
     drwxr-xr-x 2 raphink staff 4.0K 2009-12-21 16:19 test
 $ sudo chmod g+s test # Set the setgid bit
 $ ls -lhd test
     drwxr-sr-x 2 raphink staff 4.0K 2009-12-21 16:21 test
 $ touch test/foo
 $ ls -lh test
     total 0
     -rw-r--r-- 1 raphink staff 0 2009-12-21 16:23 foo

Cảm ơn. Thật thú vị khi tôi không tìm thấy điều này bằng cách googling
mislav

6

Nếu bạn muốn làm điều này với một thư mục hiện có, bạn cần đảm bảo bit setgid được bật cho tất cả các thư mục con. Tuy nhiên, bạn không cần nó trên các tệp và có lẽ bạn cũng không muốn nó trên các tệp. Dưới đây là cách đặt nó cho tất cả các thư mục con theo cách đệ quy.

find /path/to/base/dir -type d -exec chmod g+s {} +

4

Tôi không thể tìm lại nguồn, nhưng sử dụng setgidđể giải quyết vấn đề này cho các kho lưu trữ git trần, mà tôi cho là trường hợp của bạn, không được dùng nữa và có thể gây ra sự cố trong một số trường hợp.

Git có thể chăm sóc tất cả điều này thông qua core.sharedRepositorycờ. Tôi đã có cùng một vấn đề và giải quyết nó như sau:

Giả sử repogrouplà nhóm của bạn và bạn phải cdvào thư mục repo:

Đầu tiên thay đổi cờ được chia sẻ thành group:

git config core.sharedRepository group 

Lưu ý: ở đây bạn phải sử dụng từ khóa group, không phải tên nhóm. Điều này tương đương với việc tạo kho lưu trữ trần với tùy chọn --shared=group.

Sau đó thay đổi nhóm cho toàn bộ kho lưu trữ:

chgrp -R repogroup .

Để đảm bảo rằng các thư mục hiện tại có thể ghi theo nhóm ( g+w) và các tệp thực thi hiện có cũng trở thành các tệp thực thi nhóm ( g+X), bạn cũng cần phải:

chmod -R g+wX .

Khi bạn đã thực hiện điều này, git sẽ tôn vinh shared=groupcờ và chăm sóc các quyền của nhóm trong các mục sau, cả cho các tệp hiện có và mới, vì vậy bạn sẽ không bao giờ cần lại umaskhoặc chgrp.

Tôi sẽ đặt nguồn trong một bình luận nếu tôi tìm thấy nó trở lại.


3

Tôi không phải là một chuyên gia khi nói về phía * nix, nhưng tôi nghĩ những gì bạn đang tìm kiếm được gọi là setgid.

Xem tại đây .


1

Rất khó để kế thừa các quyền của thư mục mẹ trong Linux / UNIX mà không sử dụng ACL. nhưng có một cách để gán quyền tập tin mặc định, kiểm tra liên kết dưới đây

Bạn có thể kế thừa quyền thư mục cha.

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.