Перейти к содержимому

4. Права доступа: chmod, chown

Linux — многопользовательская система. Права доступа определяют, кто может читать, изменять и запускать каждый файл. Это основа безопасности Unix-систем, существующая с 1970-х годов.

Окно терминала
ls -la
# drwxr-xr-x 2 user group 4096 Mar 15 10:30 mydir
# -rw-r--r-- 1 user group 1234 Mar 14 09:15 file.txt
# lrwxrwxrwx 1 user group 12 Mar 13 08:00 link -> target

Разбираем строку прав:

-rw-r--r--
│└──┴──┴──
│ │ │ └── Другие пользователи (others)
│ │ └────── Группа (group)
│ └────────── Владелец (user/owner)
└──────────── Тип: - файл, d директория, l ссылка
СимволЗначение для файлаЗначение для директории
rЧитать файлВидеть содержимое (ls)
wИзменять файлСоздавать/удалять файлы
xЗапускать файлВходить в директорию (cd)
-Право отсутствуетПраво отсутствует

Каждое право имеет числовое значение:

  • r = 4
  • w = 2
  • x = 1
  • - = 0

Складываем для каждой группы:

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

Распространённые комбинации:

644 → rw-r--r-- (обычный файл)
755 → rwxr-xr-x (исполняемый файл, директория)
600 → rw------- (приватный файл)
777 → rwxrwxrwx (полный доступ всем — опасно!)
Окно терминала
chmod 644 file.txt # rw-r--r-- (обычный файл)
chmod 755 script.sh # rwxr-xr-x (исполняемый скрипт)
chmod 700 private.key # rwx------ (только владелец)
chmod 777 public/ # rwxrwxrwx (всем всё — осторожно!)
chmod -R 755 mydir/ # рекурсивно для директории
Окно терминала
# Синтаксис: chmod [ugoa][+-=][rwx] файл
# u=user, g=group, o=others, a=all
chmod +x script.sh # добавить выполнение для всех
chmod u+x script.sh # добавить выполнение только владельцу
chmod g-w file.txt # убрать запись у группы
chmod o= file.txt # убрать все права у остальных
chmod a=r file.txt # всем только чтение
chmod u=rwx,g=rx,o=r file # установить конкретные права
Окно терминала
chown newuser file.txt # сменить владельца
chown newuser:newgroup file.txt # сменить владельца и группу
chown :newgroup file.txt # сменить только группу
chown -R user:group mydir/ # рекурсивно
sudo chown root:root /etc/hosts # нужны права root
Окно терминала
chgrp developers file.txt # сменить группу
chgrp -R www-data /var/www/ # рекурсивно

Файл запускается с правами владельца, а не запускающего пользователя.

Окно терминала
chmod u+s /usr/bin/passwd # passwd может изменять /etc/shadow
ls -la /usr/bin/passwd
# -rwsr-xr-x ... (s вместо x)

Файлы в директории наследуют группу директории.

Окно терминала
chmod g+s /shared/project/

Файлы в директории может удалять только владелец.

Окно терминала
chmod +t /tmp # /tmp защищён sticky bit
ls -la / | grep tmp
# drwxrwxrwt ... tmp (t в конце)
Окно терминала
# Сделать скрипт исполняемым
chmod +x deploy.sh
./deploy.sh
# Защитить приватный ключ SSH
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
# Настроить веб-сервер
sudo chown -R www-data:www-data /var/www/html/
sudo chmod -R 755 /var/www/html/
# Найти файлы с опасными правами
find / -perm -777 -type f 2>/dev/null
find / -perm /4000 -type f 2>/dev/null # setuid файлы
Окно терминала
# 1. Создай тестовые файлы
touch ~/test_perms.txt ~/test_script.sh
# 2. Посмотри текущие права
ls -la ~/test_perms.txt ~/test_script.sh
# 3. Измени права
chmod 644 ~/test_perms.txt
chmod 755 ~/test_script.sh
# 4. Проверь результат
ls -la ~/test_perms.txt ~/test_script.sh
# 5. Числа → символы
stat -c "%a %n" ~/test_perms.txt # показывает числовые права
# 6. Очисти
rm ~/test_perms.txt ~/test_script.sh

Понимание прав доступа — критически важно для безопасности любого сервера!