Кто может читать, менять и запускать каждый файл
idrwx и понимать, что они значат для файла и для каталогаchmod в символьной и числовой записи, владельца — chownumask) и как работает sudoLinux — многопользовательская система: каждая программа работает от имени какого-то пользователя, и доступ к файлам определяется этим именем. Пользователи бывают трёх видов.
| Вид | UID | Пример | Зачем |
|---|---|---|---|
| Суперпользователь | 0 | root | Может всё; проверки прав на него не действуют |
| Системные | 1–999 | www-data, postgres, sshd | От их имени работают службы; войти под ними нельзя |
| Обычные | 1000 и выше | student | Люди |
Система различает пользователей по числу UID, имя — для людей. Группа объединяет пользователей, чтобы выдать права сразу нескольким. У каждого пользователя есть основная группа (обычно с тем же именем) и дополнительные.
$ id
uid=1000(student) gid=1000(student) группы=1000(student),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),100(users),101(netdev)
Пользователь student состоит в группе sudo — поэтому ему доступна команда sudo. Остальные группы дают доступ к устройствам (звук, видео, съёмные диски).
Сведения хранятся в текстовых файлах:
$ grep student /etc/passwd
student:x:1000:1000:Student,,,:/home/student:/bin/bash
# имя :x:UID :GID :описание :домашний каталог:оболочка
$ grep ^sudo: /etc/group
sudo:x:27:student
$ cat /etc/shadow
cat: /etc/shadow: Отказано в доступе
В /etc/passwd на месте пароля стоит x: сами хеши паролей лежат в /etc/shadow, который может читать только root. Файл /etc/passwd читают все — по нему программы переводят UID в имена.
В Debian пользователей удобно создавать командой adduser: она сделает домашний каталог, скопирует в него файлы настроек из /etc/skel и спросит пароль. Вопросы о полном имени и телефоне можно пропустить клавишей Enter.
$ sudo adduser anna # создать, задать пароль
$ sudo groupadd web # создать группу
$ sudo usermod -aG web anna # добавить anna в группу web
$ groups anna
anna : anna users web
$ ls -ld /home/anna
drwx------ 2 anna anna 4096 окт 14 21:38 /home/anna
usermod -aG буква a (append) обязательна. Без неё usermod -G web anna заменит все дополнительные группы на одну web — так по ошибке лишают пользователя sudo.Новая группа начинает действовать при следующем входе пользователя: уже запущенная оболочка о ней не знает. Остальные команды:
| Команда | Что делает |
|---|---|
sudo passwd anna | Задать пароль другому пользователю; passwd без имени — себе |
sudo usermod -aG sudo anna | Дать права администратора |
sudo gpasswd -d anna web | Убрать из группы |
sudo usermod -L anna | Заблокировать вход по паролю (-U — разблокировать) |
sudo deluser --remove-home anna | Удалить вместе с домашним каталогом |
В других дистрибутивах adduser может отсутствовать — там используют низкоуровневую useradd -m -s /bin/bash anna и затем passwd anna.
У каждого файла есть владелец и группа, а права записаны тремя тройками: для владельца, для группы и для всех остальных.
$ ls -l report.txt
-rw-r----- 1 anna web 1204 окт 14 11:02 report.txt
- rw- r-- --- anna web
│ └┬┘ └┬┘ └┬┘ │ └─ группа файла
│ │ │ └─ остальные: ничего
│ │ └─ группа web: чтение
│ └─ владелец anna: чтение и запись
└─ тип: обычный файл
Права проверяются по первому совпадению: если вы владелец — действует первая тройка, даже если у группы прав больше. Если не владелец, но в группе — вторая. Иначе — третья.
Одни и те же буквы значат разное для файла и для каталога:
| Право | Для файла | Для каталога |
|---|---|---|
r — read | Читать содержимое | Видеть список имён (ls) |
w — write | Изменять содержимое | Создавать, удалять и переименовывать файлы внутри |
x — execute | Запускать как программу | Входить (cd) и обращаться к файлам по имени |
Из таблицы два неочевидных следствия. Удалить файл можно и без прав на сам файл — достаточно права w на каталог. А каталог с r, но без x показывает имена, но не пускает внутрь:
$ ls -ld dd
drw------- 2 student student 60 окт 14 21:35 dd
$ ls dd
f
$ cd dd
-bash: cd: dd: Отказано в доступе
Символьная запись меняет отдельные права: кому (u владелец, g группа, o остальные, a все), что сделать (+ добавить, - убрать, = установить ровно так) и какие права.
$ chmod u+x deploy.sh # владельцу — запуск
$ chmod go-w report.txt # группе и остальным — убрать запись
$ chmod u+x,o-r u.txt
$ ls -l u.txt
-rwxr----- 1 student student 0 окт 14 21:35 u.txt
Числовая запись задаёт все права сразу. Каждая тройка — сумма: r = 4, w = 2, x = 1.
| Число | Права | Типичное применение |
|---|---|---|
644 | rw-r--r-- | Обычный файл: владелец пишет, остальные читают |
640 | rw-r----- | Конфигурация с паролем: группа службы читает, остальные — нет |
600 | rw------- | Секреты: закрытый SSH-ключ, файл с паролем |
755 | rwxr-xr-x | Каталог или программа, доступные всем |
700 | rwx------ | Личный каталог: ~/.ssh, домашний |
$ chmod 640 u.txt
$ ls -l u.txt
-rw-r----- 1 student student 0 окт 14 21:35 u.txt
$ chmod -R g+rX shared/ # рекурсивно; X — запуск только каталогам
chmod 777 — «разрешить всем всё» — не решение проблемы с доступом, а новая проблема: любой процесс на сервере, в том числе взломанный сайт, сможет изменить файл. Ищите, от чьего имени работает программа, и давайте права ей.Сменить владельца может только root: иначе можно было бы «подарить» файл другому и обойти квоты.
$ chown root u.txt
chown: изменение владельца 'u.txt': Операция не позволена
$ sudo chown anna u.txt # владелец
$ sudo chown anna:web u.txt # владелец и группа
$ sudo chown -R www-data:www-data /var/www/site # рекурсивно
Типичная задача: каталог, где пишут несколько человек. Создаём общую группу, отдаём ей каталог и выставляем права:
$ sudo mkdir /srv/shared
$ sudo chown root:web /srv/shared
$ sudo chmod 2775 /srv/shared # 2 — setgid: новые файлы получат группу web
$ ls -ld /srv/shared
drwxrwsr-x 2 root web 4096 окт 14 11:20 /srv/shared
Новый файл создаётся с правами 666, каталог — 777, из которых вычитаются биты маски umask.
$ umask
0002
$ touch u.txt; mkdir ud; ls -ld u.txt ud
drwxrwxr-x 2 student student 40 окт 14 21:35 ud
-rw-rw-r-- 1 student student 0 окт 14 21:35 u.txt
Маска 002 убирает запись для остальных: 666 → 664, 777 → 775. Это безопасно, потому что в Debian у каждого пользователя своя основная группа из него одного. У root и во многих других дистрибутивах маска 022 — файлы получаются 644. Изменить маску на сеанс — umask 027, навсегда — в ~/.bashrc.
sudo выполняет одну команду от имени root и записывает её в журнал. Пароль спрашивается ваш, а не root, и запоминается на 15 минут. Кому что разрешено — в /etc/sudoers; в Debian там строка %sudo ALL=(ALL:ALL) ALL: участники группы sudo могут выполнять любые команды.
$ sudo apt update # одна команда от root
$ sudo -u postgres psql # от имени другого пользователя
$ sudo -i # оболочка root — только когда без неё никак, выход exit
$ sudo visudo # править sudoers только так: проверяет синтаксис
/etc/sudoers отключает sudo для всех — без пароля root систему придётся чинить через загрузку в режиме восстановления. Поэтому файл правят только через visudo, а свои правила кладут отдельными файлами в /etc/sudoers.d/.Кроме rwx, в правах встречаются особые биты:
$ ls -ld /tmp /usr/bin/passwd
drwxrwxrwt 12 root root 3100 окт 14 21:35 /tmp
-rwsr-xr-x 1 root root 118168 апр 19 2025 /usr/bin/passwd
| Бит | Где виден | Смысл |
|---|---|---|
| setuid (4000) | s у владельца: /usr/bin/passwd | Программа работает с правами владельца файла. passwd запускает любой, а записать новый пароль в /etc/shadow она может, потому что работает как root |
| setgid (2000) | s у группы: общий каталог | Новые файлы в каталоге получают его группу |
| sticky (1000) | t у остальных: /tmp | Писать могут все, а удалять — только свои файлы |
/etc/passwd, группы — /etc/group, хеши паролей — /etc/shadowusermod -aG: без -a остальные группы пропадутx — право войтиchmod 640 или chmod g+r; 600 — секреты, 644 — обычные файлы, 755 — каталоги и программыsudo chown пользователь:группаsudo — одна команда от root с записью в журнал; sudoers правится через visudo