Терминал 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

Что же они обозначают?
Очень легко запомнить:
rread, то есть право доступа на чтение файла или директории.
wwrite, то есть право на изменение и удаление файла или директории.
xeXecute, то есть право на запуск файла как программы или вход в директорию.
Они идут обязательно в таком порядке:

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

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

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

  • Анонимный

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

  • https://www.blogger.com/profile/01471537301710916655 Георгий Ютьюбов

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

  • Анонимный

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

  • https://www.blogger.com/profile/00865845114198842309 Edward Kobylyanets

    Спасибо за хорошие отзывы.

  • https://www.blogger.com/profile/00516583565368815603 Unknown

    Большое спасибо, очень полезная статья!

  • https://me.yahoo.com/a/gOUVvH0Pyd5xlIUpxiKZDggbdbGqGM1_ Lynn

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

    • https://www.blogger.com/profile/01471537301710916655 Георгий Ютьюбов

      А зачем вам это нужно?

  • https://www.blogger.com/profile/09684081302485577509 Unknown

    Спасибо полезная инфа и понятно !!!