Терминал Linux. 6 статья - права доступа к каталогам и файлам в Linux, команды chmod и chown.

В данной статье хочу разобрать права доступа к каталогам и файлам в Linux. А также расскажу о том, как можно изменить права и владельца на файлы и директории в Linux.

Комментирование приветствуется.

Цикл статей о терминале:
  1. Терминал Linux. 1 статья - команды навигации в терминале.

  2. Терминал Linux. 2 статья - команда поиска файлов и директорий в терминале

  3. Терминал Linux. 3 статья - команды поиска файлов (продолжение)

  4. Терминал Linux. 4 статья - создание, удаление, форматирование, монтирование разделов жесткого диска

  5. Терминал Linux. 5 статья - cоздание aliases (псевдонимов) в Ubuntu

  6. Терминал Linux. 6 статья - права доступа к каталогам и файлам в Linux, команды chmod и chown.

  7. Терминал Linux. 7 статья - доступ к sudo без ввода пароля.


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

1. Просмотр прав доступа на файлы и каталоги в Linux.

Прежде чем читать далее, советую прочитать первую статью (если Вы этого не сделали конечно) данного цикла про навигацию в терминале.
Для статьи я создал несколько файлов и каталогов в домашней папке.
Для того, чтобы просмотреть права доступа на файлы и каталоги в нужной директории, переходим в неё и выполняем команду: ls -l У нас будет выведено следующее сообщение в терминале:


Как видно, для наших файлов и каталогов вывелась подробная информация.
Слева отображены права доступа на файл и директорию вида:
drwxrwxr-x
Чуть ниже подробно разберу это непонятную надпись, а пока двигаемся дальше.
Для того, чтобы просмотреть права доступа на определенный файл, нужно ввести следующую команду: ls -l имя_нужного_файла Вот как это выглядит:


Для того, чтобы просмотреть права доступа на определенный каталог, вводим следующую команду: ls -l имя_нужной_директории Выглядит это следующим образом:


Для того, чтобы просмотреть права доступа на директории и файлы рекурсивно внутри каталога, нужно ввести следующую команду, перейдя в нужный каталог: ls -Rl либо ввести каталог: ls -Rl имя_нужной_директории Выглядит это следующим образом:


2. Расшифровка "символьной формы" прав доступа на каталоги и файлы в 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
это сообщение обозначает, что это является директорией, у владельца и у группы есть полные права доступа - на чтение, изменение, удаление, запуск, у всех остальных есть только права на чтение и запуск.

Как видите, ничего сложного нет.

Но у Вас может возникнуть вопрос о том, а как же узнать, кто именно является владельцем файла и какая группа?

Теже самые команды
ls -l 
из первого пункта:


Как видно на скриншоте:
в третей колонке идет имя владельца файла,
в четвертой колонке идет название группы.

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

Небольшое отсупление.
В Наутилусе (файловом менеджере Ubuntu), можно нажать правой кнопкой мыши на файле и открыть свойства, перейти на вкладку Права, можно увидеть:


Здесь видны в графическом режиме права доступа, владелец и группа.
Если Вы являетесь владельцем файла или директории, то Вы можете изменять права доступа.

Подробно разобрали просмотр прав доступа на файлы и каталоги Linux.
Теперь приступим к их изменению в терминале.

3.1. Изменение прав доступа на файлы и каталоги в Linux в символьном режиме.

Для того, чтобы изменить права доступа, воспользуйтесь следующим шаблоном:
chmod personOperatorRights имя_файла
вместо person нужно использовать один из следующих символов:
u - user, пользователь, владелец файла или директории.
g - group, группа файла или директории.
o - other, все другие.
a - all, то есть все вместе взятые, и владелей и группа, и все остальные.
Этот символ обозначает субъект, которому будут назначены или изменены права.

вместо Operator, может быть один из следующих символов:
+  - "плюс" добавляем нужные права
-  -  "минус" удаляем нужные права
=  - "равно" устанавливаем нужные права
Этот символ обозначает оператор, от которого зависит будут ли добавлены, удалены или установлены нужные права, которые последуют за оператором

