Отримання нових файлів для спадкування групових дозволів на Linux


87

У мене проблема з дозволами на сервері Linux. Я звик до BSD. Якщо каталог належить групі, користувач, якому належить він, не перебуває в такій формі, як www-data, створені в ньому файли будуть належати цій групі. Це важливо, тому що я хочу, щоб файли читалися веб-сервером (який я не запускатиму як root), але щоб користувач міг все-таки помістити нові файли в каталог. Я не можу розміщувати користувачів у www-даних, тому що вони можуть читати веб-сайти інших користувачів.

Я хочу, щоб веб-сервер читав усі веб-сайти, я хочу, щоб користувачі могли змінити свої власні.

На цей момент дозволи встановлені у папках ....

drwxr-x--- 3 john www-data 4096 Feb 17 21:27 john

Це стандартна поведінка на BSD для дозволів працювати таким чином. Як змусити Linux це зробити?


2
Чи можете ви використовувати ACL?
slm

Відповіді:


128

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

Приклад

$ whoami
saml

$ groups
saml wheel wireshark

налаштування каталогу з perms + правами власності

$ sudo mkdir --mode=u+rwx,g+rs,g-w,o-rwx somedir
$ sudo chown saml.apache somedir
$ ll -d somedir/
drwxr-s---. 2 saml apache 4096 Feb 17 20:10 somedir/

торкніться файлу як saml у цьому режимі

$ whoami
saml

$ touch somedir/afile
$ ll somedir/afile 
-rw-rw-r--. 1 saml apache 0 Feb 17 20:11 somedir/afile

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

ACL

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

раніше

$ ll -d somedir
drwxr-s---. 2 saml apache 4096 Feb 17 20:46 somedir

встановити дозволи

$ sudo setfacl -Rdm g:apache:rx somedir
$ ll -d somedir/
drwxr-s---+ 2 saml apache 4096 Feb 17 20:46 somedir/

Зауважте +наприкінці, це означає, що до цього каталогу до нього застосовано ACL.

$ getfacl somedir
# file: somedir
# owner: saml
# group: apache
# flags: -s-
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:group:apache:r-x
default:mask::r-x
default:other::---

після

$ touch somedir/afile
$ ll somedir/afile 
-rw-r-----+ 1 saml apache 0 Feb 17 21:27 somedir/afile
$ 

$ getfacl somedir/afile
# file: somedir/afile
# owner: saml
# group: apache
user::rw-
group::r-x              #effective:r--
group:apache:r-x        #effective:r--
mask::r--
other::---

Зверніть увагу на встановлені типовими дозволами ( setfacl -Rdm), щоб дозволи були ( r-x) за замовчуванням ( g:apache:rx). Це змушує будь-які нові файли rувімкнути лише їх біт.


Це, здається, забезпечує функціонал, який я хотів, дякую.
Джон Тейт

Це, здається, вирішує і мою подібну проблему. Однак я не зовсім розумію останнє речення: "Це змушує будь-які нові файли увімкнути лише їх біт r". Чому дозвіл x не ввімкнено? Чи є спосіб включити це за замовчуванням ??
яобін

1
@yaobin Я думаю, що це справа безпеки, ви не хочете, щоб файл виконувався за замовчуванням
cdarken

Це не працює unzip?
datasn.io

@ datasn.io - подивіться на сторінку людини unzip. Зокрема -Xвимикач.
slm

37

TL: DR; щоб нові файли успадкували групу папки контейнера:

$ chmod g+s somefolder

Примітка: його мається на увазі у прийнятій відповіді, це лише фрагмент.


3
setgid означає, що нові файли та папки матимуть потрібну групу, але пам’ятайте, що якщо ви перемістите файли в дерево, вони не матимуть правильного власника. Підхід ACL справляється з цим (загалом).
Кріс Морган

@ChrisMorgan як це впорається? Рішення з прийнятої відповіді нічого не зробили для переміщених файлів у моєму випадку.
Дан М.

@DanM: за допомогою файлових режимів ви встановлюєте дозволи, які не успадковуються; але за допомогою ACL ви встановлюєте дозволи, які передаються у спадок (хоча діти можуть вказати власні ACL, які перекривають це), перевіряючись під час виконання.
Кріс Морган

@ChrisMorgan так. Як ти це робиш? Рішення за допомогою прийнятої відповіді форми ACL не працює.
Дан М.

10

Як доповнення до відповіді slm, зауважте, що у файловій системі ext2 / 3/4 ви можете повторити поведінку BSD, яку ви описуєте, використовуючи параметр bsdgroupsmount на розділі. На mount(1)чоловіковій сторінці:

grpid|bsdgroups and nogrpid|sysvgroups
              These options define what group id a newly  created  file  gets.
              When  grpid  is  set,  it takes the group id of the directory in
              which it is created; otherwise (the default) it takes the  fsgid
              of  the current process, unless the directory has the setgid bit
              set, in which case it takes the gid from the  parent  directory,
              and also gets the setgid bit set if it is a directory itself.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.