Во время работы с Linux вы, скорее всего, успели получить сообщение об ошибке Permission denied (Отказано в доступе).
Сделано это для того чтобы рядовые пользователи не могли получить доступ к просмотру файлов других пользователей, а так же к важным системным каталогам и файлам.
Скажем, я под sudo создал файл, а потом под простым пользователем пытаюсь его отредактировать и текстовый редактор меня сразу предупреждает:
Путем нехитрых манипуляций, командой ls -ld, я вижу что файл принадлежит "руту", и группа "рутовых" пользователей. Любые изменения с этим файлом может делать только "root"!
Разберемся со всеми этими rwx аббревиатурами!
Я долгое время не мог понять (да просто лень было разбираться) логику работы атрибутов команды chmod, мои познания ограничивались командой chmod с атрибутами 777 (дать доступ всем и для любых операций).
У файла имеются девять флагов, которые определяют доступ к файлу и выглядят они так:
-rwxrwxrwx
r - доступ к чтению файлам
w - доступ к записи в файлам или их удаление
x - доступ к исполнению файла (можно ли его запустить как приложение)
Если вместо буквы будет дефис, то значит доступ закрыт.
У обычного файла перед девятибитным индикатором прав доступа указывается дефис. Вместо него можно встретить символы: d (directory), l (link), b (block), c (char), s (socket) или p (для именованного конвейера).
Первые три символа rwx определяют права доступа для владельца, вторые три - для группы в которую входит пользователь, и последние три - для всех остальных.
У меня есть файфл test.py посмотрим его права доступа командой ls -ld test.py
вывод программы:
-rw-r--r-- 1 eugene eugene 21 мая 26 10:55 test.py
Что означает: создатель (eugene) файла файл может читать и записывать изменения (или вообще удалить файл), члены группы в которую входит пользователь eugene могут этот файл только читать, все остальные пользователи могут его так же только читать.
Чтобы сменить права доступка к файлу, используется команда chmod. Эта команда используется с цифровыми (или буквенными, см. ниже) атрибутами:
r - 4
w - 2
x - 1
0 - закрыть доступ
Изначально я перевожу все девять флагов к недоступности для всех:
chmod 000 test.py
и права доступа будут выглядеть так:
---------- 1 eugene eugene 21 мая 26 10:55 test.py
Теперь верну только себе доступ к чтению и записи данного файла, мне надо чтобы у меня появились буквы rw в первой тройке символов. Нельзя поставить в атрибуты цифры 4 и 2 ибо будет 4 для одной группы доступа, а 2 для другой. Делается проще - цифры складываются (4 + 2 = 6) и команда будет выглядеть следующим образом:
chmod 600 test.py
Проверяем:
ls -ld test.py
-rw------- 1 eugene eugene 21 мая 26 10:55 test.py
Заметим, что "6" я поставил первой, если ее поставить по средине - то поменяются права для группы, и если в конце - для всех остальных пользователей.
chmod 060 test.py
----rw---- 1 eugene eugene 21 мая 26 10:55 test.py
chmod 006 test.py
-------rw- 1 eugene eugene 21 мая 26 10:55 test.py
Права доступа назначаются путем сложения цифр 4, 2, 1, в зависимости от того какие права нужно дать для конкретного пользователя по отношению к какому-либо файлу или каталогу.
У меня есть директория temp, там есть другие директории. Путем команды chmod 000 temp я обрубаю себе доступ в эту директорию, пробую туда зайти:
cd temp
bash ругается - отказано в доступе. И пока я не изменю права доступа на вход в данный каталог, то попасть я туда не смогу.
Так же можно поменять права доступа ко всем каталогам находящимся внутри интересующего нас каталога, для этого ставится дополнительный ключ -R (R от слова рекурсия)
chmod -R 750 temp
Все калоги внутри temp будут иметь права drwxr-x---
Можно использовать и буквенное обозначение прав доступа. Для этого используются следующие буквы:
u - user (смена прав для владельца файла)
g - group (смена прав для пользователь входящих в одну группу с владельцем файла)
o - other (смена прав для всех остальных пользователей)
a - all (смена прав для всех сразу)
Вместе с этими буквами используются знаки знаки "+" (плюс, если хотим открыть доступ) и "-" (минус, если хотим закрыть доступ).
Если мы хотим запретить запись файла всем без исключения пользователям то пишем так (a-w всем выключить запись):
chmod a-w test.py
Вернуть доступ для записи файла всем категориям
chmod a+w test.py
Ну и "вишенка на торте" - можно сменить владельца файла.
Например будучи под "рутом" я создал файл, а теперь мне нужно чтобы пользователь eugene стал его владельцем, для этого используется команда:
chown <новый владелец> <имя файла>
но сделать это можно только с использованием прав "суперпользователя"
sudo chown eugene chown_change.txt
После чего пользователь eugene становится владельцем файла chown_change.txt
Обратите внимание, команда chown изменила пользователя на eugene, но оставила группу суперпользователя (root). Чтобы изменить и пользователя, и группу на eugene, нужно ввести следующее:
chown eugene:eugene chown_change.txt
(тут уже использование sudo не нужно)
Как-то так. Надеюсь, вы, как и я, поняли смысл всех этих rwx и как они меняются. Всем всех благ.