вместо Rights перечисляем символы прав доступа:
r -read - чтение
w - write - запись
x - eXecute - выполнение
Важно замечание. Здесь идет перечисление из трех перечисленных символов.
Но в определенном порядке rwx, но не нужно указывать тире, то есть просто пропускаем символ. Примеры: rw, wx, rx, r, w, x.

имя_файла - это путь к файлу или директории.

Кроме того, нужный параметр -R, который обозначает рекурсивность.
То есть если нужно изменить права всех файлов и директорий внутри нужной нам директории, нужно после chmod установить параметр -R. Выглядит это следующим образом:
chmod -R personOperatorRights имя_файла
Важное замечание!
Если Вы не являетесь владельцем файла или директории, или у вас нет прав на изменение файла, то нужно будет использовать права суперпользователя: sudo chmod
Приступим к практике. Разберем примеры.
1). Убираем права для группы на изменение файла: chmod g-w file1 Выглядит это следующим образом:


2). Убираем права на чтение у группы и всех остальных: chmod go-r file1

3). Добавим для группы права на чтение и изменение: chmod g+rw file1

Вот таким образом можно менять права на файлы.

4). Вы, наверное, зачастую видели команду: chmod +x имя_файла.sh Это значит, что мы даём права на выполнение всем для данного файла.
Эта команда аналогична командам: chmod ugo+x имя_файла.sh
chmod a+x имя_файла.sh
То есть, если мы хотим добавить или установить права для всех на данный файл или директорию, мы можем не писать кому. Просто оператор и права.

5). Изменим рекурсивно права на файлы и директории внутри нужно директории, отменим к примеру все права у остальных пользователей и групп: chmod -R o-rwx ~/linuxrussia.com/

3.2. Изменение прав доступа на файлы и каталоги в абсолютном режиме.

Есть более простой способ изменение прав доступа на файлы и каталоги в Linux.
Это изменение прав доступа в числовом представлении.

Думаю, что многие из Вас видели на форумах или сайтах о Linux советы по изменению прав, вида:
chmod 755 имя_файла
Вы их выполняли и многие из Вас думали, что это магические цифры.
Но на самом деле это не так.
Давайте разберем, что же значат эти цифры.
Итак, у нас есть комбинация прав доступа на директорию:
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.

Следовательно если хотим выдать права только владельцу файла полные права, а остальным убрать все: chmod 700 имя_файла

Вот так меняются права.

4. Изменение владельца и группы файла или каталога.

Для изменения владельца или группы у файла или каталога есть команда chown.
Используется следующий шаблон выполнения данной команды: sudo chown имя_нового_владельца:имя_новой_группы имя_файла_или_директории Стоит заметить, что если хотим изменить только группу, то шаблон следующий: sudo chown :имя_новой_группы имя_файла_или_директории Если хотим изменить только владельца, то шаблон следущий: sudo chown имя_нового_владельца имя_файла_или_директории Ну и соответственно рекурсивно: sudo chown -R имя_нового_владельца:имя_новой_группы имя_файла_или_директории В принципе ничего сложного.

Чтобы узнать имя текущего пользователя, используется команда: whoami Чтобы узнать в каких группах состоит текущий пользователь: groups
Давайте сменим владельца у файла на root: sudo chown root file1

Вот таким образом меняются владельцы и группы.

Вот и всё, что я хотел рассказать в данной статье.

Поделиться:

Если у Вас возникли вопросы.

Приглашаю задавать их на сервисе вопросов и ответов: Ask LinuxRussia.com.
Там Ваши вопросы не потеряются и Вы быстрее получите ответ, в отличие от комментариев.

8 коммент. :

  1. Супер. Просто и понятно. Спасибо за статью. Сохраняю на будущее.

    ОтветитьУдалить
  2. Да, побольше бы таких статеек, глядишь и вендокапец скорее придёт.

    ОтветитьУдалить
  3. Спасибо большое!Просто и понятно.Уже года три использую Ubuntu, но н е мог понять числовое представление прав. А тут все как на ладони. Еще раз спасибо!

    ОтветитьУдалить
  4. Большое спасибо, очень полезная статья!

    ОтветитьУдалить
  5. Добрый день! Не могу поменять права к папке usr. ls -l Что я делаю не так?

    ОтветитьУдалить
  6. Спасибо полезная инфа и понятно !!!

    ОтветитьУдалить