Permission denied в Linux: 10 случаев, включая /dev/null

Тестовая средаСемейство RHELAlmaLinux 9.8Учётная запись rootDebian 12 обычная учётная записьПроверено 2026-11-05
Как найти причину Permission denied

Permission denied — это ошибка Linux, которая появляется, когда у текущей учётной записи нет прав на этот файл, папку или команду. Определите свой случай по имени команды и пути в начале строки ошибки, проверьте права и владельца через ls -l и запустите снова с подходящими правами или от подходящей учётной записи — так проблема решается.

Вывод ниже получен в учётной записи root на сервере AlmaLinux 9.8 и в обычной учётной записи на сервере Debian 12; имена учётных записей и хостов, а также время в выводе /dev/null — примерные значения.

1️⃣ Как найти причину Permission denied

Строка ошибки заканчивается в виде [команда: цель: Permission denied], а по имени команды и пути перед ней видно, где произошла блокировка. На схеме ниже выберите сообщение об ошибке, похожее на то, что у вас на экране, и вы увидите, какую команду проверить первой и какой раздел этой статьи прочитать.

🧭 Выберите свой случай по сообщению об ошибке
Поясняющая схема
🧭 Сообщение об ошибке
Сообщение об ошибкеcat: secret.txt: Permission deniedls: cannot access 'web/index.html': Permission denied./deploy.sh: Permission deniedls: cannot open directory '/proc/1/fd': Permission deniedbash: /root/test.txt: Permission denieduser@server1: Permission denied (publickey)(13)Permission denied-bash: /dev/null: Permission denied
➜
Сначала проверьтеls -l secret.txtls -ld webls -l deploy.shidsudo sh -cПрава домашней папки и файловgetenforce · findmntls -l /dev/null
➜
Раздел этой статьи🔲 Права на чтение и запись файлов🔲 Право прохода через папку🔲 Право на выполнение🔲 Чтение сведений, доступных только root🔲 Когда > блокируется даже с sudo🔲 Вход по SSH отклонён3️⃣ Редкие ошибки Permission denied🔲 Когда /dev/null стал обычным файлом
Если команду, которая читает или меняет файл, отклонили, сначала проверьте права r и w этого файла и его владельца.
Если в ошибке есть имя папки из середины пути, проверьте, есть ли у этой папки право x.
Если прямой запуск скрипта отклонён, проверьте, есть ли у файла право x.
Если чтение системных сведений из обычной учётной записи заблокировано, проверьте текущую учётную запись и запустите снова от root.
Если перенаправление > блокируется даже с sudo, выполняйте от root и само перенаправление.
Если перед ошибкой стоят учётная запись и адрес сервера, вход отклонён на этапе аутентификации.
Если отказ приходит, хотя права верны или запуск шёл от root, проверьте SELinux, noexec и биты выполнения.
Если эта строка повторяется сразу после входа, проверьте, не стал ли /dev/null обычным файлом.

2️⃣ Частые ошибки Permission denied

🔲 Права на чтение и запись файлов

Чтобы прочитать файл, учётной записи нужно право на чтение (r), а чтобы изменить его или создать новый — право на запись (w). Файл secret.txt с правами 600 может читать и записывать только его владелец root.

ls -l secret.txt
-rw------- 1 root root 16 Oct 29 00:29 secret.txt
runuser -u daemon -- cat secret.txt
cat: secret.txt: Permission denied

Чтение того же файла от другой учётной записи, daemon, сразу отклонили. Создание файла в папке без права на запись даёт ту же ошибку: на сервере Debian 12 в обычной учётной записи touch заблокировали в папке lock с правами 000.

touch ~/touchtest/lock/x.txt
touch: cannot touch '/home/user/touchtest/lock/x.txt': Permission denied

В первом столбце ls -l проверьте по порядку для владельца, группы и остальных учётных записей, есть ли r и w, а затем добавьте права только нужной учётной записи через chmod или смените владельца через chown.

🔲 Право прохода через папку

Даже если права файла верны, до него не добраться, если у папки в середине пути нет права x. Для папки x — это право пройти через неё внутрь, а r — право прочитать список имён внутри.

web/ ── drw-r--r-- · r есть · x нет → блокировка здесь
css/ ── имя видно, права · размер ?
style.css ── недоступен
index.html ── имя видно, права · размер ?
ls -ld web web/css
drw-r--r-- 3 root root 35 Oct 29 00:29 web
drw-r--r-- 2 root root 23 Oct 29 00:29 web/css
runuser -u daemon -- ls -l web
ls: cannot access 'web/css': Permission denied
ls: cannot access 'web/index.html': Permission denied
total 0
d????????? ? ? ? ?            ? css
-????????? ? ? ? ?            ? index.html

