Google

8 мар. 2009 г.

Права доступа в 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 (английского алфавита естественно). Полный список доступных параметров см. ниже.
Причем важно запомнить, что права доступа следуют именно в такой последовательности: чтение, запись, исполнение.

Черным блоком я выделил права доступа для группы. Здесь мы видим, что для группы данный файл доступен только для чтения. (На позициях 2 и 3 у нас стоят символы "-"). 

Желтый блок у нас отвечает за права доступа для остальных. С правами здесь картина такая же, как и для группы.

Абсолютное представление правд доступа для нашего файла будет иметь вид в виде цифры:
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


2) изменение владельца/группы:


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


chown также имеет большое количество параметров. (Подробнее читаем в мане: man chown). Углубляться сильно во все параметры не буду, рассмотрю лишь основные.

Допустим есть "Папка_А" и нам надо сменить владельца и группы данной папки на pupkin. От рута (супер пользователя) делаем следующее:
chown -R pupkin:any_group /путь_к_файлу/

здесь мы опять видим параметр рекурсивного изменения -R, только в этом случаю уже пользователя и группы.

pupkin:any_group - означает пользователь:группа

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

5 comments:

Отправить комментарий

Social