Первое, что я хотел бы рассмотреть, это каким образом можно просмотреть права доступа на файлы и каталоги.
Просмотр прав доступа на файлы и каталоги в Linux.
Прежде, чем двигаться далее, советую прочитать первую статью (если Вы этого не сделали, конечно) данного цикла про навигацию в терминале.
Для статьи я создал несколько файлов и каталогов в домашней папке.
Для того, чтобы просмотреть права доступа на файлы и каталоги в нужной директории, переходим в неё и выполняем команду:
У нас будет выведено следующее сообщение в терминале:
Как видно, для наших файлов и каталогов вывелась подробная информация.
Слева отображены права доступа на файл и директорию вида:
drwxrwxr-x
Чуть ниже подробно разберём это "непонятную" надпись, а пока двигаемся дальше.
Для того, чтобы просмотреть права доступа на определенный файл, нужно ввести следующую команду:
Вот как это выглядит:
Для того, чтобы просмотреть права доступа на определенный каталог, вводим следующую команду:
Выглядит это следующим образом:
Для того, чтобы просмотреть права доступа на директории и файлы рекурсивно внутри каталога, нужно ввести следующую команду, перейдя в нужный каталог:
либо ввести каталог:
Выглядит это следующим образом:
Расшифровка "символьной формы" прав доступа на каталоги и файлы в Linux.
После выполнения команд из первого пункта у нас выдавалось сообщение вида:
drwxrwxr-x
Будем использовать в качестве примера в этом пункте.
Это символьная форма прав доступа в Linux. Давайте разберем её подробно.
Данное сообщение состоит из 10 символов.
Первый символ обозначает тип данных.
Данный символ может быть следующим:
В большинстве случаев это будет:
- | обычный файл; |
d | директория/каталог/папка (directory); |
l | символическая ссылка (link). |
Но может быть следующим:
b | файл блочного устройства (block); |
c | файл символьного устройства; |
s | доменное гнездо (socket); |
p | именованный канал (pipe). |
Следовательно, в нашем случае это директория (каталог, папка).
Следующие 9 символов обозначают права доступа.
rwxrwxr-x
Данные 9 символов состоят из трех групп:
rwx rwx r-x
-
Первая группа из трех символов обозначает права доступа владельца файла или директории (u - user).
-
Вторая группа из трех символов обозначает права доступа на файл или директорию для системной группы (g - group).
-
Третья группа из трех символов обозначает права доступа на файл или директорию для всех остальных (o - other).
У этих трёх групп одинаковая комбинация символов, то есть:
rwx
Что же они обозначают?
Очень легко запомнить:
r | read, то есть, право доступа на чтение файла или директории. |
w | write, то есть, право на изменение и удаление файла или директории. |
x | eXecute, то есть, право на запуск файла как программы или вход в директорию. |
Всегда располагаются в таком порядке:
rwx
Если вместо какого-то символа идёт тире (минус), к примеру:
r-x
то это значит, что отсутствуют права на изменение и удаление файла или директории.
Или так:
r--
то это обозначает, что отсутствуют права на изменение и запуск файла или директории. Доступен только просмотр.
Таким образом, из нашего примера:
drwxrwxr-x
это сообщение обозначает, что является директорией, у владельца и у группы есть полные права доступа - на чтение, изменение, удаление, запуск (вход внутрь каталога), у всех остальных есть только права на чтение и запуск(вход внутрь каталога).
Как видите, ничего сложного нет.
Определение владельца и группы файла или директории.
Но у Вас может возникнуть закономерный вопрос о том, а как же узнать, кто именно является владельцем файла и какая группа?
Те же самые команды из первого пункта:
Как видно на скриншоте:
- в третей колонке идет имя владельца файла;
- в четвертой колонке идет название группы.
Следовательно, если пользователь не владелец файла, но входит в группу, то у него будут права на файл или директорию этой самой группы.
Небольшое отступление.
В Nautilus (файловом менеджере Ubuntu), можно нажать правой кнопкой мыши на файле, открыть свойства, перейти на вкладку "Права" и увидеть:
Здесь в графическом режиме видны права доступа, владелец и группа. И если Вы являетесь владельцем файла или директории, то Вы можете изменять права доступа.
Подробно разобрали просмотр прав доступа на файлы и каталоги Linux.
Теперь приступим к их изменению в терминале.
Изменение прав доступа на файлы и каталоги в Linux в символьном режиме.
Для того, чтобы изменить права доступа, воспользуйтесь следующим шаблоном:
Вместо persons нужно использовать совокупность символов или один из:
u | user, пользователь, владелец файла или директории. |
g | group, группа файла или директории. |
o | other, все другие. |
a | all, то есть, все вместе взятые - владелец, группа и все остальные. |
Этот символ обозначает субъект, которому будут назначены, удалены или изменены права.
Вместо Operator, может быть один из следующих символов:
+ | "плюс", добавляем нужные права. |
- | "минус", удаляем нужные права. |
= | "равно", устанавливаем нужные права. |
Этот символ обозначает оператор, от которого зависит, будут ли добавлены, удалены или установлены нужные права, которые последуют за оператором.
Вместо Rights перечисляем символы прав доступа:
r | read - чтение. |
w | write - запись. |
x | eXecute - выполнение. |
Важно замечание.
Здесь идёт цепочка из трёх перечисленных символов, но в определённом порядке rwx. Но при этом, не нужно указывать тире для пропуска. Примеры: rwx, rw, wx, rx, r, w, x.
Вместо имя_файла_или_имя_директории указываем путь к файлу или директории.
Для рекурсивного изменения прав в каталоге используется параметр -R.
То есть, если нужно изменить права всех файлов и папок внутри указанной нами директории, то после chmod просто указываем параметр -R. Выглядит это следующим образом:
Важно.
Если Вы не являетесь владельцем файла или директории или у вас нет прав на изменение файла, то нужно будет использовать права суперпользователя:
Приступим к практике. Разберём примеры.
1. Убираем права для группы на изменение файла:
2. Убираем права на чтение у группы и всех остальных:
3. Добавим для группы права на чтение и изменение:
4. Изменим рекурсивно права на файлы и директории внутри нужной директории. Отменим, к примеру, все права у остальных пользователей и групп:
Дополнительно.
Вы, наверное, зачастую видели команду:
Это значит, что мы даём права на выполнение данного файла как программы всем.
Это аналогично следующим командам:
То есть, если мы хотим изменить права файл или директорию для всех, мы можем не писать кому. Просто оператор и права.
Изменение прав доступа на файлы и каталоги в абсолютном режиме.
Есть более простой способ изменение прав доступа на файлы и каталоги в Linux. Это изменение прав доступа в числовом представлении.
Думаю, что многие из вас видели на форумах или сайтах о Linux советы по изменению прав, вида:
Вы их выполняли в терминале. А многие из вас задумывались, что это за "магические цифры". Но на самом деле никакая это не магия.
Давайте разберем, что же значат эти цифры.
Итак, у нас есть комбинация прав доступа на директорию:
rwxrwxr-x
А теперь делим на группы:
rwx rwx r-x
Теперь преобразуем в двоичном виде наши права доступа:
- если есть символ, то это 1.
- если тире (пропуск), то это 0.
Следовательно, наша комбинация будет выглядеть следующим образом:
111 111 101
А теперь переведем из двоичной в восьмеричную систему исчисления:
7 7 5
Вот и получили наше "магическое" число 775.
Более проще запомнить:
r | это 4 |
w | это 2 |
x | это 1 |
Каждая цифра обозначает определенную группу:
- Первая цифра - права для владельца,
- вторая цифра - права для группы,
- третья цифра - права для остальных.
Просто прибавляем цифры. К примеру, нам нужно чтение r и изменение w. Прибавляем 4+2, получаем 6.
Если хотим выдать полные права только владельцу файла, а остальным убрать все:
Вот так меняются права в абсолютном (числовом) режиме.
Изменение владельца и группы файла или каталога.
Для изменения владельца и группы файла или каталога есть команда chown.
Используется следующий шаблон выполнения данной команды chown:
Если хотим изменить только группу, то шаблон следующий:
Если хотим изменить только владельца, то шаблон следующий:
Если рекурсивно:
В принципе, ничего сложного.
Чтобы узнать имя текущего пользователя, используется команда:
Чтобы узнать в каких группах состоит текущий пользователь:
Получить список пользователей:
Получить группы конкретного пользователя (вместо user_name ввести имя пользователя):
Давайте сменим владельца у файла на root:
Вот таким образом меняются владельцы и группы.