У папки web есть только r, поэтому daemon прочитал имена внутри, css и index.html, но без x права и размеры остались вопросительными знаками. И наоборот, у папки site есть x, но нет r: список заблокирован, а файл с заранее известным именем прочитать удалось.

ls -ld site
drwx--x--x 2 root root 24 Oct 29 00:29 site
runuser -u daemon -- ls site
ls: cannot open directory 'site': Permission denied
runuser -u daemon -- cat site/index.html
<h1>index</h1>

Если путь длинный, проверьте через ls -ld папку за папкой сверху, есть ли x, и добавьте заблокированной папке только тот x, который нужен учётной записи для прохода.

🔲 Право на выполнение

Чтобы запустить скрипт как ./имя файла, у файла должно быть право x. Запуск deploy.sh с правами 644 отклонили.

ls -l deploy.sh
-rw-r--r-- 1 root root 8 Oct 29 00:29 deploy.sh
./deploy.sh
bash: line 1: ./deploy.sh: Permission denied

После того как chmod u+x добавил владельцу x, первый столбец стал [-rwxr--r--].

chmod u+x deploy.sh
ls -l deploy.sh
-rwxr--r-- 1 root root 8 Oct 29 00:29 deploy.sh

Если запуск отклоняется даже при праве x, проверьте, не смонтирована ли файловая система с этим файлом с noexec.

🔲 Чтение сведений, доступных только root

Обычная учётная запись не может читать сведения, которые система оставляет только для root, например процессы, запущенные root, или данные паролей других учётных записей. На сервере Debian 12 открытие папки fd процесса 1 из обычной учётной записи дало ошибку прав.

ls /proc/1/fd
ls: cannot open directory '/proc/1/fd': Permission denied
chage -l daemon
chage: Permission denied.

Данные о сроке действия пароля другой учётной записи заблокированы по той же причине; /etc/shadow, где они хранятся, — файл, который обычные пользователи читать не могут. При таких ошибках не расширяйте права, а запустите команду снова через sudo или от root.

🔲 Когда > блокируется даже с sudo

sudo запускает от root только команду, записанную после него, а открытие файла для перенаправления (>) выполняет оболочка текущей учётной записи ещё до запуска команды. Поэтому, если перенаправить вывод sudo echo в файл, писать в который может только root, строка ошибки начнётся с имени оболочки, в виде [bash: путь к файлу: Permission denied].

sudo echo x > /root/test.txt

Чтобы и перенаправление шло от root, оберните всю строку в sh -c, чтобы сама оболочка запускалась через sudo; в официальном руководстве sudo тоже есть пример запуска внутри sh -c, чтобы перенаправление сработало.

sudo sh -c 'echo x > /root/test.txt'

tee принимает стандартный ввод и пишет его прямо в указанные файлы, поэтому при запуске tee через sudo файл открывает tee с правами root. Кроме того, tee ещё раз выводит полученное на экран.

echo x | sudo tee /root/test.txt

🔲 Вход по SSH отклонён

Если перед Permission denied стоит [учётная_запись@адрес_сервера:], а в скобках указан способ аутентификации, например publickey, вход отклонён на этапе аутентификации, и проверять нужно не права файлов. На сервере у sshd параметр StrictModes стоит в значении по умолчанию yes, поэтому перед приёмом входа он проверяет права и владельца домашней папки и файлов этой учётной записи. Если хотя бы одно из трёх — домашняя папка, папка ~/.ssh или ~/.ssh/authorized_keys — доступно на запись другой учётной записи, sshd не использует этот файл ключей; поэтому проверьте через ls -ld, что ни одно из трёх не даёт другим учётным записям право w.

⌨️ Симулятор Permission denied

Симулятор ниже запускается от учётной записи root, а с помощью runuser вы можете стать другой учётной записью, daemon, и сами увидеть вывод, когда блокируются чтение файлов, проход через папки и право на выполнение.

Симулятор Permission deniedcoreutils 8.32
[root@server1 work]#
Работает только в вашем браузере. Запускается от учётной записи root; добавьте cat или ls после runuser -u daemon --, чтобы увидеть вывод от другой учётной записи, daemon.

3️⃣ Редкие ошибки Permission denied

