-
сервер
php, mysql, nginx, centos -
клиент
js, jquery, react -
клиент-сервер
ajax, fetch, node.js -
вёрстка
css, html
Создание пользователя, добавление в группу, назначение разрешений.
Файл /etc/passwd содержит список пользователей
- Регистрационное имя. Регистрационные имена должны быть уникальными и состоять не более чем из 32 символов. Они могут содержать любые символы, кроме двоеточия и символа новой строки. Они не должны начинаться с цифры.
- Зашифрованный пароль или «заполнитель» пароля. В данном поле возможно присутствие символа «х», символа «*» или набора случайных символов и чисел. В первом случае указывается, что пароль храниться в файле /etc/shadow. Во втором случае говорится, что данная учетная запись временно отключена. В последнем случае указывается непосредственный пароль пользователя в зашифрованном виде.
- Идентификатор пользователя — это 32-битное целое число, которое уникально идентифицирует пользователя в системе. По умолчанию, идентификаторы меньше 500 зарезервированы для служебных учетных записей. Регулярные пользователи имеют идентификаторы, начиная с 500.
- Идентификатор группы по умолчанию. Как и идентификатор пользователя, идентификатор группы (GID) является 32-битным целым числом. Идентификатор 0 зарезервирован для группы с именем root, идентификатор 1 — для группы bin, а 2 — для группы daemon. Группы определяются в файле /etc/group, а поле идентификатора группы в файле /etc/passwd задает стандартный («эффективный») идентификатор на момент регистрации пользователя в системе. Этот идентификатор не играет особой роли при определении прав доступа; он используется лишь при создании новых файлов и каталогов. Новые файлы обычно включаются в эффективную группу своего владельца, но если у каталога установлен специальный бит setgid (02000) или файловая система смонтирована с опцией grpid, новые файлы принадлежат группе владельца каталога. По умолчанию, в ОС Linux для каждого нового пользователя создается новая группа с таким же регистрационным именем и идентификатором.
- Поле персональных данных. Поле GECOS в основном используется для хранения персональной информации о каждом пользователе. Оно не имеет четко определенного синтаксиса. Структура данного поля может быть произвольной, но команда finger интерпретирует разделенные запятыми элементы данного поля в следующем порядке: полное имя; номер офиса и здания; рабочий телефон; домашний телефон.
- Домашний каталог. Войдя в систему, пользователь попадает в свой домашний каталог. Если на момент регистрации этот каталог отсутствует, выводится сообщение о его отсутствии. Если в качестве значения поля домашнего каталога по умолчанию DEFAULT_HOME в файле /etc/login.defs установлено «no», продолжение регистрации пользователя будет невозможно; в противном случае пользователь попадает в корневой каталог. По умолчанию, домашние каталоги пользователей создаются в каталоге /home. При добавлении в систему нового пользователя в его домашний каталог копируются все файлы из каталога /etc/skel, в котором содержаться персональные конфигурационные файлы командного интерпретатора и различных программ.
- Командный интерпретатор. В качестве регистрационной оболочки, как правило, задается интерпретатор команд, например, /bin/sh или /bin/csh, но, в принципе, это может быть любая программа. По умолчанию используется интерпретатор bash. Пользователи могут менять интерпретатор с помощью команды chsh. Файл /etc/shells содержит список тех интерпретаторов, которые доступны для выбора.
Файл /etc/group содержит имена групп и списки членов каждой группы
- Имя группы. По умолчанию при создании нового пользователя создается также его группа с таким же именем, как и регистрационное имя пользователя.
- Зашифрованный пароль или символ х, указывающий на использование файла /etc/gshadow;
- Идентификатор группы.
- Список членов, разделенный запятыми без пробелов.
Файл /etc/shadow доступен для чтения только пользователю root и предназначен для хранения зашифрованных паролей
- Регистрационное имя. Регистрационное имя берется из файла /etc/passwd. Оно связывает записи файлов /etc/passwd и /etc/shadow.
- Зашифрованный пароль.
- Дата последнего изменения пароля. Данное поле обычно заполняется командой passwd.
- Минимальное число дней между изменениями пароля. В данном поле задается количество дней, спустя которые пользователь сможет снова изменить пароль.
- Максимальное число дней между изменениями пароля. Максимальное время жизни пароля определяется суммой значений данного и седьмого полей.
- Количество дней до истечения срока действия пароля, когда выдается предупреждение. В данном поле задано количество дней, оставшихся до момента устаревания пароля, когда программа login должна предупреждать пользователя о необходимости изменить пароль.
- Количество дней по истечении срока действия пароля, когда учетная запись отключается.
- Срок действия учетной записи. По окончанию этого срока пользователь не сможет зарегистрироваться в системе, пока администратор не сбросит значение поля. Если поле содержит пустое значение, учетная запись всегда будет активной.
- Зарезервированное поле, которое в настоящее время всегда пустое.
// Создать пользователя username useradd username // Установить пароль пользователю username passwd username // Добавить пользователя username в группу groupname usermod -a -G groupname username // Узнать в какой группе пользователь username id username groups username // Удалить юзера (удаляет учётную запись и файлы пользователя) userdel username
Права доступа
Символьные значения прав доступа:
- r — read, чтение
- w — write, запись
- x — execute, выполнение
Варианты записи прав пользователя
| Двоичная система | Восьмеричная система | Символьная | Права на файл | Права на каталог |
|---|---|---|---|---|
| 000 | 0 | — | нет | нет |
| 001 | 1 | —x | выполнение | чтение свойств файлов |
| 010 | 2 | -w- | запись | нет |
| 011 | 3 | -wx | запись и выполнение | всё, кроме получения имени файлов |
| 100 | 4 | r— | чтение | чтение имён файлов |
| 101 | 5 | r-x | чтение и выполнение | доступ на чтение файлов/их свойств |
| 110 | 6 | rw- | чтение и запись | чтение имён файлов |
| 111 | 7 | rwx | все права | все права |
Права доступа состоят из трёх цифр. Первая цифра – права владельца, вторая цифра – права группы, третья цифра – права всех остальных пользователей. Например:
- 644 (-rw-r—r— или 110 100 100) – все пользователи имеют право чтения; владелец может редактировать
- 755 (-rwxr-xr-x или 111 101 101) – каждый пользователь имеет право читать и запускать на выполнение; владелец может редактировать
- 777 (-rwxrwxrwx или 111 111 111) – каждый пользователь может читать, редактировать и запускать на выполнение
// Изменить владельца файла chown root /var/run/httpd.pid // Рекурсивно изменить владельца и группу для каталога /var/www/html/site и всех файлов chown -R username:groupname /var/www/html/site // Изменить права доступа к каталогу/файлу chmod 755 /var/www/html/site chmod 644 /var/www/html/site/index.html // Просмотр текущих прав доступа каталога/файла ls -l /var/www/html/site ls -l /var/www/html/site/index.html
Сервер
12.09.2016
up: 31.08.2022
просмотров: 10.8k
Оценить код:
Код был обновлён. Предыдущий рейтинг:
- Бесполезный код — 0 голосов
- Костыль — 0 голосов
- Полезный код — 2 голоса
- Сниппеты
- —
- Сервер
- —
- Пользователи и права доступа в Linux
На чтение 5 мин. Просмотров 2.1k. Опубликовано 15.12.2019
Как установить права доступа на запись в папку и на все подпапки и файлы:
chmod -R 755 /home/vasya
смена прав, -R рекурсивно, т.е. изменит и то, что внутри каталога vasya
циферки — это три отдельных атрибута:
7 — rwx — читать, писать, выполнять
6 — rw- — читаь, писать
5 — r-x — читать, выполнять
4 — r— — читать
3 — -wx — писать, выполнять
2 — -w- — писать
1 — —x — выполнять
0 — — — ничего нельзя делать
Первая цифра означает применения прав для пользователя,
Вторая — для группы
Третья — права для всех остальных
Для смены владельца файлов/каталогов используем chown:
chown -R vasya:users /home/vasya
поменяет владельца и группу каталога vasya и содержимое онного!
Установка прав доступа выполняется командой chmod. Например
Этой командой мы устанавливаем полные права для всех на каталог www. -R — смена прав выполняется рекурсивно для всех файлов и каталогов внутри www. Цифры определяют права доступа, первая для пользователя, вторая для группы, третья для всех остальных:
7- rwx — читать, писать, выполнять
6 — rw — читать, писать
5 — rx — читать, выполнять
4 — r — читать
3 — wx — писать, выполнять
2 — w — писать
1 — x — выполнять
0 — ничего нельзя делать
Для смены владельца используется команда chown. Например
По аналогии с chmod устанавливаем владельца apache для для всех файлов и каталогов внутри www.
Содержание
- More In RHEL / CentOS / Fedora
- Права пользователя на папку Linux
- Выводы
More In RHEL / CentOS / Fedora
Конфигурурирование автозапуска сервисов
Конфигурирование автозапуска сервисов в RHEL / CentOS /Fedora выполняется командой chkconfig. Синтаксис ее таков # chkconfig —list service_name # chkconfig —add service_name # chkconfig —del service_name…read more →
Отключение SELinux в RHEL / CENTOS / FEDORA (Disable SELinux in RHEL / CENTOS / FEDORA)
Немного теории)) SELinux (англ. Security-Enhanced Linux — Linux с улучшенной безопасностью) — реализация системы принудительного контроля доступа, которая может работать параллельно с классической дискреционной системой…read more →
Система прав доступа к файлам и папкам в Linux организована очень интересно. Права разделяются на три категории: права владельца, права группы файла и права всех остальных. Прочитать подробнее про права в Linux можно в отдельной статье.
Иногда возникает необходимость дать определенному пользователю или программе возможность доступа к папке. На первый взгляд, это может показаться сложным, но решается все довольно просто. В этой статье мы разберем как дать права на папку пользователю Linux.
Права пользователя на папку Linux
Как я уже сказал, права делятся на три категории для владельца, для группы и для всех остальных. Таким образом, мы можем дать пользователю доступ к папке несколькими способами:
- Изменить права для всех — тогда все пользователи получат доступ к нашей папке, в том числе и нужный пользователь. Но, обычно, так никто не делает, потому что это небезопасно и в производственных системах важные данные могут попасть в чужие руки;
- Изменить владельца папки на нашего пользователя — по умолчанию владелец имеет полные права на папку, то есть запись и чтение. Если мы сделаем владельцем нашего пользователя, то он автоматически получит все права, а другие пользователи по-прежнему не смогут получить доступ к папке. Но такой вариант тоже не совсем правильный, потому что, обычно, у папки уже есть владелец и изменив владельца мы уберем у него доступ;
- Добавить к папке группу и добавить в нее пользователя — самый верный путь. Файл или папка может принадлежать определенной группе пользователей, но только одной, и мы можем установить для этой группы отличающиеся от владельца права. Но в группу можно добавить несколько пользователей, поэтому мы никого не оставляем без доступа. По умолчанию, для всех файлов устанавливается группа владельца, но это можно очень просто изменить.
Теперь давайте разберем как это реализуется на практике. Допустим, у нас есть папка /storage, владельцем которой является пользователь /root:
ls -l / | grep storage
У папки такие права, что записывать в нее данные может только root, а другие пользователи могут их только смотреть. Нам надо предоставить к ней доступ на запись и чтение пользователю sergiy. Сейчас у него такого доступа нет:
Давайте создадим группу storage и добавим в нее пользователя sergiy:
sudo groupadd storage
sudo usermod -aG storage sergiy
Смотрим список групп нашего пользователя:
После добавления пользователя в группу нужно перелогиниться, чтобы система увидела это изменение. Затем меняем группу нашей папки на storage:
sudo chgrp storage /storage
Если нужно дать права на папку в Linux еще какому-нибудь пользователю, то достаточно добавить его в эту группу. Посмотрим список пользователей группы:
Теперь наша папка выглядит вот так:
ls -l / | grep storage
Осталось подправить права для группы, нужно дать разрешение на чтение и запись:
chmod g+rw /storage
Затем пользователь sergiy сможет записывать и читать файлы из этой папки, а все остальные пользователи только читать.
Выводы
В этой небольшой статье мы рассмотрели дать права пользователю linux на доступ к папке. Для серверов это может быть достаточно частой задачей, поскольку пользователи — это не только люди, использующие систему, но и программы, выполняемые от имени того или иного пользователя. А это создает еще одно применение для этой системы прав. Если у вас остались вопросы, спрашивайте в комментариях!
Для тех, кто ищет быстрый способ парой командой массово поменять права доступа на файлы и папки:
cd /var/www/sheensay.ru
find ./ -type f -exec chmod 0644 {} ;
find ./ -type d -exec chmod 0755 {} ;
Если не в курсе, что это, подробности далее
-
Что такое Chmod
-
Зачем использовать Chmod
-
Синтаксис Chmod
-
Ключи -R, -v, -f
-
Правила доступа Chmod
-
Как проверить права Chmod
-
Пример правильного использования Chmod
-
После использования Chmod появились ошибки
Это UNIX-утилита, с помощью которой можно быстро через консоль изменить права на доступ для определённых владельцев (owner) и групп (group) для указанных категорий и файлов.
Зачем использовать Chmod
В UNIX-системах — FreeBSD, Ubuntu, Debian, Centos — у каждого файла и папки (каталога) есть свои владелец и группа, к которым они относятся. Сделано это с целью разграничения прав доступа на чтение (r, read), запись (w, write) и исполнение (x, execute) для разных пользователей: владельцев (u), пользователей, входящих в группу владельца (g) и остальных (o).
Например, если вы пользуетесь хостингом, то должны знать, что ваш сайт физически находится на одном сервере рядом со множеством других сайтов таких же, как вы, пользователей со своими сайтами. Чтобы вы не смогли помешать друг другу, у каждой директории с сайтами свой владелец и группа пользователей, к которым они относятся.
На shared хостинге о вас позаботятся профессиональные системные администраторы. А если вы имеете свой сервер VDS/VPS, то просто обязаны следить за прописанными правами на доступ к файлам. Например, если вдруг с помощью уязвимости на сайте злоумышленник сможет записать backdoor в директорию для загрузки файлов, то с правильно прописанными правами доступа он не сможет причинить большого вреда файловой системе. Конечно, в директории для загрузки файлов должно быть принудительно отключено исполнение скриптов, но это тема уже для другого разговора.
Синтаксис Chmod
chmod [-Rvf] [Правила доступа] [Файл/Файлы/Каталог, директория файлов]
В части [Правила доступа] могут быть либо числовые, либо символьные значения.
[Файл/Файлы/Каталог файлов] — путь к файлу, файлам или к каталогу файлов, абсолютный или относительный.
Ключи -R, -v, -f
-R
Рекурсивное изменение прав доступа для каталога и вложенных файлов и подкаталогов-v
Подробное описание применения изменения прав доступа или невозможности этого действия-f
Не выдавать сообщение об ошибке для тех файлов и каталогов, для которых невозможно изменить права доступа
Правила доступа Chmod
Как вы уже знаете, права доступа определяются тем, как пользователь может взаимодействовать с файлами и каталогами, а именно r — read (чтение), w — write (запись), x — execute (выполнение).
А также, вы знаете, что эти права должны быть прописаны для трёх групп пользователей:
- Владелец файла или каталога;
- Пользователи, входящие в группу владельца;
- Остальные.
Теперь посмотрим в таблицу определения прав:
Три варианта записи прав пользователей
То есть, для того, чтобы записать правило для владельца дать доступ на чтение и запись, остальным дать права только на чтение, мы должны дать права (rw-r--r--)
Теперь обратите внимание на столбец Символьная и Восьмеричная. Там визуально показано, что то, что выглядит символьно как (rw-r--r--), в восьмеричном виде выглядит как (644). Это выражение и будем использовать как числовую запись в команде.
Теперь осталось собрать всё воедино в одну запись. Для примера, изменим права на доступ «всем дать права на чтение, владельцу право изменять содержимое» для файла index.php:
chmod -v 644 index.php
Как одной командой массово изменить права всем файлам в текущем каталоге и подкаталогах
Как проверить права Chmod
ls -ld index.php
где index.php — файл или каталог, который нужно проверить.
Пример правильного использования Chmod
Правила доступа по умолчанию для каталогов 755, для файлов 644. Поэтому, в подавляющем большинстве случаев, вам понадобятся только эти права.
Ниже пример того, как в каталоге /var/www/sheensay.ru на все файлы рекурсивно поставить права 0644, а на все каталоги и подкаталоги 0755
cd /var/www/sheensay.ru
find ./ -type f -exec chmod 0644 {} ;
find ./ -type d -exec chmod 0755 {} ;
Первой командой переходим в нужную директорию, далее с помощью команды find ищем нужный тип: файлы -f (files) и каталоги -d (directories) — и запускаем chmod с нужными правами.
После использования Chmod появились ошибки
Если после правильной настройки Chmod перестали открываться некоторые страницы сайта, открывается белый экран, не загружаются файлы на сайт, проверьте, правильно ли вы установили Chown для всех каталогов и файлов сайта, возможно, права доступа стоят слишком строгие. Либо или php, или Apache запускаются не от того пользователя.
Загрузка…
Linux is a multi user OS which means that it supports multiple users at a time.
As many people can access the system simultaneously and some resources are shared, Linux controls access through ownership and permissions.
In Linux, there are three types of owners: user, group, and others .
Linux User
A user is the default owner and creator of the file. So this user is called owner as well.
Linux Group
A user-group is a collection of users. Users that belonging to a group will have the same Linux group permissions to access a file/ folder.
You can use groups to assign permissions in a bulk instead of assigning them individually. A user can belong to more than one group as well.
Other
Any users that are not part of the user or group classes belong to this class.
Linux File Permissions
File permissions fall in three categories: read, write, and execute.
Read permission
For regular files, read permissions allow users to open and read the file only. Users can’t modify the file.
Similarly for directories, read permissions allow the listing of directory content without any modification in the directory.
Write permission
When files have write permissions, the user can modify (edit, delete) the file and save it.
For folders, write permissions enable a user to modify its contents (create, delete, and rename the files inside it), and modify the contents of files that the user has write permissions to.
Execute permission
For files, execute permissions allows the user to run an executable script. For directories, the user can access them, and access details about files in the directory.
Below is the symbolic representation of permissions to user, group, and others.
Note that we can find permissions of files and folders using long listing (ls -l) on a Linux terminal.
In the output above, d represents a directory and- represents a regular file.
How to Change Permissions in Linux Using the chmod Command
Now that we know the basics of ownerships and permissions, let’s see how we can modify permissions using the chmod command.
Syntax of chmod:
chmod permissions filename
Where,
permissionscan be read, write, execute or a combination of them.filenameis the name of the file for which the permissions need to change. This parameter can also be a list if files to change permissions in bulk.
We can change permissions using two modes:
- Symbolic mode: this method uses symbols like
u,g,oto represent users, groups, and others. Permissions are represented asr, w, xfor read write and execute, respectively. You can modify permissions using +, — and =. - Absolute mode: this method represents permissions as 3-digit octal numbers ranging from 0-7.
Now, let’s see them in detail.
How to Change Permissions using Symbolic Mode
The table below summarize the user representation:
| User representation | Description |
|---|---|
| u | user/owner |
| g | group |
| o | other |
We can use mathematical operators to add, remove, and assign permissions. The table below shows the summary:
| Operator | Description |
|---|---|
| + | Adds a permission to a file or directory |
| – | Removes the permission |
| = | Sets the permission if not present before. Also overrides the permissions if set earlier. |
Example:
Suppose, I have a script and I want to make it executable for owner of the file zaira.
Current file permissions are as follows:
Let’s split the permissions like this:
To add execution rights (x) to owner (u) using symbolic mode, we can use the command below:
chmod u+x mymotd.sh
Output:
Now, we can see that the execution permissions have been added for owner zaira.
Additional examples for changing permissions via symbolic method:
- Removing
readandwritepermission forgroupandothers:chmod go-rw. - Removing
readpermissions forothers:chmod o-r. - Assigning
writepermission togroupand overriding existing permission:chmod g=w.
How to Change Permissions using Absolute Mode
Absolute mode uses numbers to represent permissions and mathematical operators to modify them.
The below table shows how we can assign relevant permissions:
| Permission | Provide permission |
|---|---|
| read | add 4 |
| write | add 2 |
| execute | add 1 |
Permissions can be revoked using subtraction. The below table shows how you can remove relevant permissions.
| Permission | Revoke permission |
|---|---|
| read | subtract 4 |
| write | subtract 2 |
| execute | subtract 1 |
Example:
- Set
read(add 4) foruser,read(add 4) andexecute(add 1) for group, and onlyexecute(add 1) for others.
chmod 451 file-name
This is how we performed the calculation:
Note that this is the same as r--r-x--x.
- Remove
executionrights fromotherandgroup.
To remove execution from other and group, subtract 1 from the execute part of last 2 octets.
- Assign
read,writeandexecutetouser,readandexecutetogroupand onlyreadto others.
This would be the same as rwxr-xr--.
How to Change Ownership using the chown Command
Next, we will learn how to change the ownership of a file. You can change the ownership of a file or folder using the chown command. In some cases, changing ownership requires sudo permissions.
Syntax of chown:
chown user filename
How to change user ownership with chown
Let’s transfer the ownership from user zaira to user news.
chown news mymotd.sh
Command to change ownership: sudo chown news mymotd.sh
Output:
How to change user and group ownership simultaneously
We can also use chown to change user and group simultaneously.
chown user:group filename
How to change directory ownership
You can change ownership recursively for contents in a directory. The example below changes the ownership of the /opt/script folder to allow user admin.
chown -R admin /opt/script
How to change group ownership
In case we only need to change the group owner, we can use chown by preceding the group name by a colon :
chown :admins /opt/script
Linux Permissions Guided Exercise
Up until now we have explored permissions, ownerships, and the methods to change them. Now we will reinforce our learning with a guided exercise.
Goal: To create groups and assign relevant permissions to its members. Verify access by accessing it from unauthorized users.
Task: Create a group called dev-team and add two members (John and Bob) to it. Create a folder /home/dev-team and change ownership to group dev-team. Verify that both users in the dev-team group have read and write access to the folder.
Create another group project-manager and add a user Fatima to it. Verify if the folder /home/dev-team is accessible by Fatima.
Visualization of the problem
We can visualize the problem like this:
Step 1: Switch to root user.
Switch to root user so that we have the rights to create new users and groups.
Show hint
Use the sudo command with flag i.
If you have the root password, you can login using that as well.
Show solution
Enter sudo -i to switch to the root user.
Enter whoami to find out if you are the root user:
If you do not have root access, use the commands with appending sudo.
Step 2: Create a group dev-team
Show hint
Use the groupadd command.
Syntax: groupadd group-name
Show solution
Enter groupadd dev-team to create the dev-team group
Verify: cat /etc/group | grep dev-team
Step 3: Create two new users John and Bob and add them to the dev-team group
Show hint
Use command useradd.
useradd creates a new user and adds to the specified group.
Syntax: useradd -G groupname username
Where -G specifies the group.
Show solution
useradd -G dev-team John
useradd -G dev-team Bob
Verify: cat /etc/group | grep dev-team
Step 4: Provide passwords for users John and Bob
Show hint
Use command passwd
passwd creates a password for users.
Syntax: passwd username
Show solution
passwd John
passwd Bob
Step 5: Create a directory in /home and name it dev-team
Show hint
Use command mkdir
mkdir creates a directory.
Syntax: mkdir directory-name
Show solution
mkdir /home/dev-team
Verify:
Step 6: Change the group ownership of the folder dev-team to group dev-team
Show hint
Use command chown
Syntax: chown :group-name folder
Show solution
chown :dev-team /home/dev-team/
Step 7: Make sure the permissions of folder dev-team allow group members to create and delete files.
Show hint
Use command chmod
Write permissions allow users and groups to create and delete files.
Syntax: chmod permissions folder
Show solution
chmod g+w /home/dev-team/
Step 8: Ensure that ‘others’ don’t have any access to the files of dev-team folder.
Show hint
Use command chmod
Remove read, write, execute permissions from ‘others’ if they exist.
Syntax: chmod permissions folder
Show solution
chmod o-rx dev-team
Step 9: Exit the root session and switch to John
Show hint
Use command exit to logout of the root user.
Use su to switch users.
Syntax: su - user
To confirm current user, use command whoami.
Show solution
exit
su - John
Verify with command whoami.
Step 10: Navigate to folder: /home/dev-team
Show hint
Use command cd to switch folders.
Syntax: cd /path/to/folder
Confirm current path with pwd.
Show solution
cd /home/dev-team
Step 11: Create an empty file in the folder: /home/dev-team
Show hint
Use command touch to create an empty file.
Syntax: touch filename
Show solution
touch john-file.txt
Verify: ls -lrt
Step 12: Change the group ownership of the created file to dev-team and verify.
Show hint
Use command chown to change ownership.
Syntax: chown :group file-name
Show solution
chown :dev-team john-file.txt
Once group ownership is modified, all members of the group can access this file.
Verify ls -lrt
Step 13: Exit the shell and switch to user Bob
Show hint
Use command exit to exit the terminal.
Use su to switch users.
Syntax: su - user
To confirm current user, use command whoami.
Show solution
exit
su - Bob
Verify the current user with command whoami.
Step 14: Navigate to the path /home/dev-team
Show hint
Use command cd to switch folders.
Syntax: cd /path/to/folder
Confirm current path with pwd.
Show solution
cd /home/dev-team
Step 15: Find out Bob's privileges to access john-file.txt
Show hint
Use command ls -l for long listing.
Syntax: ls -l | grep file-name
Does group have rw- permissions?
Show solution
ls -l | grep john-file.txt
Step 16: Modify the file john-file.txt while logged in as Bob
Show hint
Use command echo to add some text to the file.
Syntax: echo "Some text" >>file-name
This would redirect the quoted text to end of the file.
Show solution
echo "This is Bob's comment" > john-file.txt
If all the permissions are correctly set, Bob would be allowed to edit and save this file. Otherwise you would get an error like this: Permission denied.
Verify cat john-file.txt
Step 17: Create another group project-manager and assign a member Fatima to it
Show hint
Use command groupadd to add a new group.
Syntax: groupadd group-name
Create a new user with command useradd.
Use flag -G to assign a user to it.
Show solution
groupadd project-manager
useradd -G project-manager Fatima
passwd Fatima
Step 18: Navigate to folder /home/dev-team and verify if Fatima can access it
Show hint
Use cd to navigate to /home/dev-team.
Show solution
cd /home/dev-team.
We get this error:
This is because, others don’t have any access to the folder dev-team.
If we recall, below are the rights of the dev-team folder.
Wrapping up
Permissions and ownerships are useful concepts for enforcing security across multi-user operating systems. I hope you were able to learn about changing permissions and ownerships in depth.
What’s your favorite thing you learned from this tutorial? Let me know on Twitter!
You can also read my other posts here.
Thanks to Tom Mondloch for his help with the guided exercise.
Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started
Linux is a multi user OS which means that it supports multiple users at a time.
As many people can access the system simultaneously and some resources are shared, Linux controls access through ownership and permissions.
In Linux, there are three types of owners: user, group, and others .
Linux User
A user is the default owner and creator of the file. So this user is called owner as well.
Linux Group
A user-group is a collection of users. Users that belonging to a group will have the same Linux group permissions to access a file/ folder.
You can use groups to assign permissions in a bulk instead of assigning them individually. A user can belong to more than one group as well.
Other
Any users that are not part of the user or group classes belong to this class.
Linux File Permissions
File permissions fall in three categories: read, write, and execute.
Read permission
For regular files, read permissions allow users to open and read the file only. Users can’t modify the file.
Similarly for directories, read permissions allow the listing of directory content without any modification in the directory.
Write permission
When files have write permissions, the user can modify (edit, delete) the file and save it.
For folders, write permissions enable a user to modify its contents (create, delete, and rename the files inside it), and modify the contents of files that the user has write permissions to.
Execute permission
For files, execute permissions allows the user to run an executable script. For directories, the user can access them, and access details about files in the directory.
Below is the symbolic representation of permissions to user, group, and others.
Note that we can find permissions of files and folders using long listing (ls -l) on a Linux terminal.
In the output above, d represents a directory and- represents a regular file.
How to Change Permissions in Linux Using the chmod Command
Now that we know the basics of ownerships and permissions, let’s see how we can modify permissions using the chmod command.
Syntax of chmod:
chmod permissions filename
Where,
permissionscan be read, write, execute or a combination of them.filenameis the name of the file for which the permissions need to change. This parameter can also be a list if files to change permissions in bulk.
We can change permissions using two modes:
- Symbolic mode: this method uses symbols like
u,g,oto represent users, groups, and others. Permissions are represented asr, w, xfor read write and execute, respectively. You can modify permissions using +, — and =. - Absolute mode: this method represents permissions as 3-digit octal numbers ranging from 0-7.
Now, let’s see them in detail.
How to Change Permissions using Symbolic Mode
The table below summarize the user representation:
| User representation | Description |
|---|---|
| u | user/owner |
| g | group |
| o | other |
We can use mathematical operators to add, remove, and assign permissions. The table below shows the summary:
| Operator | Description |
|---|---|
| + | Adds a permission to a file or directory |
| – | Removes the permission |
| = | Sets the permission if not present before. Also overrides the permissions if set earlier. |
Example:
Suppose, I have a script and I want to make it executable for owner of the file zaira.
Current file permissions are as follows:
Let’s split the permissions like this:
To add execution rights (x) to owner (u) using symbolic mode, we can use the command below:
chmod u+x mymotd.sh
Output:
Now, we can see that the execution permissions have been added for owner zaira.
Additional examples for changing permissions via symbolic method:
- Removing
readandwritepermission forgroupandothers:chmod go-rw. - Removing
readpermissions forothers:chmod o-r. - Assigning
writepermission togroupand overriding existing permission:chmod g=w.
How to Change Permissions using Absolute Mode
Absolute mode uses numbers to represent permissions and mathematical operators to modify them.
The below table shows how we can assign relevant permissions:
| Permission | Provide permission |
|---|---|
| read | add 4 |
| write | add 2 |
| execute | add 1 |
Permissions can be revoked using subtraction. The below table shows how you can remove relevant permissions.
| Permission | Revoke permission |
|---|---|
| read | subtract 4 |
| write | subtract 2 |
| execute | subtract 1 |
Example:
- Set
read(add 4) foruser,read(add 4) andexecute(add 1) for group, and onlyexecute(add 1) for others.
chmod 451 file-name
This is how we performed the calculation:
Note that this is the same as r--r-x--x.
- Remove
executionrights fromotherandgroup.
To remove execution from other and group, subtract 1 from the execute part of last 2 octets.
- Assign
read,writeandexecutetouser,readandexecutetogroupand onlyreadto others.
This would be the same as rwxr-xr--.
How to Change Ownership using the chown Command
Next, we will learn how to change the ownership of a file. You can change the ownership of a file or folder using the chown command. In some cases, changing ownership requires sudo permissions.
Syntax of chown:
chown user filename
How to change user ownership with chown
Let’s transfer the ownership from user zaira to user news.
chown news mymotd.sh
Command to change ownership: sudo chown news mymotd.sh
Output:
How to change user and group ownership simultaneously
We can also use chown to change user and group simultaneously.
chown user:group filename
How to change directory ownership
You can change ownership recursively for contents in a directory. The example below changes the ownership of the /opt/script folder to allow user admin.
chown -R admin /opt/script
How to change group ownership
In case we only need to change the group owner, we can use chown by preceding the group name by a colon :
chown :admins /opt/script
Linux Permissions Guided Exercise
Up until now we have explored permissions, ownerships, and the methods to change them. Now we will reinforce our learning with a guided exercise.
Goal: To create groups and assign relevant permissions to its members. Verify access by accessing it from unauthorized users.
Task: Create a group called dev-team and add two members (John and Bob) to it. Create a folder /home/dev-team and change ownership to group dev-team. Verify that both users in the dev-team group have read and write access to the folder.
Create another group project-manager and add a user Fatima to it. Verify if the folder /home/dev-team is accessible by Fatima.
Visualization of the problem
We can visualize the problem like this:
Step 1: Switch to root user.
Switch to root user so that we have the rights to create new users and groups.
Show hint
Use the sudo command with flag i.
If you have the root password, you can login using that as well.
Show solution
Enter sudo -i to switch to the root user.
Enter whoami to find out if you are the root user:
If you do not have root access, use the commands with appending sudo.
Step 2: Create a group dev-team
Show hint
Use the groupadd command.
Syntax: groupadd group-name
Show solution
Enter groupadd dev-team to create the dev-team group
Verify: cat /etc/group | grep dev-team
Step 3: Create two new users John and Bob and add them to the dev-team group
Show hint
Use command useradd.
useradd creates a new user and adds to the specified group.
Syntax: useradd -G groupname username
Where -G specifies the group.
Show solution
useradd -G dev-team John
useradd -G dev-team Bob
Verify: cat /etc/group | grep dev-team
Step 4: Provide passwords for users John and Bob
Show hint
Use command passwd
passwd creates a password for users.
Syntax: passwd username
Show solution
passwd John
passwd Bob
Step 5: Create a directory in /home and name it dev-team
Show hint
Use command mkdir
mkdir creates a directory.
Syntax: mkdir directory-name
Show solution
mkdir /home/dev-team
Verify:
Step 6: Change the group ownership of the folder dev-team to group dev-team
Show hint
Use command chown
Syntax: chown :group-name folder
Show solution
chown :dev-team /home/dev-team/
Step 7: Make sure the permissions of folder dev-team allow group members to create and delete files.
Show hint
Use command chmod
Write permissions allow users and groups to create and delete files.
Syntax: chmod permissions folder
Show solution
chmod g+w /home/dev-team/
Step 8: Ensure that ‘others’ don’t have any access to the files of dev-team folder.
Show hint
Use command chmod
Remove read, write, execute permissions from ‘others’ if they exist.
Syntax: chmod permissions folder
Show solution
chmod o-rx dev-team
Step 9: Exit the root session and switch to John
Show hint
Use command exit to logout of the root user.
Use su to switch users.
Syntax: su - user
To confirm current user, use command whoami.
Show solution
exit
su - John
Verify with command whoami.
Step 10: Navigate to folder: /home/dev-team
Show hint
Use command cd to switch folders.
Syntax: cd /path/to/folder
Confirm current path with pwd.
Show solution
cd /home/dev-team
Step 11: Create an empty file in the folder: /home/dev-team
Show hint
Use command touch to create an empty file.
Syntax: touch filename
Show solution
touch john-file.txt
Verify: ls -lrt
Step 12: Change the group ownership of the created file to dev-team and verify.
Show hint
Use command chown to change ownership.
Syntax: chown :group file-name
Show solution
chown :dev-team john-file.txt
Once group ownership is modified, all members of the group can access this file.
Verify ls -lrt
Step 13: Exit the shell and switch to user Bob
Show hint
Use command exit to exit the terminal.
Use su to switch users.
Syntax: su - user
To confirm current user, use command whoami.
Show solution
exit
su - Bob
Verify the current user with command whoami.
Step 14: Navigate to the path /home/dev-team
Show hint
Use command cd to switch folders.
Syntax: cd /path/to/folder
Confirm current path with pwd.
Show solution
cd /home/dev-team
Step 15: Find out Bob's privileges to access john-file.txt
Show hint
Use command ls -l for long listing.
Syntax: ls -l | grep file-name
Does group have rw- permissions?
Show solution
ls -l | grep john-file.txt
Step 16: Modify the file john-file.txt while logged in as Bob
Show hint
Use command echo to add some text to the file.
Syntax: echo "Some text" >>file-name
This would redirect the quoted text to end of the file.
Show solution
echo "This is Bob's comment" > john-file.txt
If all the permissions are correctly set, Bob would be allowed to edit and save this file. Otherwise you would get an error like this: Permission denied.
Verify cat john-file.txt
Step 17: Create another group project-manager and assign a member Fatima to it
Show hint
Use command groupadd to add a new group.
Syntax: groupadd group-name
Create a new user with command useradd.
Use flag -G to assign a user to it.
Show solution
groupadd project-manager
useradd -G project-manager Fatima
passwd Fatima
Step 18: Navigate to folder /home/dev-team and verify if Fatima can access it
Show hint
Use cd to navigate to /home/dev-team.
Show solution
cd /home/dev-team.
We get this error:
This is because, others don’t have any access to the folder dev-team.
If we recall, below are the rights of the dev-team folder.
Wrapping up
Permissions and ownerships are useful concepts for enforcing security across multi-user operating systems. I hope you were able to learn about changing permissions and ownerships in depth.
What’s your favorite thing you learned from this tutorial? Let me know on Twitter!
You can also read my other posts here.
Thanks to Tom Mondloch for his help with the guided exercise.
Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started
В Linux права собственности на файлы и папки составляют основу управления доступом к различным возможностям операционной системы. То какому пользователю и группе принадлежит папка определяет кто сможет получить к ней доступ, создавать и удалять там файлы и другие папки и так далее.
В этой небольшой статье мы рассмотрим как сменить владельца папки Linux в графическом интерфейсе или с помощью терминала.
Вы можете изменить владельца папки с помощью файлового менеджера, например в Nautilus. Но для этого надо запустить файловый менеджер от имени суперпользователя. Откройте терминал с помощью сочетания клавиш Ctrl+Alt+T и выполните команду:
sudo nautilus
Затем найдите нужную папку, и кликните по ней правой кнопкой мыши. В открывшемся контекстном меню выберите пункт Свойства:
В появившемся окне перейдите на вкладку Права. Здесь можно изменить владельца папки и группу владельца с помощью выпадающего списка напротив соответствующего пункта:
Если вам нужно чтобы эти изменения были применены для всех вложенных папок и файлов, нажмите внизу окна кнопку Изменить права на вложенные файлы…
Вот так всё просто. Если у вас не получается запустить файловый менеджер или вы хотите работать в терминале это тоже возможно. Для того чтобы сменить владельца папки следует использовать утилиту chown. Синтаксис у неё такой:
$ chown опции новый_владелец:новая_группа /путь/к/папке
Подробнее об этой утилите вы можете просмотреть в отдельной статье. Например, чтобы сменить владельца папки ~/Видео/losst/ на testuser следует выполнить такую команду:
sudo chown testuser ~/Видео/losst
В данном случае группа останется без изменений, чтобы изменить также группу-владельца выполните:
sudo chown testuser:testuser ~/Видео/losst
Если нужно сменить владельца папки Linux рекурсивно используйте опцию -R:
sudo chown -R testuser:testuser ~/Видео/losst
Обратите внимание, что все файлы и папки, создаваемые в системе по умолчанию будут иметь владельцем пользователя, который их создаёт, а группой-владельцем — основную группу этого пользователя. Такое поведение изменить нельзя. Чтобы избежать проблем с неверно присвоенным папке владельцем в будущем запускайте программу, которая создаёт папку или файл от имени пользователя, которому папка должна принадлежать. Сделать это очень просто с помощью sudo. Например, для пользователя losst:
sudo -u losst ./script.sh
Как видите, поменять владельца папки в Linux можно очень просто. Для этого достаточно выполнить несколько команд в терминале или сделать пару щелчков мышкой.
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .
Об авторе
Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.
Поговорив о пользователях и группах, самое время вспомнить про права доступа, которые для них настраиваются. Общая схема прав одинакова и для файлов, и для папок. Вы уже видели, как система отображает права доступа, в выводе команды ls -l, которая показывает содержимое директории:

