DevBug blog

О Linux, Java, разработке ПО и не только

Права доступа в 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 - означает пользователь:группа

Ну вот вроде бы и все.. Как оказалось ничего сложного нету

comments powered by Disqus