Правильная настройка ACL для -rw -r --r --+

Использованиеsed:

$ sed '2,$s/,/.1,/2' file
ip,time,name
1.1.1.1,2018-08-31 10:01:03.1,postgres
2.1.1.1,2018-08-31 12:51:13.1,oracle
3.1.1.1,2018-08-31 14:32:53.1,sql

Это применяет замену к строке 2 и далее(2,$). Замена s/,/.1,/2заменяет вторую запятую на .1,. Именно /2в конце команды подстановки заставляет ее перейти ко второму совпадению.

0
30.05.2021, 00:30
1 ответ

Во-первых, обратите внимание, что ACL файлов, которые имеют записи ACL для именованных пользователей или групп, также имеют запись маски ACL , которая ограничивает разрешения, предоставляемые этими записями ACL и записью владельца группы. Запись маски показывает групповые разрешения на lsи другие утилиты, которые смотрят только на традиционные биты разрешений.

Таким образом, если ваш lsпоказывает -rw-r--r--+, маска ACL — r--, что означает, что ACL разрешений u:usernamehere:rwxбудет действовать как u:usernamehere:r--. Это может быть не то, что вы хотите. С другой стороны, обратите внимание, что u:usernamehere:rwxотличается от u::rwxдаже для файлов, принадлежащих usernamehere. Первая — это именованная запись, ограниченная маской, а вторая — запись для владельца файла, которая не ограничена .

Идея маски заключается в том, что инструмент, работающий по аналогии с chmod go-rwx, может сделать файл недоступным для всех, кроме владельца. Вы можете удалить запись маски с помощью setfacl -x m:: filename, но это работает только в том случае, если нет записей именованных пользователей или групп.

В любом случае вы можете добавить более одной записи по умолчанию для одной и той же команды. Это установит записи по умолчанию, чтобы владелец файла получил разрешения rwx, маска была установлена ​​​​на r--, а разрешения для «других» были установлены на r--:

.
$ setfacl -R -d -m u::rwx -m m::r-- -m o::r-- /path

Возможно, вы также захотите явно установить ACL по умолчанию для владельца группы (g::), так как запись появляется в любом случае (со значениями, вероятно, взятыми из битов разрешения ). Например. здесь запись для владельца группы действует не полностью, так как маска ограничивает его:

default:user::rwx
default:group::r-x              #effective:r--
default:mask::r--
default:other::r--

Файл, созданный в каталоге, отображается в lsкак -rw-r--r--+.


Опять же, если вы просто хотите, чтобы указанный пользователь получил указанные вами разрешения, вы можете не указывать поле маски,и setfaclустановит его для вас на основе разрешений, которые вы использовали для фактических записей ACL:

setfacl -R -d -m u::rwx -m u:usernamehere:rwx -m o::r-- /path

Файл, созданный в каталоге, теперь отображается в lsкак -rw-rw-r--+, а вgetfacl:

user::rw-
user:usernamehere:rwx           #effective:rw-
group::r-x                      #effective:r--
mask::rw-
other::r--

В маске отсутствует x, так как я создал файл с touch, и он использует разрешения 0666, маскируя биты x.

1
28.07.2021, 11:28

Теги

Похожие вопросы