PQ
PQ.Hosting

Валюта

Команда chmod в Linux: символьный и числовой формат, SUID, SGID и sticky bit

Автор
PQ
12 марта 2026
3 мин чтения
59 просмотров
Команда chmod в Linux: символьный и числовой формат, SUID, SGID и sticky bit

Права доступа в Linux — это не просто «кто может открыть файл». Это механизм который определяет что именно можно сделать с файлом и кому. Три вопроса к каждому файлу: кто владелец, какая группа, что разрешено остальным.

Читать права: что показывает ls -l

ls -l script.sh
-rwxr-xr-- 1 alex devops 2048 Mar 12 10:00 script.sh

Девять символов после первого - — это три тройки:

rwx — владелец (читать, писать, запускать) r-x — группа (читать, запускать, но не писать) r-- — все остальные (только читать)

Прочерк вместо буквы означает: это право отсутствует.

Числовые маски: быстро и однозначно

Каждое право имеет вес: r=4, w=2, x=1. Складываем для каждой группы:

rwx = 4+2+1 = 7 r-x = 4+0+1 = 5 rw- = 4+2+0 = 6 r-- = 4+0+0 = 4

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

Стандарт для исполняемых файлов и папок веб-сервера:

chmod 755 script.sh

Стандарт для конфигурационных файлов:

chmod 644 nginx.conf

SSH-ключ — только владелец, без этого ssh откажется его использовать:

chmod 600 ~/.ssh/id_rsa

Полный доступ всем — только когда это действительно нужно:

chmod 777 /tmp/shared

Символьный формат: менять конкретное право

Когда не нужно переписывать все права целиком — удобнее символьный формат. + добавляет право, - убирает, = устанавливает точно.

Дать владельцу право запускать:

chmod u+x deploy.sh

Убрать у группы и остальных право писать:

chmod go-w config.conf

Дать группе читать и запускать:

chmod g+rx /var/www/html

Установить точные права для остальных — только чтение, всё остальное убрать:

chmod o=r file.txt

Изменить несколько групп одной командой:

chmod u+x,go-x script.sh

Рекурсивно: для всей директории

Изменить права для папки и всего содержимого:

chmod -R 755 /var/www/mysite

Проблема -R — он ставит одинаковые права и файлам и папкам. Для файлов обычно нужно 644, для папок 755. Разделить через find:

find /var/www/mysite -type d -exec chmod 755 {} +
find /var/www/mysite -type f -exec chmod 644 {} +

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

chmod -Rc 755 /var/www/mysite

Специальные биты: SUID, SGID, sticky

SUID — файл запускается с правами владельца, а не того кто его запустил. Именно поэтому обычный пользователь может сменить пароль командой passwd — она принадлежит root и имеет SUID:

chmod u+s /usr/bin/myprogram

В выводе ls -l появится s на месте x у владельца: -rwsr-xr-x.

SGID на директории — новые файлы внутри наследуют группу папки, а не группу создателя. Удобно для командных папок где несколько человек работают с одними файлами:

chmod g+s /shared/team

Sticky bit на директории — каждый может создавать файлы, но удалять только свои. Именно так устроен /tmp:

chmod +t /shared/uploads

В выводе появится t в конце: drwxrwxrwt.

Числовые значения — четвёртая цифра в начале маски:

chmod 4755 /usr/bin/myprogram
chmod 2775 /shared/team
chmod 1777 /tmp

Шпаргалка

Задача Команда
Посмотреть права ls -l файл
Стандарт для скриптов chmod 755 файл
Стандарт для конфигов chmod 644 файл
SSH-ключ (только владелец) chmod 600 файл
Добавить право на запуск chmod u+x файл
Убрать запись у группы chmod g-w файл
Рекурсивно на папку chmod -R 755 /path/
Папки отдельно от файлов find /path -type d -exec chmod 755 {} +
Только файлы рекурсивно find /path -type f -exec chmod 644 {} +
SUID chmod u+s файл или chmod 4755 файл
SGID на директорию chmod g+s папка или chmod 2755 папка
Sticky bit chmod +t папка или chmod 1777 папка



Поделиться статьей

Похожие статьи