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

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

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

Цикл статей о терминале.

  1. Терминал Linux. Команды навигации в терминале.
  2. Терминал Linux. Создание, удаление, копирование, перемещение, переименование файлов и директорий.
  3. Терминал Linux. Как сохранить в файл вывод терминала.
  4. Терминал Linux. Команды поиска файлов и директорий.
  5. Терминал Linux. Команды просмотра текстовых файлов.
  6. Терминал Linux. Права доступа к каталогам и файлам в Linux, команды chmod и chown.

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

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

Прежде чем двигаться далее, советую прочитать первую статью (если Вы этого не сделали, конечно) данного цикла про навигацию в терминале.

Для статьи я создал несколько файлов и каталогов в домашней папке.

Для того, чтобы просмотреть права доступа на файлы и каталоги в нужной директории, переходим в неё и выполняем команду:

ls -l

У нас будет выведено следующее сообщение в терминале:

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

Слева отображены права доступа на файл и директорию вида:

drwxrwxr-x

Чуть ниже подробно разберём это "непонятную" надпись, а пока двигаемся дальше.

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

ls -l имя_нужного_файла

Вот как это выглядит:

Для того, чтобы просмотреть права доступа на определенный каталог, вводим следующую команду:

ls -l имя_нужной_директории

Выглядит это следующим образом:

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

ls -Rl

либо ввести каталог:

ls -Rl имя_нужной_директории

Выглядит это следующим образом:

Расшифровка "символьной формы" прав доступа на каталоги и файлы в 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

Как видно на скриншоте:

  • в третей колонке идет имя владельца файла;
  • в четвертой колонке идет название группы.

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

Небольшое отступление.

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

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

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

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

Для того, чтобы изменить права доступа, воспользуйтесь следующим шаблоном:

chmod personsOperatorRights имя_файла_или_имя_директории

Вместо 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. Выглядит это следующим образом:

chmod -R personsOperatorRights имя_директории

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

sudo chmod personsOperatorRights имя_файла_или_имя_директории

Приступим к практике. Разберём примеры.

1) Убираем права для группы на изменение файла:

chmod g-w file1

2) Убираем права на чтение у группы и всех остальных:

chmod go-r file1

3) Добавим для группы права на чтение и изменение:

chmod g+rw file1

4) Изменим рекурсивно права на файлы и директории внутри нужной директории. Отменим, к примеру, все права у остальных пользователей и групп:

chmod -R o-rwx ~/linuxrussia.com/

Дополнительно.

Вы, наверное, зачастую видели команду:

chmod +x имя_файла.sh

Это значит, что мы даём права на выполнение данного файла как программы всем.

Это аналогично следующим командам:

chmod ugo+x имя_файла.sh
chmod a+x имя_файла.sh

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

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

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

Думаю, что многие из вас видели на форумах или сайтах о Linux советы по изменению прав, вида:

chmod 755 имя_файла

Вы их выполняли в терминале. А многие из вас задумывались, что это за "магические цифры". Но на самом деле никакая это не магия.

Давайте разберем, что же значат эти цифры.

Итак, у нас есть комбинация прав доступа на директорию:

rwxrwxr-x

А теперь делим на группы:

rwx rwx r-x

Теперь преобразуем в двоичном виде наши права доступа:

  • если есть символ, то это 1.
  • если тире (пропуск), то это 0.

Следовательно, наша комбинация будет выглядеть следующим образом:

111 111 101

А теперь переведем из двоичной в восьмеричную систему исчисления:

7 7 5

Вот и получили наше "магическое" число 755.

Более проще запомнить:

r это 4
w это 2
x  это 1

Каждая цифра обозначает определенную группу:

Первая цифра - права для владельца,
вторая цифра - права для группы,
третья цифра - права для остальных.

Просто прибавляем цифры. К примеру, нам нужно чтение r и изменение w. Прибавляем 4+2, получаем 6.

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

chmod 700 имя_файла

Вот так меняются права в абсолютном (числовом) режиме.

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

Для изменения владельца и группы файла или каталога есть команда chown.

Используется следующий шаблон выполнения данной команды chown:

sudo chown имя_нового_владельца:имя_новой_группы имя_файла_или_директории

Если хотим изменить только группу, то шаблон следующий:

sudo chown :имя_новой_группы имя_файла_или_директории

Если хотим изменить только владельца, то шаблон следующий:

sudo chown имя_нового_владельца имя_файла_или_директории

Если рекурсивно:

sudo chown -R имя_нового_владельца:имя_новой_группы имя_директории

В принципе ничего сложного.

Чтобы узнать имя текущего пользователя, используется команда:

whoami

Чтобы узнать в каких группах состоит текущий пользователь:

groups

Получить список пользователей:

users

Получить группы конкретного пользователя (вместо user_name ввести имя пользователя):

groups user_name

Давайте сменим владельца у файла на root:

sudo chown root file1

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

  • https://plus.google.com/118166993767960656676 Did Mazay

    Отлично, давно ждал такого плана статью 🙂

  • Владимир Гулый

    Отличная статья! Все написано понятно.