Как сделать пользователя владельцем папки linux

Обновлено: 06.07.2024

По замыслу создателей, Linux-системы — это многопользовательские операционные системы, т.е. позволяющие нескольким пользователям работать с одной системой, не мешая друг другу. Но пользователи, совместно использующие доступ к файлам, рискуют раскрыть секретную информацию или даже потерять данные, если другие пользователи получат доступ к их файлам или каталогам. Чтобы решить эту проблему, в Linux добавили механизмы владения и прав доступа к файлам (или каталогам), чтобы обозначить, какие полномочия каждый пользователь имеет над определенным файлом (или каталогом).

Типы пользователей в Linux

Каждый файл и каталог в Linux имеет три категории пользователей:

Владелец — пользователь, создавший файл/каталог.

Группа — все пользователи, принадлежащие к некоторой заданной группе, будут иметь одинаковые разрешения группы на доступ к файлу. Предположим, у вас есть проект, в котором несколько человек требуют доступа к файлу. Вместо того, чтобы вручную назначать права доступа каждому пользователю, вы можете добавить их всех в одну группу и назначить права доступа группы к файлу таким образом, чтобы только члены данной группы (и никто другой) могли читать или изменять файлы. Даже если вы единственный пользователь системы, вы все равно будете частью многих групп.

Остальные/Другие (все остальные пользователи) — любой другой пользователь, имеющий доступ к файлу. Он не является владельцем файла, и не принадлежит к группе, которая могла бы владеть файлом.

Другими словами, Владелец — это один пользователь, Группа — это совокупность пользователей, а Остальные — совокупность из всех остальных пользователей системы.

Права доступа/Разрешения

Каждый файл и каталог в Linux имеет следующие три типы разрешений для всех трех вышеописанных категорий пользователей:

Чтение/Просмотр (Read) — дает право открывать и читать файл. Разрешение на чтение каталога дает возможность просматривать его содержимое.

Запись/Изменение (Write) — дает право изменять содержимое файла. Разрешение на запись в каталог дает право добавлять, удалять и переименовывать файлы, хранящиеся в каталоге. Рассмотрим сценарий, в котором у вас есть разрешение на запись в файл, но нет разрешения на запись в каталог, где хранится файл. Вы сможете изменить содержимое файла, но вы не сможете переименовать, переместить или удалить файл из каталога.

Выполнение (eXecute) — в Linux вы не сможете запустить программу, если не задано разрешение на выполнение, но вы все равно сможете видеть/изменять программный код (при условии, что установлены разрешения на чтение и запись), но не запускать его.

Пример на практике

Рассмотрим следующий пример:


Чтобы изменить права доступа к файлу, пользователь может открыть выпадающее меню и для каждой категории пользователей выбрать нужное разрешение. Кроме того, вы можете сделать файл Исполняемым, позволяя ему работать как программа, установив флажок "Является выполняемым" .

Примечание: Команда ls используется для вывода содержимого каталогов и информации о файлах. Ключ –l используется для вывода детальной информации о правах доступа, владельце, размере файла и пр.

Если применить команду ls -l к нашему файлу Адреса.txt, то мы будем наблюдать такой вывод:


Выходные данные содержат следующую информацию:


Тип — обозначает тип объекта. Это может быть обычный файл ( - ), каталог ( d ) или ссылка ( l ).

Разрешения (права доступа) — в этом поле отображается набор разрешений для файла, о которых мы поговорим ниже.

Жесткая ссылка — отображает количество ссылок, имеющихся у файла. По умолчанию устанавливается значение 1 .

Владелец — имя пользователя, который владеет файлом. Часто (но не всегда) совпадает с именем его создателя.

Группа — группа, имеющая доступ к файлу. Одновременно владеть файлом может только одна группа.

Размер — размер файла в байтах.

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

Имя файла.

Информация о правах доступа к файлу сгруппирована в строку символов, перед которой стоит - . При этом каждая буква задает определенное разрешение, а именно:

r (read) — разрешение на чтение/просмотр файла;

w (write) — разрешение на запись/изменение файла;

x (execute) — разрешение на выполнение файла;

– — нет набора разрешений.

Пользователи, имеющие разрешение на Чтение, могут видеть содержимое файла (или файлов в каталоге), однако они не могут изменить его (или добавить/удалить файлы в каталоге). С другой стороны, те, у кого есть права на Запись, могут редактировать (добавлять и удалять) файлы. Наконец, возможность Выполнения означает, что пользователь может запустить файл. Эта опция в основном используется для запуска скриптов.

Разрешения всегда идут именно в таком порядке, то есть rwx . А далее, они устанавливаются для всех трех категорий пользователей в порядке Владелец, Группа и Остальные/Другие:


Итак, если вы вооружитесь вышеприведенной картинкой и посмотрите на вывод команды ls –l , то сможете сказать следующие вещи о правах доступа к файлу Адреса.txt:

-rw-r--r-- 1 diego diego 2 фев 17 21:15 /home/diego/Документы/Адреса.txt

Владелец diego имеет права на чтение и запись в файл.

Группа diego имеет права только на чтение.

Остальным пользователям (всем, кто имеет доступ к системе) также доступно только чтение файла. Вам не нужно знать кто этот другой пользователь, потому что к другому относятся все остальные пользователи.

Теперь попробуем применить ту же самую команду ls -l , но к другому файлу:

diego@debian:~$ ls -l /bin/ping
-rwxr-xr-x 1 root root 77432 фев 2 20:49 /bin/ping

Владельцем файла является пользователь root, который имеет права доступа на чтение, изменение и выполнение файла ( rwx ).

Все члены группы root имеют права на чтение и выполнение файла ( r-x ).

Остальные пользователи тоже имеют права на чтение и выполнение файла ( r-x ).

Замечу, что один пользователь может быть членом нескольких групп, но только основная группа пользователя может быть назначена файлу. Основную группу пользователя можно найти с помощью команды id , например, id -gn . Оставьте имя_пользователя пустым, если вы хотите получить информацию о своей собственной основной группе.

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

Изменение прав доступа. Команда chmod

Синтаксис команды chmod следующий:

chmod [разрешения] [имя файла]

Существует два способа использования команды chmod : символьный и числовой.

Использование команды chmod в символьном режиме

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

o — остальные пользователи;

a — для всех трех категорий (Владелец + Группа + Остальные).

А также используются следующие математические символы:

= — переопределение существующих разрешений новым значением.

Теперь, когда вы знаете, как это работает, давайте попробуем использовать команду chmod в символьном режиме и установим новые разрешения для ранее упомянутого файла Адреса.txt следующим образом:

чтение, запись и выполнение для Владельца;

чтение и запись для членов Группы;

чтение для Остальных пользователей.

chmod u=rwx,g=rw,o=r /home/diego/Документы/Адреса.txt

В результате мы получаем:

diego@debian:~$ chmod u=rwx,g=rw,o=r /home/diego/Документы/Адреса.txt
diego@debian:~$ ls -la /home/diego/Документы/Адреса.txt
-rwxrw-r-- 1 diego diego 2 фев 17 21:15 /home/diego/Документы/Адреса.txt

Как видите, права доступа к файлу изменились с -rw-r--r-- на -rwxrw-r-- , что нам и требовалось.

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

chmod o-r /home/diego/Документы/Адреса.txt

diego@debian:~$ chmod o-r /home/diego/Документы/Адреса.txt
diego@debian:~$ ls -la /home/diego/Документы/Адреса.txt
-rwxrw---- 1 diego diego 2 фев 17 21:15 /home/diego/Документы/Адреса.txt

Права доступа к файлу изменились с -rwxrw-r-- на -rwxrw---- .

Подумав, мы решаем дать полные права (за исключением права на выполнение) абсолютно всем пользователям системы, и выполняем команду:

diego@debian:~$ chmod a+rw-x /home/diego/Документы/Адреса.txt

diego@debian:~$ chmod a+rw-x /home/diego/Документы/Адреса.txt
diego@debian:~$ ls -la /home/diego/Документы/Адреса.txt
-rw-rw-rw- 1 diego diego 2 фев 17 21:15 /home/diego/Документы/Адреса.txt

Права доступа к файлу изменились с -rwxrw---- на -rw-rw-rw- . Все пользователи могут читать и изменять наш файл, но ни у кого нет права на его выполнение.

Использование команды chmod в числовом режиме

Другой способ указать права доступа к файлу — применить команду chmod в числовом режиме. В этом режиме каждое разрешение файла представлено некоторым числом (в восьмеричной системе счисления):

r (чтение/просмотр) = 4

w (запись/изменение) = 2

x (выполнение) = 1

– (не задано) = 0

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

Число Тип разрешения Символ
0 Нет разрешения −−−
1 Выполнение −−x
2 Запись −w−
3 (2+1) Запись + Выполнение −wx
4 Чтение r−−
5 (4+1) Чтение + Выполнение r−x
6 (4+2) Чтение + Запись rw−
7 (4+2+1) Чтение + Запись + Выполнение rwx

Поскольку вы должны определить разрешения для каждой категории пользователей (Владелец, Группа, Остальные), команда будет включать в себя три числа (каждое из которых представляет собой сумму привилегий).

