Права доступа в Linux: chmod 755, chown и umask

Linux Автор: Среда и версия: Ubuntu 24.04, GNU coreutils 9.4
содержание

У каждого файла в Linux есть владелец, группа и девять битов прав: чтение, запись и выполнение — отдельно для владельца, группы и всех остальных. Именно эта система отвечает на вопросы «почему Permission denied» и «почему скрипт не запускается». Разберём её на живых командах: свежесозданный файл, попытка запуска, chmod, chown и права по умолчанию.

Linux / 01

755 — три независимых набора прав

755 — три независимых набора правкому сумма прав -rwxr-xr-x владелец / 7 4 + 2 + 1 rwx группа / 5 4 + 0 + 1 r-x остальные / 5 4 + 0 + 1 r-xкомусумма прав-rwxr-xr-xвладелец / 74 + 2 + 1rwxгруппа / 54 + 0 + 1r-xостальные / 54 + 0 + 1r-x
Каждая цифра 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, и пользователи и группы — вторая половина системы доступа.

Источники