Укажіть групу за замовчуванням та дозволи для нових файлів у певній папці


15

У мене є певний каталог, в якому є проект, яким поділяються кілька користувачів. Ці користувачі використовують SSH для отримання доступу до цього каталогу та модифікації / створення файлів.

Цей проект має бути доступним лише для певної групи користувачів: давайте назвати його "моєю групою". Під час сеансу SSH всі файли / каталоги, створені поточним користувачем, за замовчуванням повинні належати групі "mygroup" та мати групові права доступу.

Я можу вирішити проблему дозволів за допомогою umask:

$ cd project
$ umask 002
$ touch test.txt

Файл "test.txt" зараз може бути записаний у групу, але все ще належить до моєї групи за замовчуванням ("mislav", як і моє ім'я користувача), а не до "моєї групи". Я можу chgrpрекурсивно встановити бажану групу, але я хотів знати, чи існує спосіб неявно встановити якусь групу, як umask, змінити дозволи за замовчуванням під час сеансу.

Цей каталог конкретного є загальним мерзотником репо з робочою копією , і я хочу , git checkoutі git resetоперації , щоб встановити правильну маску і групу для нових файлів , створених в робочій копії. ОС - це Ubuntu Linux.

Оновлення: колега пропонує мені заглянути в getfacl / setfacl POSIX ACL, але рішення нижче в поєднанні з umask 002поточним сеансом для мене досить добре і набагато простіше.

Відповіді:


19

Для того, щоб усі файли в заданому каталозі успадковували групові права, вам потрібно використовувати біт setgid у вашому каталозі. Дивіться це посилання .

 $ 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

Спасибі. Цікаво, що я не знайшов цього за допомогою googling
mislav

6

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

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

4

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

Git може подбати про все це через core.sharedRepositoryпрапор. У мене було те саме питання, і я вирішив його так:

Припустимо, що repogroupце ваша група, і ви повинні cdдо каталогу repo:

Спочатку змініть прапор спільного доступу на group:

git config core.sharedRepository group 

Примітка. Тут потрібно використовувати ключове слово group, а не назву групи. Це еквівалентно створенню голого сховища з опцією --shared=group.

Потім змініть групу для всього сховища:

chgrp -R repogroup .

Щоб переконатися, що наявні каталоги можуть бути записані в групу ( g+w), а наявні виконувані файли також стають виконуваними групами ( g+X), вам також потрібно:

chmod -R g+wX .

Щойно ви зробите це, git вшануватиме shared=groupпрапор та піклується про групові дозволи в наступному, як для існуючих, так і для нових файлів, тому вам більше ніколи не знадобиться umaskабо chgrp.

Я поставлю джерело в коментар, якщо знайду його назад.


3

Я не дуже досвідчений, коли йдеться про сторону * nix, але я думаю, що те, що ви шукаєте, називається setgid.

Дивіться тут .


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