В качестве примера, давайте посмотрим на наш файл Адреса.txt, права которого, я напомню, мы сконфигурировали (в символьном режиме) с помощью команды:

chmod u=rwx,g=rw,o=r /home/diego/Документы/Адреса.txt

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

chmod 764 /home/diego/Документы/Адреса.txt

Теперь поменяем разрешения файла так, чтобы Владелец мог читать и писать, Группа — только читать, а у Остальных — вообще не было прав на доступ. Судя по вышеприведенной таблице, для Владельца числовое представление прав доступа соответствует числу 6 ( rw- ), для Группы — числу 4 ( r-- ), а для Остальных — 0 ( --- ). В совокупности должно получиться 640 ( rw-r----- ):

diego@debian:~$ chmod 640 /home/diego/Документы/Адреса.txt

diego@debian:~$ chmod 640 /home/diego/Документы/Адреса.txt
diego@debian:~$ ls -la /home/diego/Документы/Адреса.txt
-rw-r----- 1 diego diego 2 фев 17 21:15 /home/diego/Документы/Адреса.txt

Как видите, права изменились с -rwxrwr-- на -rw-r----- , этого мы и хотели.

Смена владельца и группы

Помимо изменения прав доступа к файлам, вы можете столкнуться с ситуацией необходимости изменения владельца файла или даже всей группы. Выполнение любой из этих задач требует от вас наличие привилегий суперпользователя (root). Для этого я буду применять утилиту sudo .

chown [имя_пользователя] [имя_файла]

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

chown [имя_пользователь]:[группа] [имя_файла]

Если вы просто хотите изменить группу, а владельца оставить прежним, то синтаксис примет вид:

chown :[группа] [имя_файла]

Или же используйте команду chgrp (сокр. от «change group«), специально применяемую для изменения владельца группы файла или каталога:

chgrp [группа] [имя_файла]

В качестве тренировки давайте сменим владельца и группу файла Адреса.txt на пользователя root и группу root (при этом вам могут понадобиться права суперпользователя):

diego@debian:~$ sudo chown root:root /home/diego/Документы/Адреса.txt
[sudo] пароль для diego:
diego@debian:~$ ls -la /home/diego/Документы/Адреса.txt
-rw-r----- 1 root root 2 фев 17 21:15 /home/diego/Документы/Адреса.txt
diego@debian:~$

Как вы можете видеть, владелец и группа файла сменились с diego:diego на root:root .

Заметьте, что мне пришлось использовать sudo с chown . Это потому, что здесь задействован пользователь root, и чтобы иметь с ним дело, вам нужны права суперпользователя.

Есть ли приоритет в правах доступа к файлам?

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

----r--rw- 1 diego coolgroup 2 фев 17 21:15 /home/diego/Документы/Адреса.txt

Теперь, если пользователь diego попытается прочитать файл с помощью команды cat или less , сможет ли он это сделать? Ответ — нет, потому что у него нет разрешения на чтение.

Но как же так? Ведь пользователь diego является частью группы coolgroup, а группа имеет доступ на чтение. И даже все другие пользователи имеет разрешение на чтение и запись! Это должно означать, что каждый (включая пользователя diego) может читать и изменять файл, не так ли? Неправильно!

В Linux-системах приоритет считывания прав доступа отдается сначала Владельцу, затем Группе, а уже после Остальным. Система определяет, кто инициировал процесс ( cat или less в нашем примере). Если пользователь, инициировавший процесс, также является Владельцем файла, то считываются биты разрешений для Владельца.

Если процесс инициировал не Владелец файла, то система проверяет Группу. Если пользователь, инициировавший процесс, находится в той же Группе, что и Группа-владелец файла, то считываются биты разрешений для Группы.

Если же инициировавший процесс пользователь не является Владельцем файла и не входит в соответствующую Группу, то для него устанавливаются биты разрешений как для Остальных пользователей.

Подсказки

Файл /etc/group содержит все группы, определенные в системе.

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


Вы можете использовать команду newgrp для работы в качестве члена группы отличной от вашей заданной по умолчанию группы:


Две группы не могут владеть одним и тем же файлом.

В Linux нет вложенных групп. Одна группа не может быть подгруппой другой.

Подводя итоги

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

В Linux-системах различают три категории пользователей, а именно: Владелец, Группа и Остальные/Другие.

Права доступа к файлам подразделяются на права Чтения/Просмотра, Записи/Изменения и Выполнения, обозначаемые буквами r , w и x .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Будем использовать в качестве примера в этом пункте.

Это символьная форма прав доступа в Linux. Давайте разберем её подробно.

Первый символ обозначает тип данных.

