ACL или виндовые права доступа в linux
Нативно юних работает с правами доступа к файлам очень просто: один
пользователь, одна группа, все остальные. Каждой кучке
юзер/группа/остальные можно присвоить право чтения, записи и исполнения
(входа в каталог). Но
часто возникает необходимость иметь доступ к папке двум разным группам.
Вложенности групп в юниксе нет, и обойти это штатно нельзя, но если
очень надо - есть ACL. Итак, есть папка,
назовем ее - shit, она расшаренна самбой, самба в домене и пускает к
этой шаре только пользователей одной доменной группы, допустим -
DOMAIN\shit. Но есть еще и локальные пользователи (в opensuse - группа
users) которым тоже нужен доступ к этой папке. Права на папку
"остальным" давать нельзя, иначе самба будет пускать всех подряд.
Решение простое: 1. Ставим ACL: zypper in acl 2. Для надежности - основной пользователь папки - root, присваеваем без рекурсии только на папку: chown root shit 3. Меняем группу папки для локальных юзеров, тут можно (и нужно) с рекурсией: сhgrp -R users shit 4.
Делаем рекурсивно права безопастности, так, что бы юзер (root) и группа
имели все права на все, это немного не правильно, т.к. мы даем права на
исполнение всех подряд файлов, но так проще: chmod -R 770 shit 5. Теперь самое интересное, приделываем права для виндо-самбы, рекурсивно: setfacl -R -m g:'PROTEH\storage':rwx shit Ес-но данная файловая система должна монтироваться с опцией acl. Пример самба-конфига на папку: [shit] comment = "shit, shit and shit" inherit acls = Yes path = /bla/bla/bla/shit read only = No read list = @DOMAIN\\shit write list = @DOMAIN\\shit create mask = 770 directory mask = 770 force group = users Какой
результат: юзеры, как локальные, так и из доменной группы DOMAIN\shit
по самбе - могут писать сколько влезет, посторонние попасть не могут, у
всех группа users и DOMAIN\\shit одновременно + сохраняется имя
пользователя того, кто сохранил файл или папку. На всякий случай сунул в /etc/cron.hourly/ такой скрипт: #!/bin/bash chmod -R 770 /bla/bla/bla/shit chgrp -R users /bla/bla/bla/shit setfacl -R -m g:'DOMAIN\shit':rwx /bla/bla/bla/shit Работает как часы, выглядит примерно так: ls -l shit drwxrwx---+ 2 nonpudel users 16384 Jun 18 15:55 мамко drwxrwx---+ 9 DOMAIN\huy users 4096 Jun 18 17:45 папко -rwxrwx---+ 1 DOMAIN\boss users 74 May 8 13:02 файлик.url