Права доступа в Debian и команды chmod и chown
Думаю многие сталкивались с проблемой, когда необходимо было изменить пользователя/группу для папок/файлов. Самый доступный способ-это поковыряться в меню mc (midnight commander), но что делать, когда нужно сменить права и пользователя не для папки и подпапок. Вручную решать данную проблему не самый лучший вариант. Наверняка многие слышали либо мельком видели такие команды chmod и chown, некоторым наверняка даже приходилось пользоваться командами.Честно признаться сам долгое время старался всячески избегать данных команд, т.к копаться в манах не было ни малейшего желания. Однако, в итоге был вынужден использовать данные команды.
В общем сразу к делу.
Изменение прав доступа:
Вообще в Linux права доступа разделяются на символьные
и абсолютные
. Символьные представляются в виде букв латинского алфавита, а абсолютные - в виде арабских цифр.
Далее рассмотрим права доступа на конкретном примере как выглядят права доступа для файла. Итак, я нашел у себя в закромах файл - linux_tools.pdf. Для того, чтобы просмотреть существующие права доступа на этот файл, нужно в консоли от имени нашего пользователя ввести команду:
lex@lex:~$ ls -l ./linux_tools.pdf
В результате мы получим примерно следующее (символьное представление):
-rw-r--r-- 1 lex users 289489 Окт 5 17:36 ./linux_tools.pdf
Итак, lex
- это наш пользователь-владелец данного файла.
users
- это группа, которой принадлежит данный файл.
289489
- это размер данного файла в байтах.
После размера идет дата создания и имя файла. Тут все понятно. Теперь рассмотрим первую часть вывода (-rw-r–r–)
В самом начале, как мы видим, стоит символ “-
”. Это означает, что перед нами файл. Если бы в начале стояла буква “d
”, то это означало бы, что перед нами каталог.
Едем дальше….
Стоит отметить, что права доступа к файлам и папкам делятся на права для пользователя
, группы
и остальных
.
блок (rw-) - это как раз права доступа для нашего пользователя. Первая
позиция в правах отвечает за чтение, вторая
за запись, третья
- за исполнение файла. Соответственно,
r - чтение;
w - запись;
- в данном случае запрет на исполнение данного файла.
Если бы файл был исполняемым, то вместо символа -
была бы буква x
(английского алфавита естественно). Полный список доступных параметров см. ниже.
Причем важно запомнить, что права доступа следуют именно в такой последовательности: чтение, запись, исполнение
.
Права доступа для группы имеют вид -r-
Здесь мы видим, что для группы данный файл доступен только для чтения. (На позициях 2 и 3 у нас стоят символы “-”).
Права доступа для остальных имеют вид -r-
. Такой же, как и для группы.
Абсолютное представление прав доступа для нашего файла будет иметь вид в виде цифры:
644
В абсолютном представлении число - это маска прав доступа и представляет собой число в восьмеричной системе исчисления., где первый разряд
(цифра 6) отвечает за права доступа для владельца файла, второй разряд
(цифра 4) - для группы, и третий разряд
(цифра 4)- для остальных.
Как получаются число 644 ? Тут все очень просто. Как было сказано выше, это восьмеричное представление. Если мы возьмем первый разряд (цифра 6) и переведем в двоичную систему исчисления, то получим цифру 110
. Ни на какие мысли не наводит ? Как было сказано выше, права доступа к файлам и папкам задаются в последовательности: чтение, запись, выполнение
. На чтении у нас стоит 1, значит читать можно. С записью ситуация та же. А вот на исполнении у нас 0, значит исполнять файл нельзя. Ниже приведена таблица соответствия восьмеричной и двоичной системы исчисления. После ее просмотра все должно стать понятно.
Восьмеричный формат | Двоичный формат |
0 | 000 |
1 | 001 |
2 | 010 |
3 | 011 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
Например, если файл имеет права для пользователя только на чтение и исполнение, а для группы и остальных только на чтение, то абсолютное представление прав доступа будет иметь вид: 544.
Если мы хотим что бы пользователь, группа и все остальные могли только читать и исполнять файл, то у него должны быть такие права: 555.
Думаю, что тут все понятно и перейдем непосредственно к заданию прав доступа.
chmod
- изменяет права доступа к файлу (собственно из man-а)
Данная команда имеет различные опции: rwxXstugo
r -чтение;
w -запись;
x -выполнение (или доступ к каталогу);
X -выполнение, если файл является каталогом или уже имеет право на выполнение для какого-нибудь пользователя;
s -setuid- или setgid-биты;
t -sticky-бит;
u -установка для остальных таких же прав доступа, которые имеет пользователь, владеющий этим файлом;
g -установка для остальных таких же прав доступа, которые имеет группа файла;
o -установка для остальных таких же прав доступа, которые имеют остальные пользователи (не входящие в группу файла).
Т.е, предположим, что у нас есть “Папка_А”, которую нам надо сделать доступной для чтения/записи и выполнения (доступа к каталогу).
От рута (супер пользователя) вводим в консоли команду:
chmod +rwx путь_к_папке/ Папка_А
В абсолютном исполнении команда будет выглядеть примерно так:
chmod маска_прав_доступа путь_к_папке/ Папка_А
Кстати говоря, перед опциями могут стоять следующие операторы: =
(равно),-
(минус) ,+
(плюс)
Оператор +
добавляет выбранные права доступа к уже имеющимся у каждого файла;
-
удаляет эти права;
=
присваивает только эти права каждому указанному файлу.
А что делать, если надо поменять права не только на Папка_А
, но и на вложенные в нее папки? Все очень просто добавляем опцию рекурсивного изменения прав доступа -R
:
chmod =rwx -R путь_к_папке/ Папка_А
О дополнительных возможностях chmod читаем, набрав
man chmod
изменение владельца/группы
chown
- изменить владельца и группу файлов
chown
также имеет большое количество параметров. (Подробнее читаем в мане: man chown). Углубляться сильно во все параметры не буду, рассмотрю лишь основные.
Допустим есть Папка_А
и нам надо сменить владельца и группы данной папки на pupkin. От рута (супер пользователя) делаем следующее:
chown -R pupkin:any_group /путь_к_файлу/
здесь мы опять видим параметр рекурсивного изменения -R
, только в этом случаю уже пользователя и группы.
pupkin:any_group
- означает пользователь:группа
Ну вот вроде бы и все.. Как оказалось ничего сложного нету