Файлы и права доступа: chmod, chown и всё такое

Файлы и права доступа: chmod, chown и всё такое

Ты написал деплой-скрипт, запускаешь - Permission denied. Знакомо? Это права доступа. В Linux каждый файл имеет владельца и набор разрешений.

Как читать права

9 бит прав доступа: owner, group, other по три бита rwx

ls -la
# -rw-r--r-- 1 user group 1234 Apr 22 10:00 config.yml
# drwxr-xr-x 2 user group 4096 Apr 22 10:00 scripts/

Разберём -rw-r--r--:

- rw- r-- r--
│  │    │    │
│  │    │    └── другие (other): только чтение
│  │    └─────── группа (group): только чтение
│  └──────────── владелец (user): чтение + запись
└─────────────── тип: - файл, d каталог, l ссылка

Три права: r (read), w (write), x (execute).

chmod - меняем права

chmod +x deploy.sh          # добавить право на выполнение
chmod 755 deploy.sh         # rwxr-xr-x (стандарт для скриптов)
chmod 644 config.yml        # rw-r--r-- (стандарт для конфигов)
chmod 600 .env              # rw------- (только владелец)

Числовая нотация:

ЧислоПраваЗначение
7rwxвсё
6rw-чтение + запись
5r-xчтение + выполнение
4r--только чтение
0-ничего
`chmod 777` даёт полный доступ всем. Это как оставить ключи в двери. Для скриптов - `755`, для конфигов - `644`, для секретов - `600`.

chown - меняем владельца

chown user:group file.txt           # сменить владельца и группу
chown -R www-data:www-data /var/www # рекурсивно для каталога
chown root:root /etc/nginx/nginx.conf

Типичная ситуация: nginx работает от пользователя www-data, а файлы принадлежат root. Решение - chown.

Пользователи и sudo

whoami                    # кто я
id                        # подробно: uid, gid, группы
sudo command              # выполнить от root
sudo -u postgres psql     # выполнить от другого пользователя
`sudo su` и работа от root - привычка, которая рано или поздно стоит сервера. Используй `sudo` для конкретных команд, работай от обычного пользователя.

Символические ссылки

ln -s /opt/myapp/current /opt/myapp/latest   # симлинк
ls -la /opt/myapp/latest                      # покажет → current

Симлинки используются повсеместно: /usr/bin/php → конкретная версия (php8.2), конфиги nginx в sites-enabledsites-available.

Полезные команды для файлов

file document.pdf          # определить тип файла
du -sh /var/log/           # размер каталога
df -h                      # свободное место на дисках
find / -name "*.log" -size +100M   # логи больше 100MB
which nginx                # где лежит бинарник

Мини-задание

  • Создай скрипт hello.sh с содержимым #!/bin/bash и echo "Hello"
  • Попробуй запустить ./hello.sh - получи Permission denied
  • Дай права: chmod +x hello.sh и запусти снова
  • Проверь права через ls -la hello.sh

Итог

  • Каждый файл имеет владельца, группу и три набора прав (user/group/other).
  • chmod меняет права, chown меняет владельца. Числовая нотация - быстрее.
  • 600 для секретов, 644 для конфигов, 755 для скриптов. 777 - не используй.

Типичная ошибка

Лечить Permission denied через chmod 777 или sudo. Это как открыть все двери, потому что не нашёл нужный ключ. Разберись, какому пользователю нужен доступ, и дай минимально необходимые права.

Мини-практика

Создай каталог /tmp/permissions-lab. Внутри создай три файла: public.txt (644), secret.env (600), deploy.sh (755). Проверь через ls -la, что права выставлены верно. Попробуй прочитать secret.env от другого пользователя (через sudo -u nobody cat secret.env) - должен получить отказ.

Зарегистрируйтесь бесплатно, чтобы пройти квиз, решить задание с автопроверкой и вести прогресс.