Права доступа

mrvtn

Постоянный участник
ДРУЗЬЯ ФОРУМА

mrvtn

Постоянный участник
ДРУЗЬЯ ФОРУМА
Регистрация
2 Июн 2018
Сообщения
116
Реакции
58
Репутация
0
Предлагаю вашему вниманию третью статью из серии статей-шпаргалок, главная задача которых — быстрое освежение в памяти необходимой информации. На этот раз речь зайдет о правах доступа к файлам и каталогам. Как всегда информация не представляет из себя что-то уникальное и найти её можно как на других блогах или форумах, так и на справочных страницах.


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

Пожалуйста Авторизуйтесь или Зарегистрируйтесь для просмотра скрытого текста.




Далее идет пользователь-владелец объекта и основная группа пользователя. П


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


Флаг - Описание
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+


На этом обзор основ работы с правами закончен.
 
Сверху