Первые 10 символов содержат информацию о правах к файлу или каталогу.
rw-
права пользователя-владельца
r--
права пользователей группы-владельца
r--
права всех остальных пользователей
Далее идёт имя пользователя-владельца и группы -владельца.
root
файл принадлежит пользователю root
root
файл принадлежит группе root
Исходя из этого, иерархия доступа на уровне пользователей разбивается следующим образом: права пользователя-владельца, права участников группы-владельца и права всех остальных.
Соответственно, для каждой категории указывается, какие операции с файлом ей доступны: чтение (r), запись (w) или выполнение (x) — для исполняемых файлов. Для директорий параметры те же, но обозначают немного другое: просмотр директории (r), создание папок / файлов (w) внутри директории, переход в директорию (x).
Каждый из этих уровней доступа можно выразить в восьмеричной системе с помощью числового значения: 4 (r), 2 (w), 1 (x). Вот так мы и получаем общую схему прав:
a — любые пользователи |
||||||||
u — права пользователя |
g — права группы |
o — права всех остальных |
||||||
r |
w |
x |
r |
w |
x |
r |
w |
x |
4 |
2 |
1 |
4 |
2 |
1 |
4 |
2 |
1 |
Для отображения уровня прав помимо формата rwxrwxrwx используется упомянутый восьмеричный формат. Для этого достаточно сложить все уровни прав по категориям:
rwxrwxrwx = (4+2+1), (4+2+1), (4+2+1) = 777
Теперь можно перейти к инструментам, которые позволяют управлять правами на файлы и директории.
Смена владельца файла или директории
Для смены владельца доступны два инструмента. Первый — chown, позволяет изменить пользователя и группу файла или папки:
chown [новый пользователь]:[новая группа] [файл или папка]
Если не указывать группу, изменится только пользователь-владелец. Если не указывать пользователя (:[новая группа]), изменится только группа-владелец.
При изменении прав на директории можно использовать параметр -R. Он рекурсивно изменит владельца всех вложенных директорий и файлов. Представим, что нам нужно предоставить права на папку new-user для одноимённого пользователя и его группы. Команда для этого будет выглядеть так:
chown -R new-user:new-group /home/users/new-user
Второй инструмент — chgrp. В отличие от первого, меняет только группу-владельца:
chgrp [группа] [файл или папка]
Как и chown, может работать рекурсивно с помощью ключа -R.
Смена прав доступа к файлу или директории
Для работы непосредственно с правами используется команда chmod:
chmod [настройки прав] [файл или папка]
При работе с директориями опция -R позволит изменить права на все вложенные файлы и папки.
Настройки прав в chmod можно определять двумя способами:
-
Указав категорию (
u— пользователь-владелец,g— группа-владелец,o— другие пользователи,a— все пользователи), модификатор (+,-,=) и, соответственно, нужные права (r,w,x).Например, представим, что у нас есть файл
example.txtс максимальным уровнем прав для всех категорий пользователей:Допустим, мы не хотим, чтобы кто-то в принципе мог запускать этот файл на выполнение. В таком случае нам нужно убрать параметр
«x»из прав всех категорий пользователей сразу. Это можно сделать так:chmod a-x example.txt
Представим, что потом мы решили вернуть владельцу права на запуск файла. То есть нам нужно добавить параметр
«x»в категорию пользователя-владельца:chmod u+x example.txt
Если вдруг мы захотим изменить весь набор параметров для отдельной категории разом, это будет выглядеть следующим образом:
chmod u=rwx example.txt
-
Указав права в виде числового значения. Возможно, это не так прозрачно, но зато быстрее. В качестве параметра нам нужно передать это самое цифровое выражение уровня прав:
chmod 777 example.txt
В примере мы назначили максимальный уровень доступа всем категориям пользователей.
Соответственно, для изменения уровня прав отдельной категории пользователей нужно изменить только это числовое значение. Например, запретим исполнение файла для всех пользователей:
chmod 666 example.txt
А потом вернём, но только пользователю-владельцу:
chmod 766 example.txt
Бывает, что нам нужно изменить права только на все папки или только на все файлы в определённой директории. Часто с этим можно столкнуться при настройке прав на файлы сайтов. Вот вам пара однострочников на этот случай:
-
Смена прав на
755для всех папок внутри/var/www/sites/example.com:find /var/www/sites/example.com/ -type d -exec chmod 755 {} ;
-
Смена прав на
644для всех файлов внутри/var/www/sites/example.com:find /var/www/sites/example.com/ -type f -exec chmod 644 {} ;
Изменение атрибутов файлов
Помимо прав доступа и владельца каждый файл может иметь ряд атрибутов, определяемых на уровне файловой системы. Атрибуты показывают, какие операции могут или не могут проводиться с файлом в принципе, независимо от того, кто им владеет.
Посмотреть атрибуты файлов в текущей директории можно с помощью команды lsattr. Если запустить её без аргументов, она выведет атрибуты всех файлов в текущей директории. Если указать путь к файлу или папке, она перечислит свойства указанного файла или списка файлов в указанной папке соответственно:
lsattr example.txt