Данный символ может быть следующим:

В большинстве случаев это будет:

- обычный файл;
d директория/каталог/папка (directory);
l символическая ссылка (link).

Но может быть следующим:

b файл блочного устройства (block);
c файл символьного устройства;
s доменное гнездо (socket);
p именованный канал (pipe).

Следовательно, в нашем случае это директория (каталог, папка).

Следующие 9 символов обозначают права доступа.

Данные 9 символов состоят из трех групп:

  • Первая группа из трех символов обозначает права доступа владельца файла или директории (u - user).
  • Вторая группа из трех символов обозначает права доступа на файл или директорию для системной группы (g - group).
  • Третья группа из трех символов обозначает права доступа на файл или директорию для всех остальных (o - other).

У этих трёх групп одинаковая комбинация символов, то есть:

Что же они обозначают?

Очень легко запомнить:

r read, то есть, право доступа на чтение файла или директории.
w write, то есть, право на изменение и удаление файла или директории.
x eXecute, то есть, право на запуск файла как программы или вход в директорию.

Всегда располагаются в таком порядке:

Если вместо какого-то символа идёт тире (минус), к примеру:

то это значит, что отсутствуют права на изменение и удаление файла или директории.

то это обозначает, что отсутствуют права на изменение и запуск файла или директории. Доступен только просмотр.

Таким образом, из нашего примера:

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

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

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

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

Определение владельца и группы файла или директории

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

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

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

В 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 советы по изменению прав, вида:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как упоминалось и не раз, например, в → этой статье про права на файл, что в linux всё является файлом, а у файла есть владелец и группа. При работе с файлами и папками может потребоваться сменить владельца и/или группу. Например, при смене пользователя или его домашнего каталога. Или для того, чтобы заблокировать доступ пользователю к папке и файлам, лежащим в ней. Или наоборот, когда нужно дать права пользователю или группе пользователей в определённое место на диске.

Помощь по команде chown в linux

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

Как быстро поменять пользователя файла и/или папки в linux

Чтобы сократить время на ознакомление с той командой, сразу дам готовый рецепт того, как быстро поменять пользователя файла и/или папки в linux. Формат этой команды такой:

В первой строчке произойдёт смена пользователя на user , группы на group у файла /patch/filename .

Во второй строчке в примере выше использована дополнительная опция -R , которая означает рекурсивную обработку. То есть у папки /patch/foldername произойдёт смена владельца и группы, но этим дело не закончится, все папки и файлы, лежащие в этой директории также будут подвергнуты процессу смены владельца и группы. Рекурсия бывает очень удобна при глобальных изменениях в группой политики в системе.

Остальные опции команды chown не так часто востребованы и используются, поэтому пока не буду с ними разбираться.

Поскольку Linux (да и UNIX вообще) - многопользовательская OS, в ней существует система прав доступа к файлам, служащая для защиты файлов каждого пользователя от влияния других пользователей системы.

Владельцем файла становится юзер, который создал этот файл. Короче говоря, для файла все юзеры делятся на 3 типа: хозяин, или владелец, юзеры, состоящие в одной группе с владельцем, и все остальные юзеры. Для каждого типа - свои права. Учтите, что директории и все системные устройства в UNIX являются обычными файлами. Тот же самый /dev/fd0 - это не сам Floppy disk, а всего лишь файл, связанный с флопповодом. Поэтому, если root запретил юзеру доступ к этому файлу, тот не сможет использовать флопповод (так же обстоят дела с модемами, хардами и т.п.). Владельцем всех системных файлов является root. Он же имеет право забирать файлы у одного юзера и передавать их другому (менять владельца).

Изменить права доступа к файлу может либо его владелец, либо сам root. Делается это командой chmod. Существует две формы представления прав доступа: символьная и цифровая.

Символьная форма прав доступа

Если войти в любой каталог, где есть файлы, и набрать ls -l, то появится список всех файлов в этом каталоге и права доступа в символьной форме. Строка прав доступа состоит из 10 символов. Первый символ указывает на тип файла: d - директория, - - обычный файл. Три последующих - права доступа владельца к этому файлу. Если первый символ из этих трех - r, владелец имеет право читать этот файл, а если -, то не имеет. Следующие 2 символа - w - писать и x - запускать. Если вместо них стоит -, значит, владелец этого права не имеет. Еще 3 символа - права доступа группы, еще три - права всех остальных пользователей.

drwxrwxrwx - директория, к которой все имеют любые права доступа.

-rwxr--r-- - обычный файл, владелец может делать все, а остальные - только читать.

-r-------- - обычный файл, который владелец может только читать, а остальные пользователи не видят.

