Linux рекурсивно все права

Sysadminium

В этой статье разберём расширенные права доступа к файлам в Linux, которые называются Access Control List / списки контроля доступа (ACL).

О системе прав ACL в Linux

В этой статье мы познакомились со стандартной системой прав в Linux. Но может возникнуть ситуация, что к файлу с правами: rw-r—r— user1 user1 , нужно дать доступ пользователю admin с правами rw- , и пользователю user2 c правами r— .

Стандартная система прав здесь не поможет. Для решения подобной задачи применяют ACL (Access Control List / списки контроля доступа).

  • права доступа к файлу — определяет доступ к файлу или каталогу;
  • ACL default — назначается только каталогу, при этом создаваемые файлы в этом каталоге будут наследовать такие права.

Подготовка системы к практике

Давайте для начала создадим трёх новых пользователей в системе. Так как это административное действие то в Ubuntu я использую sudo, а в Debian переключусь на пользователя root:

alex@ubu:~$ sudo useradd -m -s /bin/bash admin alex@ubu:~$ sudo useradd -m -s /bin/bash user1 alex@ubu:~$ sudo useradd -m -s /bin/bash user2 alex@deb:~$ su - Пароль: root@deb:~# useradd -m -s /bin/bash admin root@deb:~# useradd -m -s /bin/bash user1 root@deb:~# useradd -m -s /bin/bash user2

Про создание пользователей я писал в этой статье.

Установим пользователям пароли:

alex@ubu:~$ sudo passwd admin New password: Retype new password: passwd: password updated successfully alex@ubu:~$ sudo passwd user1 New password: Retype new password: passwd: password updated successfully alex@ubu:~$ sudo passwd user2 New password: Retype new password: passwd: password updated successfully root@deb:~# passwd admin Новый пароль: Повторите ввод нового пароля: passwd: пароль успешно обновлён root@deb:~# passwd user1 Новый пароль: Повторите ввод нового пароля: passwd: пароль успешно обновлён root@deb:~# passwd user2 Новый пароль: Повторите ввод нового пароля: passwd: пароль успешно обновлён

Дальше все примеры для Ubuntu я показывать не буду, там всё аналогично. Единственное не забывайте при административных действиях использовать sudo перед командами.

Под пользователем user1 создадим каталог test и в нем файл file1.txt:

root@deb:~# su - user1 user1@deb:~$ mkdir test user1@deb:~$ touch test/file1.txt user1@deb:~$ exit выход root@deb:~#

На этом подготовка системы закончена, мы сделали трёх пользователей: admin, user1 и user2. И в домашнем каталоге пользователя user1 создали каталог test в котором создали файл file1.txt.

Читайте также:  Внутреннее устройство linux 2021 кетов

Работа с ACL в Linux

Для начала установим систему acl, про установку дополнительных пакетов в систему поговорим позже, просто выполните:

Чтобы посмотреть acl права на файл или каталог используют команду getfacl (её может выполнить любой пользователь без административных прав):

root@deb:~# getfacl /home/user1/test/file1.txt getfacl: Removing leading '/' from absolute path names # file: home/user1/test/file1.txt # owner: user1 # group: user1 user::rw- group::r-- other::r--

Для данного файла acl пока не настроен. Поэтому мы видим стандартные права, где владелец имеет права на чтение и запись, а группа и все остальные только на чтение.

Для установки acl прав используем команду setfacl (выполнять эту команду может только root пользователь, или пользователь с sudo правами):

  • опция -m используется когда нужно модифицировать права;
  • дальше, если мы устанавливаем права для пользователя, то ставим символ u, для группы будем использовать символ g;
  • затем, после двоеточия, имя пользователя;
  • дальше, после двоеточия, права доступа для этого пользователя;
  • и наконец указываем имя файла.

Вот примерное использование setfacl:

# setfacl -m u:пользователь:права_доступа файл # setfacl -m g:группа:права_доступа файл

Вот как решается описанная в самом начале задача, используя acl:

root@deb:~# setfacl -m u:admin:rw-,u:user2:r-- /home/user1/test/file1.txt root@deb:~# getfacl /home/user1/test/file1.txt getfacl: Removing leading '/' from absolute path names # file: home/user1/test/file1.txt # owner: user1 # group: user1 user::rw- user:admin:rw- user:user2:r-- group::r-- mask::rw- other::r--

При этом если мы посмотрим командой ls -l права, то заметим знак «+«, который и указывает что файл имеет дополнительные acl права:

root@deb:~# ls -l /home/user1/test/file1.txt -rw-rw-r--+ 1 user1 user1 0 янв 20 14:38 /home/user1/test/file1.txt

Для группы владельцев и всех остальных также можно устанавливать acl права таким образом:

setfacl -m g:groupname:rwx setfacl -m o:rwx

Для того чтобы удалить пользователя или группу из acl нужно использовать команду setfacl с опцией -x, например вот так:

root@deb:~# setfacl -x u:user2 /home/user1/test/file1.txt root@deb:~# getfacl /home/user1/test/file1.txt getfacl: Removing leading '/' from absolute path names # file: home/user1/test/file1.txt # owner: user1 # group: user1 user::rw- user:admin:rw- group::r-- mask::rw- other::r--

Как видим у пользователя user2 не осталось acl прав к этому файлу. Таким же образом можем удалить группу:

Читайте также:  How to run as root in linux