Первые 20 символов в строке предназначены для отображения атрибутов файла.
Список атрибутов может отличаться в зависимости от файловой системы. Вот список основных:
|
|
«godmode» — файл становится неуязвим для любых изменений. Его нельзя удалить, переименовать, изменить содержимое, создать символьную ссылку на него. |
|
|
в файл с таким атрибутом можно только добавлять новые данные. Старое содержимое изменить или удалить не получится. Это пригодится для защиты от вредоносных вставок или замен в файлах, куда постоянно записываются данные — например, в логах. Доступ к изменению старого содержимого по умолчанию есть только у суперпользователя |
|
|
активирует безвозвратное удаление файла. В том смысле, что после удаления файл нельзя будет восстановить с носителя — при удалении все использовавшиеся для хранения файла блоки на диске перезаписываются нулями. |
|
|
активирует «обратимое» удаление файлов. Это значит, что при удалении файла с этим атрибутом его содержимое можно восстановить. |
|
|
сжатый файл. Все данные, записываемые в файл, автоматически сжимаются, а данные, извлекаемые из файла — возвращаются в исходное состояние. |
|
|
настраивает для файла исключение при использовании утилиты |
|
|
показывает, что файл в качестве указателей использует экстенты. |
|
|
в журналируемых файловых системах ( |
|
|
указывает, что при работе с файлом система не будет обновлять информацию о времени доступа к нему. |
|
|
атрибут для директорий. Указывает, что все изменения в папке синхронно записываются на диск, минуя кэш. |
|
|
указывает, что все изменения в файле с этим атрибутом записываются синхронно на диск, минуя кэш. |
Изменить атрибуты файла позволяет команда chattr:
chattr [модификатор][изменяемые атрибуты] [целевой файл или папка]
То есть, если нам нужно защитить какой-то важный файл от посягательств, можно использовать такую команду:
chattr +i example.txt

Проверяем — посягательства не работают.
Если же нам нужно вернуть файл в нормальное состояние, нужно выполнить обратную операцию:
chattr -i example.txt
Для просмотра более подробной информации о файловых атрибутах, их ограничениях и правилах применения используйте команду:
man chattr



































