Найти тему
Движение-Жизнь

Владельцы и права доступа к файлам в Linux

Во время работы с Linux вы, скорее всего, успели получить сообщение об ошибке Permission denied (Отказано в доступе).

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

Скажем, я под sudo создал файл, а потом под простым пользователем пытаюсь его отредактировать и текстовый редактор меня сразу предупреждает:

-2

Путем нехитрых манипуляций, командой ls -ld, я вижу что файл принадлежит "руту", и группа "рутовых" пользователей. Любые изменения с этим файлом может делать только "root"!

-3

Разберемся со всеми этими 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 не нужно)

-4

Как-то так. Надеюсь, вы, как и я, поняли смысл всех этих rwx и как они меняются. Всем всех благ.