Если отказ приходит, хотя права верны, заблокировало что-то вне битов прав, например политика SELinux или монтирование с noexec. Если запуск отклоняется даже от root, проверьте, нет ли у файла вообще ни одного бита x.

На сервере с включённым SELinux Permission denied появляется, когда политика SELinux блокирует действие, даже если биты прав верны; в этом случае сначала проверьте записи об отказах SELinux. На серверах, где работает демон audit, отказы записываются в /var/log/audit/audit.log как [avc: denied] вместе с заблокированным действием, именем команды (comm) и именем цели (name).

Проверьте через getenforce, включён ли SELinux, и запустите ausearch от root, чтобы посмотреть сегодняшние отказы.

getenforce
ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts today

С демоном rsync ошибка [Permission denied (13)] при приёме файлов тоже была случаем, когда SELinux блокировал доступ к пути модуля.

В файловой системе, смонтированной с noexec, файлы нельзя запускать напрямую, поэтому даже если ls -l показывает x, их отклоняют с [bash: путь к скрипту: Permission denied]. Передайте папку команде findmnt -T, и вы увидите, где она смонтирована и с какими параметрами; если среди параметров есть noexec, это ваш случай.

findmnt -T /tmp -o TARGET,OPTIONS

root проходит большинство проверок прав, но выполнение разрешено, только если x есть хотя бы у одного из трёх: владельца, группы или остальных учётных записей. Поэтому скрипт совсем без x отклоняется, даже когда root запускает его через ./.

Запуск через ./ от root файла deploy.sh с первым столбцом [-rw-r--r-- 1 root root] выдал [bash: line 1: ./deploy.sh: Permission denied].

🔲 Когда /dev/null стал обычным файлом

Если сразу после входа по SSH в обычную учётную запись строки ниже идут одна за другой ещё до приглашения оболочки, сначала проверьте, не стал ли /dev/null — символьное устройство, через которое все учётные записи отбрасывают вывод, — обычным файлом, принадлежащим root. Число строк зависит от сервера, то есть от количества скриптов profile, читаемых при входе, а на том же сервере после переключения на root ошибка не появлялась.

-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
...
ls -l /dev/null
-rw-r--r-- 1 root root 55 Jan 10 09:00 /dev/null
stat -c %F /dev/null
regular file

Первый столбец был [-rw-r--r--], а на месте размера стояло 55: в файле накопился текст ошибок, отброшенный другими командами. Если строка команд очистки, содержащая конструкцию ниже, выполняется от root, rm удаляет файл устройства, а перенаправление 2>/dev/null следующей команды создаёт под тем же именем новый обычный файл, принадлежащий root.

rm -f /dev/null 2>/dev/null

Выполните строку ниже от root. Если создать новое устройство под соседним именем, а затем перезаписать через mv, имя ни на миг не пропадает, и между удалением и созданием не остаётся окна, в котором другое перенаправление снова создаст обычный файл.

mknod -m 666 /dev/null.new c 1 3 && mv -f /dev/null.new /dev/null && ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Jan 10 09:05 /dev/null
stat -c %F /dev/null
character special file

[c 1 3] в mknod — это номер /dev/null в списке номеров устройств ядра. После восстановления echo x > /dev/null из обычной учётной записи тоже завершилось без ошибок. Перезагрузка тоже может всё вернуть, но одна строка выше, которая не останавливает сервер, быстрее.

ПроверкаДо исправленияПосле исправления
Первый столбец ls -l-rw-r--r--crw-rw-rw-
Размер в ls -l551, 3
stat -c %Fregular filecharacter special file
Запись из обычной учётной записиPermission deniedОшибки нет

Выводите отбрасываемый вывод только в >/dev/null или 2>/dev/null и, кроме случаев восстановления, никогда не указывайте /dev/null как цель rm или mv.

🔢 FAQ & рекомендуемые материалы

При попытке записи в файловую систему, смонтированную только для чтения, появляется [Read-only file system] — это другая ошибка (EROFS), чем Permission denied. В этом случае прежде прав проверьте, с какими параметрами смонтирована эта файловая система.

Если открыть чтение, запись и выполнение для всех учётных записей, этот Permission denied исчезнет, но изменять файл смогут и другие учётные записи. Добавить права только нужной учётной записи или сменить владельца — так охват уже.

Если только расширить права, Permission denied исчезнет, но /dev/null останется обычным файлом, и отброшенный вывод будет и дальше копиться в нём. Восстановленным как устройство он считается, только когда stat снова показывает character special file.

ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Докажите, что вы человек: 9   +   7   =