Важно заметить, что права доступа, которые имеет файл, зависят также от прав доступа к каталогу, в котором этот файл находится. Например, даже если файл имеет -rwxrwxrwx, другие пользователи не смогут до него добраться, если у них не будет прав на чтение и выполнение каталога, в котором находится файл. Например, если юзер захочет ограничить доступ ко всем своим файлам, он может просто изменить права доступа своего домашнего каталога /home/user на drwx------. Таким образом, никто другой не будет иметь доступ в его каталог, а следовательно посторонним будут недоступны и все файлы. Так что, пользователь может не заботиться об индивидуальной защите своих файлов. Другими словами, чтобы иметь доступ к файлу, вы должны иметь доступ ко всем каталогам, лежащим на пути от корня к этому файлу, а также разрешение на доступ собственно к этому файлу. Обычно пользователи UNIX весьма открыты всеми своими файлами. По умолчанию файлам устанавливается защита -rw-r--r--, которая позволяет другим пользователям читать файлы, но ни коим образом их не менять. Каталогам обычно устанавливаются права доступа drwxr-xr-x, что позволяет другим пользователям ходить с правами экскурсантов по вашим каталогам, но ничего в них не трогать и не записывать.

Но многие пользователи хотят держать других подальше от своих файлов. Установив права доступа файла -rw-------, вы никому не покажете этот файл и не дадите записать в него. Также хорошо закрывает файлы защита соответствующего каталога drwx------.

С правами доступа в символьной форме chmod работает так:

Кратко, вы выбираете из all (все), user (пользователь), group (группа) или other (другие). Далее указываете, либо вы добавляете права (+), либо лишаете прав (-). И наконец, вы указываете один или несколько режимов: read, write или execute.

Числовая форма прав доступа

  • 400 - владелец имеет право на чтение
  • 200 - владелец имеет право на запись
  • 100 - владелец имеет право на выполнение
  • 40 - группа имеет право на чтение
  • 20 - группа имеет право на запись
  • 10 - группа имеет право на выполнение
  • 4 - остальные имеют право на чтение
  • 2 - остальные имеют право на запись
  • 1 - остальные имеют право на выполнение

Теперь осталось только просуммировать числа, соответствующие тем правам доступа, которые мы хотим поставить файлу.

Примеры

Символьная форма

Дает всем пользователям право читать файл stuff.

То же самое, что и ранее (a - по умолчанию).

Лишает права на выполнение всех, кроме владельца.

Разрешает владельцу все (read, write и execute).

Запрещает все (read, write и execute) пользователям категории другие (other).

владелец может делать все, а остальные - только читать.

все имеют право только на чтение.

владелец может читать и выполнять, остальные - только выполнять.

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

Изменение владельца файла осуществляется командой chown, например:

Для передачи каталога надо вводить:

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

Для передачи каталога надо вводить:

FilePermissionsRu (последним исправлял пользователь ckimes 2017-09-02 05:31:46)

The material on this wiki is available under a free license, see Copyright / License for details
You can contribute to this wiki, see Wiki Guide for details

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

Основные правила управления доступом

Объекты (например, файлы и процессы) имеют владельцев. Владельцы обладают обширным (но необязательно неограниченным) контролем над своими объектами.

  • Вы являетесь владельцами новых объектов, создаваемых вами.
  • Пользователь root с особыми правами, известный как суперпользователь, может действовать как владелец любого объекта в системе.
  • Только суперпользователь может выполнять административные операции особого значения.

Владельцем файла всегда является один человек, тогда как в группу владельцев могут входить несколько пользователей. По традиции информация о группах хранилась в фай­ле /etc/group .

Основное

Пользователь - это любой кто пользуется компьютером.

Под каждого пользователя, создается свой каталог, пользователю назначается командная оболочка (командный интерпретатор, используемый в операционных системах семейства UNIX). Например: /bin/bash, /bin/zsh, /bin/sh и другие.

Каждому пользователю назначается идентификационный номер (User ID). Сокращенно номер обозначается как UID, является уникальным идентификатором пользователя. Операционная система отслеживает пользователя именно по UID, а не по их имени.

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

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

Помимо пользователей, существуют группы. Так же как и пользователь, группа обладает правам доступа к тем или иным каталогам, файлам, периферии. Для каждого файла определён не только пользователь, но и группа. Группы группируют пользователей для предоставления одинаковых полномочий на какие-либо действия.

Каждой группе назначается идентификационный номер (group ID). Сокращённо GID, является уникальный идентификатором группы. Принадлежность пользователя к группе устанавливается администратором.

Управление пользователями

Просмотр

Вся информация о пользователях хранится в файле /etc/passwd .

