У каждого файла в Linux есть владелец, группа и девять битов прав: чтение, запись и выполнение — отдельно для владельца, группы и всех остальных. Именно эта система отвечает на вопросы «почему Permission denied» и «почему скрипт не запускается». Разберём её на живых командах: свежесозданный файл, попытка запуска, chmod, chown и права по умолчанию.
755 — три независимых набора прав
chmod 755 — сумма прав одной роли: чтение 4, запись 2, выполнение 1. Семёрка владельцу, по пятёрке группе и остальным.Как читать ls -l
Подробный формат ls -l начинается с колонки прав:
ls -l deploy.sh
-rw-r--r-- 1 root root 41 Aug 12 10:00 deploy.sh
Первый символ — тип записи: - файл, d каталог, l символическая ссылка. Дальше три триады по три бита: rw- для владельца (root), r-- для группы (второй root в строке), r-- для всех остальных. Буквы фиксированы по местам: r — читать, w — писать, x — выполнять, дефис — права нет.
Числовая запись: chmod 755
Свежий скрипт с правами rw-r--r-- запустить нельзя — бита x нет ни у кого:
./deploy.sh
bash: ./deploy.sh: Permission denied
chmod меняет права. В числовой записи каждая цифра — сумма: чтение 4, запись 2, выполнение 1:
chmod 755 deploy.sh
ls -l deploy.sh
./deploy.sh
-rwxr-xr-x 1 root root 41 Aug 12 10:00 deploy.sh
деплой пошёл
755 — это rwx владельцу (4+2+1) и r-x группе и остальным (4+1). Вторая ходовая комбинация — 644: файл с данными, который никому не нужно выполнять. 600 — приватный файл вроде SSH-ключа: только владелец, только чтение и запись.
Символьная запись: u+x
Когда нужно тронуть один бит, а не переписать все девять, удобнее буквы. u — владелец, g — группа, o — остальные, a — все сразу:
chmod u+x deploy.sh
ls -l deploy.sh
-rwxr--r-- 1 root root 41 Aug 12 10:00 deploy.sh
Исходные 644 остались нетронутыми, добавился только x владельцу. Самый частый вызов этой формы — chmod +x script.sh: сделать скрипт исполняемым, не думая про остальные биты.
Владелец и группа: chown
chmod меняет права, chown — кому они принадлежат. Формат владелец:группа:
chown alice:dev report.txt
chmod 640 report.txt
ls -l report.txt
-rw-r----- 1 alice dev 33 Aug 12 10:00 report.txt
Комбинация 640 + группа dev — стандартный рецепт «файл команды»: alice пишет, участники группы dev читают, посторонним нет доступа вовсе. Проверим с пользователем, которого в группе нет:
cat report.txt
cat: report.txt: Permission denied
После usermod -aG dev имя_пользователя и перелогина тот же cat спокойно печатает файл. Так права раздают командам, а не людям по одному — подробнее в статье про пользователей и группы.
umask: откуда берутся права нового файла
Права по умолчанию — не константа, а результат вычитания маски. Текущую маску показывает umask:
umask
touch fresh.txt
ls -l fresh.txt
0002
-rw-rw-r-- 1 ubuntu ubuntu 0 Aug 12 10:00 fresh.txt
Файлы создаются от базы 666, каталоги — от 777, и маска отнимает биты. У обычного пользователя Ubuntu маска 0002 — новые файлы получают 664. На серверах чаще 0022 — файлы 644. Более строгая маска закрывает файлы от чужих глаз с момента создания:
umask 027
touch locked.txt
ls -l locked.txt
-rw-r----- 1 ubuntu ubuntu 0 Aug 12 10:00 locked.txt
666 минус биты 027 — это 640: остальные не видят файл вообще.
Ошибки, на которых спотыкаются
chmod 777 как универсальная отмычка. Она действительно «чинит» Permission denied — открывая файл на запись любому процессу в системе. Правильный вопрос не «как снять ограничение», а «какой роли какого бита не хватает»: чаще всего ответ — u+x или добавление пользователя в группу.
Каталог без бита x. На каталоге x означает «право войти». С правами 644 каталог позволяет прочитать список имён (ls сработает), но cd внутрь ответит Permission denied, как и доступ к любому файлу внутри. Рабочие права каталога — 755 или 750.
usermod -aG без перелогина. Группы выдаются процессу при входе в систему. Пока сессия старая, Permission denied никуда не денется, и кажется, что команда «не сработала».
chmod -R 777 на всякий случай. Рекурсивная раздача полного доступа ломает и безопасность, и софт: SSH, например, отказывается работать с ключами, доступными кому-то кроме владельца.
Частые вопросы
Что значит chmod 755 и chmod 644
755 — владельцу всё, остальным чтение и выполнение: стандарт для скриптов и каталогов. 644 — владельцу чтение и запись, остальным только чтение: стандарт для файлов с данными. Расшифровка всегда одна: цифра = r4 + w2 + x1.
Как сделать файл исполняемым
chmod +x script.sh, затем запускать ./script.sh. Точка со слэшем обязательна: без пути шелл ищет команду в PATH, а не в текущем каталоге.
Чем chmod отличается от chown
chmod меняет биты прав, chown — владельца и группу, к которым эти биты применяются. Менять владельца может только root, поэтому chown почти всегда живёт под sudo.
Почему ls каталог показывает, а cd внутрь не пускает
Чтение списка имён — бит r, вход внутрь — бит x. Каталог с r без x даёт первое и запрещает второе. Для нормальной работы каталогу нужны оба.
Где потренироваться
Разбор 755, sticky-бит и umask — постоянные гости вопросов на собеседовании по Linux и скилл-теста. Рядом в справочнике: основные команды, где впервые встретился ls -l, и пользователи и группы — вторая половина системы доступа.