Đặt nhiều nhóm làm chủ sở hữu thư mục


31

Trên máy chủ của tôi, tôi có thư mục /srv/svn.

Có thể đặt thư mục này để có nhiều quyền sở hữu nhóm, chẳng hạn devFirmA, devFirmBdevFirmC?

Vấn đề là, tôi muốn subversionkiểm soát phiên bản quản lý nhiều người dùng trên nhiều kho lưu trữ và tôi không biết cách hợp nhất /srv/svn , thư mục gốc của kho lưu trữ, quyền. Tôi có, ví dụ, ba công ty FirmA, FirmBFirmC. Bây giờ, bên trong /srv/svntôi đã tạo ra ba thư mục, FirmA, FirmB, FirmCvà bên trong chúng tôi đã tạo ra kho cho từng dự án và bây giờ tôi không biết làm thế nào để thiết lập chương trình cho phép vì tất cả elementes bên /srv/svnđược sở hữu bởi root:root, mà không phải là ok, hay tôi sai rồi?


1
Các nhóm công ty truy cập các tập tin khác? Hoặc chúng hoàn toàn riêng biệt, ngoài việc chia sẻ một thư mục cha mẹ?
JM Becker

Nhóm công ty @TechZilla PHẢI Không truy cập vào các tệp khác, PHẢI được tách riêng, chỉ tôi phải có quyền truy cập vào tất cả các thư mục.
KernelPanic

OK, tôi đã đăng câu trả lời đúng, bạn không nên sử dụng ACL cho việc này. Họ là một lựa chọn cuối cùng, vấn đề này vẫn còn là một vấn đề rất phổ biến.
JM Becker

Câu trả lời:


16

Đây là một vấn đề cực kỳ phổ biến, nếu tôi hiểu chính xác và tôi gặp phải nó liên tục. Nếu tôi sử dụng ACL cho mọi vấn đề nhóm nhỏ, tôi sẽ có hàng tấn hệ thống không thể quản lý được. Họ đang sử dụng cách thực hành tốt nhất khi bạn không thể làm điều đó theo bất kỳ cách nào khác, không phải cho tình huống này. Đây là phương pháp tôi rất khuyến khích.

Trước tiên, bạn cần đặt ô của mình thành 002, đây là để một nhóm có thể chia sẻ với chính nó. Tôi thường tạo một tập tin như thế /etc/profile.d/firm.sh, và sau đó thêm một lệnh kiểm tra với ô.

[ $UID -gt 10000 ] && umask 002

Tiếp theo, bạn cần đặt các thư mục cho các nhóm tương ứng của họ,

chgrp -R FirmA /srv/svn/FirmA 
chgrp -R FirmB /srv/svn/FirmB
chgrp -R FirmC /srv/svn/FirmC

Cuối cùng, bạn cần đặt bit SGID đúng cách, vì vậy nhóm sẽ luôn ở lại nhóm bạn đã đặt. Điều này sẽ ngăn tập tin bằng văn bản được đặt thành GID của người viết.

find /srv/svn/FirmA -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmB -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmC -type d -print0 | xargs -0 chmod 2775

find /srv/svn/FirmA -type f -print0 | xargs -0 chmod 664
find /srv/svn/FirmB -type f -print0 | xargs -0 chmod 664
find /srv/svn/FirmC -type f -print0 | xargs -0 chmod 664

Bây giờ cuối cùng nếu bạn muốn ngăn chặn các thư mục bị người dùng khác truy cập.

chmod 2770 /srv/svn/FirmA
chmod 2770 /srv/svn/FirmB
chmod 2770 /srv/svn/FirmC

2
Cảnh báo: điều này sẽ hoạt động nhưng loại bỏ bit quyền thực thi trên tất cả các tệp. Điều này là ổn nếu cây thư mục của bạn chỉ giữ tài liệu. Nếu nó chứa các tệp thực thi, điều này sẽ ngăn việc thực thi, điều này có thể làm hỏng thiết lập của bạn.
Stéphane Gourichon

1
Đây cũng có thể là một ý tưởng hay, nhưng không trả lời câu hỏi nào cả.
ceving

Điều này như được mô tả chỉ phân vùng ba thư mục để chỉ thành viên của mỗi công ty chỉ có thể sửa đổi các tệp tương ứng của họ - nó không cung cấp cho 'svn' quyền truy cập mà nó cần.
giàu p

Điều này rất gần mặc dù. Điều còn thiếu là cung cấp cho bạn quyền truy cập vào tất cả các nhóm. Thêm bước này, giả sử đăng nhập của bạn là svnadmin: sudo usermod -a -G FirmA,FirmB,FirmC svnadmin Điều này sẽ thêm svnadminvào tất cả các nhóm này. Vì các tệp trong tất cả các nhóm này đã bật 'nhóm ghi' ( chmod 664đã thực hiện việc này), nên bạn, cộng với hãngX, sẽ là người viết các tệp duy nhất thuộc sở hữu của hãngX.
giàu p