Каждый аккаунт занимает одну строку, в формате account:password:UID:GID:GECOS:directory:shell

  • account — имя пользователя.
  • password — зашифрованный пароль пользователя.
  • UID — идентификационный номер пользователя.
  • GID — идентификационный номер основной группы пользователя.
  • GECOS — необязательное поле, используемое для указания дополнительной информации о пользователе (например, полное имя пользователя).
  • directory — домашний каталог ($HOME) пользователя.
  • shell — командный интерпретатор пользователя (обычно /bin/sh).

Получение информации о пользователях

  • w – вывод информации (имя пользователя, рабочий терминал, время входа в систему, информацию о потребленных ресурсах CPU и имя запущенной программы) о всех вошедших в систему пользователях.
  • who – вывод информации (имя пользователя, рабочий терминал, время входа в систему) о всех вошедших в систему пользователях.
  • who am i или whoami или id – вывод вашего имени пользователя.
  • users – вывод имен пользователей, работающих в системе.
  • id – вывод о идентификаторах пользователя: его uid, имя_пользователя, gid и имя первичной группы и список групп в которых состоит пользователь
  • groups – вывод списка групп в которых состоит пользователь.

Добавление пользователя

Добавление пользователя осуществляется при помощи команды useradd.

sudo useradd vasyapupkin

  • -b Базовый каталог. Это каталог, в котором будет создана домашняя папка пользователя. По умолчанию /home.
  • -с Комментарий. В нем вы можете напечатать любой текст.
  • -d Название домашнего каталога. По умолчанию название совпадает с именем создаваемого пользователя.
  • -e Дата, после которой пользователь будет отключен. Задается в формате ГГГГ-ММ-ДД. По умолчанию отключено.
  • -f Количество дней, которые должны пройти после устаревания пароля до блокировки пользователя, если пароль не будет изменен (период неактивности). Если значение равно 0, то запись блокируется сразу после устаревания пароля, при -1 - не блокируется. По умолчанию -1.
  • -g Первичная группа пользователя. Можно указывать как GID, так и имя группы. Если параметр не задан будет создана новая группа название которой совпадает с именем пользователя.
  • -G Список вторичных групп в которых будет находится создаваемый пользователь
  • -k Каталог шаблонов. Файлы и папки из этого каталога будут помещены в домашнюю папку пользователя. По умолчанию /etc/skel.
  • -m Ключ, указывающий, что необходимо создать домашнюю папку. По умолчанию домашняя папка не создается.
  • -p Зашифрованный пароль пользователя. По умолчанию пароль не задается, но учетная пользователь будет заблокирован до установки пароля.
  • -s Оболочка, используемая пользователем. По умолчанию /bin/sh.
  • -u Вручную задать UID пользователю.

Если при создании пользователя не указываются дополнительные ключи, то берутся настройки по умолчанию. Посмотерть настройки по-умолчанию можно с помощью команды useradd -D .

Если вас не устраивают такие настройки, вы можете поменять их выполнив sudo useradd -D -s /bin/bash , где -s это ключ из таблицы выше.

Изменение пользователя

Изменение параметров пользователя происходит с помощью утилиты usermod. Пример использования:

sudo usermod -c "Эта команда поменяет комментарий пользователю" vasyapupkin

Изменить пароль пользователю можно при помощи утилиты passwd.

sudo passwd vasyapupkin

Утилита passwd может использоваться и обычным пользователем для смены пароля.

Основные ключи passwd:

  • -d Удалить пароль пользователю. После этого пароль будет пустым, и пользователь сможет входить в систему без предъявления пароля.
  • -e Сделать пароль устаревшим. Это заставит пользователя изменить пароль при следующем входе в систему.
  • -i Заблокировать учетную запись пользователя по прошествии указанного количества дней после устаревания пароля.
  • -n Минимальное количество дней между сменами пароля.
  • -x Максимальное количество дней, после которого необходимо обязательно сменить пароль.
  • -l Заблокировать учетную запись пользователя.
  • -u Разблокировать учетную запись пользователя.

Установка пустого пароля пользователя

Супер пользователь с помощью утилит командной строки passwd и usermod или путем редактирования файла /etc/shadow может удалить пароль пользователь, дав возможность входить в систему без указания пароля.

sudo passwd -d vasyapupkin или sudo usermod -p "" vasyapupkin

После этого имеет смысл принудить пользователя установить себе новый пароль при следующем входе в систему.

sudo passwd -e vasyapupkin

Удаление пользователя

Для того, чтобы удалить пользователя воспользуйтесь утилитой userdel.

sudo userdel vasyapupkin

  • -f Принудительно удалить пользователя, даже если он сейчас работает в системе.
  • -r Удалить домашний каталог пользователя.