Для того чтобы удалить все acl права с файла используем команду setfacl с опцией -b:

root@deb:~# setfacl -b /home/user1/test/file1.txt root@deb:~# getfacl /home/user1/test/file1.txt getfacl: Removing leading '/' from absolute path names # file: home/user1/test/file1.txt # owner: user1 # group: user1 user::rw- group::r-- other::r--

Наследование ACL

Теперь разберемся с acl default. Устанавливаются такие права только на каталог. Для установки таких прав используется команда setfacl с опцией -d:

root@deb:~# setfacl -d -m u::rwx,g::rw-,o::r,u:admin:rw /home/user1/test/ root@deb:~# getfacl /home/user1/test/ getfacl: Removing leading '/' from absolute path names # file: home/user1/test/ # owner: user1 # group: user1 user::rwx group::r-x other::r-x default:user::rwx default:user:admin:rw- default:group::rw- default:mask::rw- default:other::r--

Добавились новые поля default, которые определяют права по умолчанию для всех новых файлов в этом каталоге.

Теперь, для проверки, создадим новый файл и посмотрим на его права:

root@deb:~# touch /home/user1/test/file2.txt root@deb:~# getfacl /home/user1/test/file2.txt getfacl: Removing leading '/' from absolute path names # file: home/user1/test/file2.txt # owner: root # group: root user::rw- user:admin:rw- group::rw- mask::rw- other::r--

Выше я создал файл из под пользователя root, но пользователь admin получил к нему доступ, так как он указан в правах default этого каталога.

Маска ACL

Кроме прав доступа и прав по умолчанию в acl присутствуем маска. Маска говорит о максимально возможных назначенных правах для пользователей. Она вычисляется автоматически при добавлении пользователя. Т.е. мы можем одному пользователю дать права rw- , второму r— , маска при этом станет rw- .

Маску можно изменить командой setfacl -m m:права_доступа файл например:

root@deb:~# touch /home/user1/test/file2.txt root@deb:~# setfacl -m m:r /home/user1/test/file2.txt root@deb:~# getfacl /home/user1/test/file2.txt getfacl: Removing leading '/' from absolute path names # file: home/user1/test/file2.txt # owner: root # group: root user::rw- user:admin:rw- #effective:r-- group::rw- #effective:r-- mask::r-- other::r--

По значению effective:r— мы видим что права изменились.

Использовать это можно, если мы дали различные права на файл разным пользователям, а затем всех решили ограничить.

Рекурсивное назначение прав

Для установки рекурсивно прав на все файлы в каталоге и подкаталогах используется опция -R, её же можно использовать при удалении прав:

setfacl -R -m u:пользователь:права_доступа каталог setfacl -R -b каталог

Источник

Как рекурсивно изменить права доступа к файлу в Linux

Если вы используете Linux в качестве основной операционной системы или управляете серверами Linux, вы столкнетесь с ситуацией, когда попытаетесь создать или отредактировать файл и получите ошибку «Permission deny». Как правило, ошибки, связанные с недостаточными разрешениями, можно решить, установив правильные права доступа или владельца .

Читайте также:  Терминал linux для виндовс

Linux — это многопользовательская система, и доступ к файлам контролируется с помощью разрешений, атрибутов и владельцев файлов. Это гарантирует, что только авторизованные пользователи и процессы могут получить доступ к файлам и каталогам.

Для получения дополнительной информации о правах доступа к файлам см. «Команда Umask в Linux» .

В этой статье мы объясним, как рекурсивно изменять права доступа к файлам и каталогам.

Chmod Рекурсивный

Команда chmod позволяет изменять права доступа к файлам в символьном или числовом режиме.

Чтобы рекурсивно работать со всеми файлами и каталогами в данном каталоге, используйте команду chmod с параметром -R , ( —recursive ). Общий синтаксис для рекурсивного изменения прав доступа к файлу следующий:

Например, чтобы изменить права доступа для всех файлов и подкаталогов в каталоге /var/www/html на 755 вы должны использовать:

Режим также можно указать с помощью символьного метода:

chmod -R u=rwx,go=rx /var/www/html

Только root, владелец файла или пользователь с привилегиями sudo могут изменять права доступа к файлу. Будьте особенно осторожны при рекурсивном изменении разрешений файлов.

Использование команды find

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

Наиболее распространенный сценарий — рекурсивное изменение разрешений файла веб-сайта на 644 и разрешений каталога на 755 .

find /var/www/html -type d -exec chmod 755 <> ;find /var/www/html -type f -exec chmod 644 <> ;
find /var/www/html -type d -exec chmod u=rwx,go=rx <> ;find /var/www/html -type f -exec chmod u=rw,go=r <> ;

Команда find ищет файлы или каталоги в /var/www/html и передает каждый найденный файл или каталог команде chmod для установки разрешений.

При использовании find с -exec команда chmod запускается для каждой найденной записи. Используйте команду xargs чтобы ускорить операцию, передав сразу несколько записей:

find /var/www/html -type d -print0 | xargs -0 chmod 755 find /var/www/html -type f -print0 | xargs -0 chmod 644

Выводы

Команда chmod с параметрами -R позволяет рекурсивно изменять права доступа к файлу.

Чтобы рекурсивно установить разрешения для файлов в зависимости от их типа, используйте chmod в сочетании с командой find .

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Источник

Оцените статью
Adblock
detector