Встановлення декількох груп як власників каталогів


31

На своєму сервері у мене є каталог /srv/svn.

Чи можливо встановити цей каталог, наприклад devFirmA, кілька груп власності , devFirmBі devFirmC?

Справа в тому, що я хочу, щоб subversionуправління версіями керувало декількома користувачами у кількох сховищах, і я не знаю, як об’єднатись /srv/svn , кореневий каталог сховищ, дозволи. У мене, наприклад, три фірми FirmA, FirmBі FirmC. Тепер, всередині /srv/svnя створив три директорії, FirmA, FirmB, FirmCі в них я створив сховище для кожного проекту , і тепер я не знаю , як встановити схему дозволу , так як все elementes всередині /srv/svnзнаходяться в власності root:root, які не в порядку, або я неправильно?


1
Чи мають фірмові групи файли один одного? Або вони зовсім окремі, крім спільного використання батьківського каталогу?
Дж. М. Бекер

@TechZilla група фірми ОБОВ'ЯЗКОВО не мати доступ один до одного до файлів, МОЖЕ бути відокремлено, лише я повинен мати доступ до всіх каталогів.
KernelPanic

Гаразд, я опублікував правильну відповідь, ви не повинні використовувати для цього ACL. Вони є крайнім варіантом, ця проблема як і раніше є дуже поширеною.
Дж. М. Бекер

Відповіді:


16

Це надзвичайно поширена проблема, якщо я її точно розумію і постійно стикаюся з нею. Якби я використовував ACL для кожної тривіальної проблеми групування, я мав би безліч керованих систем. Вони використовують найкращу практику, коли ви не можете це зробити іншим способом, не для цієї ситуації. Це метод, який я дуже рекомендую.

Спочатку потрібно встановити свій умаск на 002, це так, що група може поділитися з собою. Я, як правило, створюю файл типу /etc/profile.d/firm.sh, а потім додаю тестову команду за допомогою umask.

[ $UID -gt 10000 ] && umask 002

Далі потрібно встановити каталоги на їхні відповідні групи,

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

Нарешті, потрібно правильно встановити біт SGID, тому група завжди залишатиметься тією, яку ви встановили. Це не дозволить встановити письмовий файл у GID автора.

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

Тепер нарешті, якщо ви хочете не допустити доступу до каталогів інших користувачів.

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

2
Попередження: це має працювати, але видаляється біт дозволу на виконання у всіх файлах. Це добре, якщо у вашому дереві каталогів зберігаються лише документи. Якщо він містить виконавчі файли, це запобіжить виконанню, що може зруйнувати вашу установку.
Стефан Гурішон

1
Це також може бути приємною ідеєю, але зовсім не відповідає на питання.
закінчення

Це, як описано, лише розділяє три папки, щоб лише члени кожної фірми могли змінювати лише свої відповідні файли - це не надає 'svn' доступу, який йому потрібен.
багатий р

Це дуже близько. Те, чого не вистачає, - це надати вам доступ до всіх груп. Додайте цей крок, припускаючи, що ваш логін svnadmin: sudo usermod -a -G FirmA,FirmB,FirmC svnadmin Це додасть svnadminдо всіх цих груп. Оскільки у файлах усіх цих груп увімкнено функцію «групового запису» ( chmod 664зробив це), ви, крім firmX, будете єдиними авторами файлів, що належать firmX.
багатий p

1
Краще - змініть дозволи на додавання / віднімання того, що ви хочете додати / відняти - наприклад, зробитиfind /srv/svn/FirmA -type f -print0 | xargs -0 chmod ug+rw,o+r,o-wx
rich p

25

Ви можете мати лише одну групу як власника .

Однак, використовуючи списки контролю доступу, ви можете визначити дозволи для інших груп.

Перевірте, чи встановлено ACL, видаючи команду getfacl. Якщо у вашій системі не встановлено ACL, встановіть інструменти командного рядка, які є в aclпакеті :sudo apt-get install acl

За допомогою getfaclвас можна прочитати інформацію про ACL каталогу або іншого файлу, а також setfaclможна додати групи до файлу.

Наприклад:

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

Додає групу devFirmBз дозволом r ead, w rite, e x ecute до каталогу /srv/svn.

Якщо ви також хочете, щоб файли, створені в цьому каталозі, володіли кількома групами, встановіть ACL як ACL за замовчуванням. Запис Xу групі за замовчуванням означає "дозволити виконання, якщо виконується власником (або ким-небудь іншим)".

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

6

Неможливо мати файл, який належить декільком групам Linux із традиційними дозволами Unix. (Однак це можливо з ACL .)

Але ви можете використовувати наступний метод обходу і створити нову групу (наприклад , називається devFirms) , яка буде включати в себе всі користувачі груп devFirmA, devFirmBі devFirmC.
Ви створюєте нові групи користувачів за допомогою:

sudo addgroup NEWGROUPNAME

По-перше, можливо, вам доведеться встановити, id-utilsщоб отримати команду lid-comma:

sudo apt-get install id-utils

Потім ви можете запустити наступний рядок коду легко скопіювати всі користувачі SOURCEGROUPв TARGETGROUP. Звичайно, потрібно виконати команду один раз для кожної групи, яку потрібно скопіювати. Не забудьте замінити літери, що містять великі літери, фактичними назвами груп.

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

Тож у вашому випадку вам доведеться запустити команду (всі рядки одразу):

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

Зауважте, що ці команди копіюють лише всіх користувачів, які є поточними членами вихідних груп. Кожен користувач, який буде доданий пізніше, також повинен бути вручну доданий до вашої загальної групи за допомогою adduserкоманди. Просто ще раз замініть великі літери, що містять великі літери, на фактичне ім’я користувача та групи ( devFirms):

sudo adduser NEWUSER TARGETGROUP

Спасибі Джастіну Етьє за його відповідь у Unix & Linux.SE: Додати всіх користувачів однієї групи до іншої групи?


@Gilles Ви маєте на увазі, що ваша схема буде працювати для серверів Subversion у кількох сховищах для кількох користувачів, як у моєму оновленні запитань?
KernelPanic

2

Ні, це неможливо.

Кожен файл (і так само каталоги) може мати лише одного користувача та одну групу.


6
Запропонувати альтернативний підхід для отримання того ж чи подібного результату було б непогано.
Командир байт

2

Для надання різних прав для декількох груп або користувачів використовуйте наступні команди (Тестовано на RHEL 6 і 7):

Щоб створити нового власника групи:

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

Щоб перевірити поточні налаштування acl:

getfacl <directory_name>

Тестовано, також працює на Ubuntu 16.04.3
Дмитро
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.