Управление группами

Создание группы

Программа groupadd создаёт новую группу согласно указанным значениям командной строки и системным значениям по умолчанию.

sudo groupadd testgroup

  • -g Установить собственный GID.
  • -p Пароль группы.
  • -r Создать системную группу.

Изменение группы

Сменить название группы, ее GID или пароль можно при помощи groupmod.

  • -g Установить другой GID.
  • -n Новое имя группы.
  • -p Изменить пароль группы.

Удаление группы

Утилита groupdel не имеет никаких дополнительных параметров.

sudo groupdel testgroup

Управление пользователями группы

Для управления пользователями группы используется утилита gpasswd. Чтобы занести пользователя в группу:

gpasswd -a [user] [group]

Вывод пользователя из группы:

gpasswd -d [user] [group]

Файлы конфигурации

/etc/passwd

В файле /etc/passwd, который упоминался ранее, хранится вся информация о пользователях кроме пароля. Одна строка из этого файла соответствует описанию одного пользователя. Примерное содержание строки таково:

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

  1. vasyapupkin Имя пользователя для входа в систему.
  2. x Необязательный зашифрованный пароль.
  3. 1000 Числовой идентификатор пользователя (UID).
  4. 1000 Числовой идентификатор группы (GID).
  5. Vasya Pupkin Поле комментария
  6. /home/vpupkin Домашний каталог пользователя.
  7. /bin/bash Оболочка пользователя.

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

/etc/group

В /etc/group, как очевидно из названия хранится информация о группах. Она записана в аналогичном /etc/passwd виде:

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

  1. vasyapupkin Название группы
  2. x Необязательный зашифрованный пароль.
  3. 1000 Числовой идентификатор группы (GID).
  4. vasyapupkin,petya Список пользователей, находящихся в группе.

В этом файле второе и четвертое поля могут быть пустыми.

/etc/shadow

Файл /etc/shadow хранит в себе пароли, по этому права, установленные на этот файл, не дают считать его простому пользователю. Пример одной из записей из этого файла:

  1. vasyapupkin Имя пользователя для входа в систему.
  2. xxx Необязательный зашифрованный пароль.
  3. 15803 Дата последней смены пароля.
  4. 0 Минимальный срок действия пароля.
  5. 99999 Максимальный срок действия пароля.
  6. 7 Период предупреждения о пароле.
  7. [пусто] Период неактивности пароля.
  8. [пусто] Дата истечения срока действия учётной записи.

Sudo и su

Зная чей-либо пароль, можно непосредственно зарегистрироваться в системе под его именем, введя команду su имя_пользователя .

Программа su служит для выполнения от имени указанного пользователя (по умолчанию — root) указанной команды/программы (по умолчанию — той программы, что определена в качестве оболочки (shell) для указанного пользователя) и запрашивает она пароль указанного пользователя.

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

Управление доступом

У каждого объекта в Linux есть свой идентификатор, а так же права доступа, применяемые к данному идентификатору. Идентификатор есть у пользователя - UID, у группы - GID, у файла - inode.

Собственно inode является, как идентификатором файла/каталога, так и сущностью, которая содержит в себе информацию о файле/каталоге. Например такую, как: принадлежность к владельцу/группе, тип файла и права доступа к файлу.

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

  • Полномочия чтения (r от read).
  • Записи (w от write).
  • Выполнения (x от execution).

В полномочия записи входят также возможности удаления и изменения объекта. Право выполнения можно установить для любого файла. Потенциально, любой файл в системе можно запустить на выполнение, как программу в Windows. В Linux является ли файл исполняемым или нет, определяется не по его расширению, а по правам доступа. Кроме того, эти полномочия указываются отдельно для владельца файла, членов группы файла и для всех остальных.

Собрав вышесказанное в кучу, то есть представив 3 правила (rwx) для трех групп (владелец, группа, остальные) запись прав доступа будет выглядеть вот так: rwx rwx rwx . Пример прав директории:

Кроме указанного представления полномочий доступа (символьного), существует так же и числовое представление. Для общего понимания, приведу таблицу соответствия числового (двоичного и десятичного) значения прав доступа и буквенного:

владелец группа остальные
буквенное rwx r-x r–
двоичное 111 101 100
двоичное в десятичных 421 401 400
десятичное 7 5 4

Управление правами доступа

