Debian. Шпаргалка сисадмина. Права доступа

https://www.debian.org

www.debian.org

Предлагаю вашему вниманию третью статью из серии статей-шпаргалок, главная задача которых — быстрое освежение в памяти необходимой информации. На этот раз речь зайдет о правах доступа к файлам и каталогам. Как всегда информация не представляет из себя что-то уникальное и найти её можно как на других блогах или форумах, так и на справочных страницах.

Отобразить права доступа на объекты можно с помощью команды «ls» с ключом «-l«, при выводе мы увидим что-то на
подобии этого (права доступа выделены красной рамкой):
debian access permissions 01

Далее идет пользователь-владелец объекта и основная группа пользователя. Подробнее о выводе команды «ls» вы можете почитать в «манах» или в моей предыдущей статье «Debian. Шпаргалка сисадмина. Работа с файлами и каталогами«.

Первый символ означает тип объекта, ниже они собраны в таблицу:

Флаг Описание
Отсутствие флага
l — лат. «л» Символическая ссылка (symbolic link)
d Директория (directory)
b Блочное устройство (block device)
c Символьное устройство (character device)
p Канал, устройство fifo (fifo device)
s Unix сокет (unix domain socket)

Для изменения прав доступа используется команда «chmod«. Права доступа могут быть заданы в символьном или абсолютном виде.

Формат символьного режима:
`[ugoa…][[+-=][rwxXstugo…]…][,…]’.
Буквы «ugoa» расшифровываются следующим образом, как логично предположить:
u — пользователь-владелец;
g — первичная группа пользователя, в неё также могут входить другие юзеры;
o — все остальные пользователи, не входящие в первичную группу пользователя-владельца;
a — все вышеперечисленные (a=ugo).

Далее разбираемся с «+-=«:
+ — добавляет выбранные права доступа к уже имеющимся;
— удаляет выбранные права;
= — присваивает только выбранные права каждому указанному файлу.

Теперь перейдем к правам:
r — чтение;
w — запись;
x — выполнение (или доступ к каталогу);
X — выполнение, если файл является каталогом или уже имеет право на выполнение для какого-нибудь пользователя;
s — setuid- или setgid-биты;
t — sticky-бит;
u — установка для остальных таких же прав доступа, которые имеет пользователь, владеющий этим файлом;
g — установка для остальных таких же прав доступа, которые имеет группа файла;
o — установка для остальных таких же прав доступа, которые имеют остальные пользователи (не входящие в группу файла).

Небольшое пояснение по поводу параметра «t«, цитата из справочных страниц:

В настоящее время установка sticky-бита для каталога, приводит к тому, что только владелец файла и владелец этого каталога могут удалять этот файл из каталога. (Обычно это используется в каталогах типа /tmp, куда все имеют права на запись)

Биты setuid— и setgid нужны чтобы запускать исполняемые файлы от имени пользователя-владельца. Если запустить исполняемый файл, который находится в каталоге с установленным битом setgid, то файл запустится с идентификатором группы-владельца этого каталога.

С правами доступа в абсолютном виде дело обстоит следующим образом: для каждого объекта безопасности можно задать права в виде rwx, где r — чтение, w — запись, x — выполнение; соответственно, если права необходимо предоставить, выставляем «1«, если права не нужны — «0«. Таким образом полные права для пользователя в двоичной системе счисления будут выглядеть как «111«, что в восьмеричной будет равно 7.

Рассмотрим на примере как в двоичном виде будут выглядеть маска полных прав для владельца, прав на чтение и выполнение для первичной группы и права на чтение для всех остальных:
-rwxr-xr—
111101100
Теперь условно разбиваем на 3 части:
111|101|100
Переводим в восьмеричную систему и получаем:
754

Стоит отметить, что в большинстве случае биты setuid-, setgid и sticky в абсолютном виде опускаются. Чтобы их установить, необходимо перед числовым представлением прав вставить 4 для setuid, 2 для setgid и 1 для sticky.

Теперь попробуем задать одни и те же права в символьном и абсолютном виде.

Задать владельцу полные права, группа и остальные пользователи не имеют никаких прав, даже на чтение:
root@debian7:~# chmod u=rwx,go= test_file01
Как мы видим, права на файл изменились соответствующим образом:
debian access permissions 02Аналогичная команда в абсолютном виде выглядит так:
root@debian7:~# chmod 700 test_file01

Задать владельцу полные права, группе права на чтение и изменение, а всем остальным на чтение и выполнение:
root@debian7:~# chmod u=rwx,g=rw,o=rx test_file01
debian access permissions 03Аналог в абсолютном виде:
root@debian7:~# chmod 765 test_file01

Стоить отметить, что основное преимущество изменения прав с использованием символьного вида состоит в гибкости этого метода — он позволяет изменять права только определенным объектам безопасности.

Например, мы имеем файл c разрешениями для владельца только на запись и чтение, а у всех остальных никакого доступа нет. Мы хотим присвоить группе и всем остальным право за чтение файла. Сделать это можно командой:
root@debian7:~# chmod go+r test_file01
При этом мы никак не меняем права пользователя, потому что они нас устраивает, а изменяем права только группы и всех остальных.
debian access permissions 04Чтобы задать такие же права в абсолютном виде, нам придется задавать их для каждого объекта безопасности:
root@debian7:~# chmod 644 test_file01

Теперь попробуем у этого же файла изменить права следующим образом: владельцу дать дополнительно права на выполнение, группе дать права на запись, а права на чтение у всех остальных отозвать:
root@debian7:~# chmod u+x,g+w,o-r test_file01
В принципе эту же команду можно записать даже немного короче:
root@debian7:~# chmod u+x,g+w,o= test_file01
debian access permissions 05Аналог в абсолютном виде:
root@debian7:~# chmod 760 test_file01

Выставим файлу, например, бит setuid:
root@debian7:~# chmod u+s test_file01
Аналогичная команда в абсолютном представлении с текущими правами:
root@debian7:~# chmod 4760 test_file01
Соответствующим образом изменились и права:
(см. скриншот 06)

Sticky-бит можно установить вот так:
root@debian7:~# chmod +t test_file01
В абсолютном представлении с сохранением текущих прав:
root@debian7:~# chmod 1760 test_file01

Если есть необходимость установить враз, например, setuid и sticky, то маска будет 4+1=5 (или 100+001=101).

Если нужно изменить права рекурсивно на каталог:
root@debian7:~# chmod -R 755 testdir02

Либо на все файлы в текущем каталоге:
root@debian7:~# chmod -R 755 *

Кроме изменения прав доступа может потребоваться смена пользователя-владельца или группы. К сожалению, «chmod» это сделать не сможет, однако есть другие команды:

chown — изменить владельца и группу файлов.

Пример использования:
chown [опции] пользователь[:группа] файл…
root@debian7:~# chown zabbix:zabbix test_file01
Можно использовать рекурсию для изменения владельца всех файлов и каталогов:
root@debian7:~# chown -R zabbix:zabbix testdir02

chgrp — изменить группу файлов

Изменим группу у файла:
root@debian7:~# chgrp zabbix test_file01
Или рекурсивно для каталога:
root@debian7:~# chgrp -R zabbix test_file01

На этом обзор основ работы с правами закончен. Более подробную информацию можно найти в разделе «1.2.3. Filesystem permissions» руководства.


При написании статьи использовались следующие источники, кроме упомянутых выше:

Linux chmod command sticky bit example and implementations

Права доступа Unix, SUID, SGID, Sticky биты

CHMOD(1)

comments powered by HyperComments