Введение / Зачем это нужно
В Linux каждая файловая система имеет строгую модель безопасности: каждый файл и директория имеют владельца (пользователя и группу) и права доступа (что может делать каждый: читать, писать, выполнять). Команды chown (change owner) и chmod (change mode) — это основные инструменты для управления этими настройками. Без них вы не сможете корректно настраивать доступ к файлам, запускать скрипты или защищать конфиденциальные данные. Этот гайд научит вас использовать эти команды на практике.
Требования / Подготовка
- Доступ к терминалу Linux (Ubuntu, Debian, CentOS или любая другая дистрибутив).
- Базовое понимание структуры файловой системы (что такое файл, директория, путь).
- Для изменения владельца (
chown) или прав на файлы, принадлежащие другим пользователям, потребуются права суперпользователя (sudo). Если вы работаете со своими файлами — sudo не нужен. - Рекомендуется создать тестовую директорию и файлы, чтобы экспериментировать без риска:
mkdir ~/test_permissions
touch ~/test_permissions/file1.txt ~/test_permissions/script.sh
Шаг 1: Проверка текущих прав и владельца
Прежде чем что-то менять, нужно понять текущее состояние. Используйте команду ls -l (long list).
ls -l ~/test_permissions/
Пример вывода:
-rw-r--r-- 1 alex users 0 Feb 16 12:00 file1.txt
-rw-r--r-- 1 alex users 0 Feb 16 12:00 script.sh
Разберем строку для file1.txt:
-— тип (дефис = обычный файл,d= директория).rw-— права владельца (alex): чтение (r), запись (w), выполнение (x).r--— права группы (users): только чтение.r--— права остальных: только чтение.1— количество жестких ссылок.alex— владелец (пользователь).users— группа-владелец.0— размер в байтах.- Далее — дата, время, имя.
Запомните: 9 символов прав делятся на три триады: владелец (user), группа (group), остальные (others). Каждая триада — это биты rwx (чтение, запись, выполнение), где отсутствующая возможность заменяется на -.
Шаг 2: Изменение владельца (chown)
Команда chown меняет пользователя и/или группу-владельца файла. Синтаксис:
sudo chown [пользователь][:группа] файл
Пример 1: Изменить только владельца
sudo chown bob file1.txt
После этого владельцем file1.txt станет пользователь bob, группа останется users.
Пример 2: Изменить владельца и группу одновременно
sudo chown bob:devs file1.txt
Теперь владелец — bob, группа — devs.
Пример 3: Рекурсивно изменить владельца для директории и всего содержимого
sudo chown -R alice:developers /home/alice/project
Ключ -R (recursive) применяет изменение ко всем вложенным файлам и поддиректориям.
⚠️ Важно: Будьте осторожны с рекурсивным
chownна системных директориях (/etc,/usr). Это может нарушить работу системы. Всегда проверяйте путь.
Шаг 3: Изменение прав доступа (chmod)
Команда chmod меняет права (rwx). Есть два основных способа: числовой (octal) и символьный.
Числовой метод (octal)
Каждой тройке прав (rwx) соответствует число от 0 до 7, где:
r= 4w= 2x= 1 Суммируем нужные биты.
Пример: rwx = 4+2+1 = 7, rw- = 4+2+0 = 6, r-x = 4+0+1 = 5, r-- = 4.
Команда: chmod [число] файл
Примеры:
chmod 755 script.sh # Владелец: rwx (7), группа и остальные: r-x (5)
chmod 644 file1.txt # Владелец: rw- (6), группа и остальные: r-- (4)
chmod 777 temp.log # Все: rwx (используйте с осторожностью!)
Символьный метод
Более гибкий: вы добавляете/убираете/устанавливаете права для конкретной категории (u=user, g=group, o=others, a=all).
Операторы:
+— добавить право.-— убрать право.=— точно задать (остальные сбросятся).
Примеры:
chmod u+x script.sh # Добавить выполнение (x) владельцу (u)
chmod go-w file1.txt # Убрать запись (w) у группы (g) и остальных (o)
chmod a=r file1.txt # Все (a) получили только чтение (r)
chmod ug=rwx,o= script.sh # Владелец и группа: rwx, остальные: никаких
Символьный метод удобен для точечных изменений, числовой — для быстрой установки стандартных наборов.
Шаг 4: Часто используемые комбинации прав
Знайте эти «магические» числа:
755— стандарт для исполняемых файлов и скриптов (владелец может всё, остальные — чтение и выполнение).644— стандарт для обычных файлов (владелец читает/пишет, остальные только читают).700— только владелец имеет полный доступ (для конфиденциальных файлов).777— полный доступ всем (опасно, используйте только для временных общих ресурсов).750— владелец: всё, группа: чтение/выполнение, остальные: ничего.
Шаг 5: Практические примеры
Пример 1: Сделать скрипт исполняемым
chmod +x script.sh
Или числовым: chmod 755 script.sh. Теперь скрипт можно запустить как ./script.sh.
Пример 2: Разрешить группе запись в общую директорию
sudo chown :developers /shared_folder # Меняем группу-владельца на developers
sudo chmod 775 /shared_folder # Владелец и группа: rwx, остальные: r-x
Теперь все пользователи из группы developers могут создавать/удалять файлы в /shared_folder.
Пример 3: Забрать у остальных право на чтение конфиденциального файла
chmod 640 config.ini # Владелец: rw-, группа: r--, остальные: ---
Остальные (не входящие в группу) не увидят файл.
Пример 4: Установить sticky bit для общей директории (например, /tmp)
Sticky bit (бит t) заставляет файлы удалять только их владельца, даже если директория доступна на запись всем.
chmod +t /shared_folder
Права изменятся на drwxrwxrwt (виден символ t вместо x для остальных).
Проверка результата
После каждого изменения проверяйте:
ls -l файл_или_директория
Убедитесь, что:
- Владелец и группа изменились (после
chown). - Правые 9 символов соответствуют ожидаемым (после
chmod).
Для директорий с рекурсивными изменениями проверьте несколько вложенных файлов.
Возможные проблемы
Проблема 1: «Operation not permitted» при chown/chmod
Причина: Вы не владелец файла и не используете sudo, либо пытаетесь изменить права на файл, который вы не владеете, а у вас нет прав CAP_CHOWN (обычно только у root). Решение:
- Для своих файлов: убедитесь, что вы владелец (
ls -l). - Для чужих/системных файлов: используйте
sudo(если у вас есть права sudo) или обратитесь к администратору. - Не меняйте владельца/права на системные файлы (
/bin,/etc,/usr) без крайней необходимости.
Проблема 2: Скрипт не выполняется, хотя стоит +x
Причина: Возможно, на файловой системе, где лежит скрипт, не поддерживается выполнение (например, смонтирована с опцией noexec), или в первой строке скрипта указан неверный интерпретатор (shebang).
Решение:
- Проверьте, смонтирована ли файловая система с
noexec(mount | grep /путь). - Убедитесь, что скрипт начинается с
#!/bin/bash(или другого корректного пути к интерпретатору). - Запускайте скрипт явно:
bash script.sh(если нет x-бита).
Проблема 3: Рекурсивный chown/chmod затронул больше, чем нужно
Причина: Ошибка в пути или забыли про -R (или наоборот, использовали -R в неправильной директории).
Решение: Всегда проверяйте путь перед рекурсивной операцией. Для отката можно использовать find с -exec или восстановить из бэкапа. Будьте внимательны!
Проблема 4: Группа не меняется при chown пользователь:группа
Причина: Указанной группы не существует в системе.
Решение: Предварительно создайте группу (sudo groupadd группа) или используйте существующую (getent group для просмотра).
Проблема 5: После chmod 777 файл стал доступен всем, но это небезопасно
Решение: Немедленно верните разумные права, например, chmod 755 файл для исполняемых или chmod 644 файл для обычных. Избегайте 777 на постоянной основе.