Управление правами доступа происходит с помощью команды chmod, управление владельцем файла происходит с помощью команды chown. Синтаксис команд следующий:

  • [к_какой_группе_прав] может быть:
    • u (от user) - владелец-пользователь.
    • g (от group) - владелец-группа.
    • o (от other) - остальные пользователи.
    • a (от all) - все вышеперечисленные группы вместе.
    • + - добавить.
    • - - убрать.
    • = - присвоить указанное.
    • r - чтение.
    • w - запись.
    • x - выполнение.

    Использование команды chown выглядит следующим образом: chown user:group file (-R рекурсивно)

    Права доступа к символьным ссылкам

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

    Специальные атрибуты

    • Sticky bit - бит закрепления в памяти.

    Сегодня sticky bit используется в основном для каталогов, чтобы защитить в них файлы. В такой каталог может писать ЛЮБОЙ пользователь. Из такой директории пользователь может удалить только те файлы, владельцем которых он является. Примером может служить директория /tmp , в которой запись открыта для всех пользователей, но нежелательно удаление чужих файлов.

    Атрибут исполняемого файла, позволяющий запустить его с правами владельца. В Unix-подобных системах приложение запускается с правами пользователя, запустившего указанное приложение. Это обеспечивает дополнительную безопасность так как процесс с правами пользователя не сможет получить доступ на запись к важным системным файлам, например /etc/passwd, который принадлежит суперпользователю root. Если на исполняемый файл установлен бит suid, то при выполнении эта программа автоматически меняет “эффективный userID” на идентификатор того юзера, который является владельцем этого файла. То есть, не зависимо от того - кто запускает эту программу, она при выполнении имеет права хозяина этого файла.

    • SGID - он же Set Group ID. Аналогичен SUID, но относится к группе. При этом, если для каталога установлен бит SGID, то создаваемые в нем объекты будут получать группу владельца каталога, а не пользователя.

    Хотелось бы так же провести аналогию с ОС Windows. В указанной операционной системе права регулируются на основе списков ACL. В Linux тоже такое возможно, это реализуется с помощью пакета acl, но данный вопрос в текущей теме я рассматривать не буду. Еще одно важное замечание! В Windows можно определить права доступа на каталог, и они автоматически распространяются на все файлы и поддиректории (если вы явно не указали иного). В Linux права доступа сохраняются в inode файла, и поскольку inode у каждого файла свой собственный, права доступа у каждого файла свои. Так же, права доступа пользователя и группы не суммируются, как в Windows. Если программа выполняется с правами пользователя и группы, которым принадлежит файл — работают только права хозяина файла.

    Исполняемый файл с установленным атрибутом suid является “потенциально опасным”. Без установленного атрибута, файл не позволит обычному пользователю сделать то, что выходит за пределы прав пользователя (пример, программа passwd позволяет пользователю изменить только собственный пароль). Но, даже незначительная ошибка в такой программе может привести к тому, что злоумышленник сможет заставить её выполнить ещё какие-нибудь действия, не предусмотренные автором программы. Стоит очень осторожно относиться к данным атрибутам! Как найти в системе файлы с атрибутом SIUD и др.

    При создании новой директории в директории с уже установленным SGID-битом, у созданной директории SGID-бит устанавливается автоматически!

    Обозначение атрибутов Sticky, SUID, SGID

    Специальные права используются довольно редко, поэтому при выводе программы ls -l символ, обозначающий указанные атрибуты, закрывает символ стандартных прав доступа. Пример: rwsrwsrwt, где s - SUID, s - SGID, t - Sticky. В приведенном примере не понятно, rwt — это rw- или rwx? Определить, стоит ли символ стандартных прав доступа под символами s и t - просто. Если t маленькое, значит x установлен. Если T большое, значит x не установлен. То же самое правило распространяется и на s.

    В числовом эквиваленте данные атрибуты определяются первым символом при четырехзначном обозначении (который часто опускается при назначении прав), например в правах 1777 - символ 1 обозначает sticky bit. Остальные атрибуты имеют следующие числовое соответствие:

    • 1 - sticky bit
    • 2 - SGID
    • 4 - SUID

    Права доступа по-умолчанию для вновь создаваемых объектов файловой системе.

    В Linux, при создании какого-либо файла или каталога предоставляемые права определяются по определенному алгоритму (формуле). Не вдаваясь в подробности и для большего понимания сути скажу, что есть исходные права доступа:

    • 0666 - для файлов.
    • 0777 - для каталогов.

    Есть такая штука как umask, которая задана для каждого пользователя и хранится в виде строчки umask в файле .bash_profile. Итого, у вновь создаваемого каталога будут права равные исходным правам доступа - umask.

    Узнать текущий umask можно, введя команду umask без параметров. Пример:

    Как видно из примера, umask установлен 0022, исходные права доступа равны 0666 - для файлов и 0777 - для каталогов. В результате получаем:

    Читайте также: