Предлагаю вашему вниманию третью статью из серии статей-шпаргалок, главная задача которых – быстрое освежение в памяти необходимой информации. На этот раз речь зайдет о правах доступа к файлам и каталогам. Как всегда информация не представляет из себя что-то уникальное и найти её можно как на других блогах или форумах, так и на справочных страницах.
Отобразить права доступа на объекты можно с помощью команды “ls” с ключом “-l“, при выводе мы увидим что-то на
подобии этого (права доступа выделены красной рамкой):
Далее идет пользователь-владелец объекта и основная группа пользователя. Подробнее о выводе команды “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
Как мы видим, права на файл изменились соответствующим образом:
Аналогичная команда в абсолютном виде выглядит так:
root@debian7:~# chmod 700 test_file01
Задать владельцу полные права, группе права на чтение и изменение, а всем остальным на чтение и выполнение:
root@debian7:~# chmod u=rwx,g=rw,o=rx test_file01
Аналог в абсолютном виде:
root@debian7:~# chmod 765 test_file01
Стоить отметить, что основное преимущество изменения прав с использованием символьного вида состоит в гибкости этого метода – он позволяет изменять права только определенным объектам безопасности.
Например, мы имеем файл c разрешениями для владельца только на запись и чтение, а у всех остальных никакого доступа нет. Мы хотим присвоить группе и всем остальным право за чтение файла. Сделать это можно командой:
root@debian7:~# chmod go+r test_file01
При этом мы никак не меняем права пользователя, потому что они нас устраивает, а изменяем права только группы и всех остальных.
Чтобы задать такие же права в абсолютном виде, нам придется задавать их для каждого объекта безопасности:
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
Аналог в абсолютном виде:
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