1
Tốt hơn - thay đổi quyền để thêm / bớt những gì bạn muốn thêm / trừ - ví dụ: làmfind /srv/svn/FirmA -type f -print0 | xargs -0 chmod ug+rw,o+r,o-wx
giàu p

25

Bạn chỉ có thể có một nhóm làm chủ sở hữu .

Tuy nhiên, sử dụng danh sách kiểm soát truy cập bạn có thể xác định quyền cho các nhóm khác.

Kiểm tra xem bạn đã cài đặt ACL chưa cho lệnh getfacl. Nếu hệ thống của bạn chưa cài đặt ACL, hãy cài đặt các công cụ dòng lệnh trong aclgói với:sudo apt-get install acl

Với getfaclbạn có thể đọc thông tin ACL của một thư mục hoặc tệp khác và vớisetfacl bạn có thể thêm các nhóm vào một tệp.

Ví dụ:

setfacl -m g:devFirmB:rwx /srv/svn/  

Thêm nhóm devFirmBvới r ead, w rite, e x ecute quyền vào thư mục/srv/svn .

Nếu bạn cũng muốn các tệp được tạo trong thư mục đó được sở hữu bởi nhiều nhóm, hãy đặt ACL làm ACL mặc định. Mục nhập Xtrong nhóm mặc định có nghĩa là cho phép thực thi nếu chủ sở hữu (hoặc bất kỳ ai khác) thực hiện.

setfacl -m g:devFirmB:rwx /srv/svn/  
setfacl -d -m g:devFirmB:rwX /srv/svn/  

6

Không thể có một tệp thuộc sở hữu của nhiều nhóm Linux có quyền Unix truyền thống. (Tuy nhiên, có thể với ACL .)

Nhưng bạn có thể sử dụng workaround sau và tạo một nhóm mới (ví dụ gọi devFirms) sẽ bao gồm tất cả người dùng của các nhóm devFirmA, devFirmBdevFirmC.
Bạn tạo nhóm người dùng mới với:

sudo addgroup NEWGROUPNAME

Đầu tiên, bạn có thể phải cài đặt id-utilsđể có được lid-command:

sudo apt-get install id-utils

Sau đó, bạn có thể chạy dòng mã sau để dễ dàng sao chép tất cả người dùng SOURCEGROUPsang TARGETGROUP. Tất nhiên bạn phải chạy lệnh một lần cho mỗi nhóm bạn muốn sao chép. Đừng quên thay thế những người nắm giữ được viết hoa bằng tên nhóm thực tế.

for u in $(lid -g -n SOURCEGROUP); do sudo usermod -a -G TARGETGROUP $u; done

Vì vậy, trong trường hợp của bạn, bạn sẽ phải chạy lệnh (tất cả các dòng cùng một lúc):

sudo addgroup devFirms &&
for u in $(lid -g -n devFirmA); do sudo usermod -a -G devFirms $u; done &&
for u in $(lid -g -n devFirmB); do sudo usermod -a -G devFirms $u; done &&
for u in $(lid -g -n devFirmC); do sudo usermod -a -G devFirms $u; done

Lưu ý rằng các lệnh này chỉ sao chép tất cả người dùng là thành viên hiện tại của các nhóm nguồn. Mọi người dùng được thêm sau này cũng sẽ phải được thêm thủ công vào nhóm chung của bạn bằng adduserlệnh. Chỉ cần thay thế một lần nữa những người giữ chỗ được viết hoa bằng tên người dùng và nhóm thực tế ( devFirms):

sudo adduser NEWUSER TARGETGROUP

Cảm ơn Justin Ethier vì câu trả lời của anh ấy tại Unix & Linux.SE: Thêm tất cả người dùng của một nhóm vào một nhóm khác?


@Gilles bạn có nghĩ rằng chương trình của bạn sẽ hoạt động cho máy chủ Subversion nhiều kho lưu trữ với nhiều người dùng như trong bản cập nhật câu hỏi của tôi không?
KernelPanic

2

Không, điều này là không thể.

Mỗi tệp (và cả thư mục) cũng chỉ có thể có một người dùng và một nhóm.


6
Cung cấp một cách tiếp cận khác để có được kết quả tương tự hoặc tương tự sẽ tốt.
Chỉ huy Byte

2

Để cung cấp các quyền khác nhau cho nhiều nhóm hoặc người dùng, hãy sử dụng các lệnh sau (Đã thử nghiệm trên RHEL 6 & 7):

Để làm chủ sở hữu mới của nhóm:

setfacl -m g:<group_name>:<rights you want to give eg.rwx> -R <directory_name>

Để kiểm tra cài đặt acl hiện tại:

getfacl <directory_name>

Đã thử nghiệm, cũng hoạt động trên Ubuntu 16.04.3
Dmitry
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.