4. Права доступа: chmod, chown
Зачем нужны права доступа?
Заголовок раздела «Зачем нужны права доступа?»Linux — многопользовательская система. Права доступа определяют, кто может читать, изменять и запускать каждый файл. Это основа безопасности Unix-систем, существующая с 1970-х годов.
Как читать права: ls -la
Заголовок раздела «Как читать права: ls -la»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 ссылкаСимволы прав: rwx
Заголовок раздела «Символы прав: rwx»| Символ | Значение для файла | Значение для директории |
|---|---|---|
r | Читать файл | Видеть содержимое (ls) |
w | Изменять файл | Создавать/удалять файлы |
x | Запускать файл | Входить в директорию (cd) |
- | Право отсутствует | Право отсутствует |
Числовая запись прав
Заголовок раздела «Числовая запись прав»Каждое право имеет числовое значение:
r= 4w= 2x= 1-= 0
Складываем для каждой группы:
rwx = 4+2+1 = 7rw- = 4+2+0 = 6r-x = 4+0+1 = 5r-- = 4+0+0 = 4--- = 0+0+0 = 0Распространённые комбинации:
644 → rw-r--r-- (обычный файл)755 → rwxr-xr-x (исполняемый файл, директория)600 → rw------- (приватный файл)777 → rwxrwxrwx (полный доступ всем — опасно!)chmod — изменение прав
Заголовок раздела «chmod — изменение прав»Числовой метод
Заголовок раздела «Числовой метод»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 — изменение владельца
Заголовок раздела «chown — изменение владельца»chown newuser file.txt # сменить владельцаchown newuser:newgroup file.txt # сменить владельца и группуchown :newgroup file.txt # сменить только группуchown -R user:group mydir/ # рекурсивноsudo chown root:root /etc/hosts # нужны права rootchgrp — изменение группы
Заголовок раздела «chgrp — изменение группы»chgrp developers file.txt # сменить группуchgrp -R www-data /var/www/ # рекурсивноСпециальные биты
Заголовок раздела «Специальные биты»Setuid (4000)
Заголовок раздела «Setuid (4000)»Файл запускается с правами владельца, а не запускающего пользователя.
chmod u+s /usr/bin/passwd # passwd может изменять /etc/shadowls -la /usr/bin/passwd# -rwsr-xr-x ... (s вместо x)Setgid (2000)
Заголовок раздела «Setgid (2000)»Файлы в директории наследуют группу директории.
chmod g+s /shared/project/Sticky bit (1000)
Заголовок раздела «Sticky bit (1000)»Файлы в директории может удалять только владелец.
chmod +t /tmp # /tmp защищён sticky bitls -la / | grep tmp# drwxrwxrwt ... tmp (t в конце)Практические сценарии
Заголовок раздела «Практические сценарии»# Сделать скрипт исполняемымchmod +x deploy.sh./deploy.sh
# Защитить приватный ключ SSHchmod 600 ~/.ssh/id_rsachmod 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/nullfind / -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.txtchmod 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Понимание прав доступа — критически важно для безопасности любого сервера!