Ви вводите команду, сподіваючись на гладке виконання, а замість того отримуєте:
bash: ./deploy.sh: Permission denied.
Це та дратувальна помилка, яка зупиняє розгортання, зриває збірки чи блокує оновлення сервера — і часто змушує витрачати години на полювання за одним-єдиним прапорцем прав доступу. Майже кожен, хто працює з Linux, стикався з цим, і попри те, що це трапляється постійно, все одно викликає паніку та простої.
Ось у чому річ — це не значить, що щось зламано. Просто ви намагаєтеся зробити те, на що у вас немає прав. Linux просто стоїть на варті своїх кордонів безпеки.
В цій статті ми розглянемо, чому ця помилка виникає, що вона насправді означає, і як її виправити крок за кроком — без того, щоб порушити безпеку системи чи створити нові дірки.
Помилка «Доступ заборонено» в Linux з'являється, коли користувач не має належних прав на читання, запис чи виконання файлу.
Звучить просто, але в реальних умовах — контейнерах, середовищах з кількома користувачами чи CI/CD-пайплайнах — права доступу швидко перетворюються на хаос.
chmod 777, і тепер панує безлад.Тож ні, це не просто про «забули додати +x». Це про те, як Linux тримає кордони, щоб забезпечити безпеку.
Кожен файл і папка в Linux має три типи доступу — читання (r), запис (w) і виконання (x) — які застосовуються до трьох сутностей:
| Категорія | Символ | Опис |
|---|---|---|
| Користувач | u | Власник файлу |
| Група | g | Члени групи файлу |
| Інші | o | Усі інші |
Приклад:
-rwxr-xr-- 1 dev dev 1234 Oct 10 12:00 app.sh
Тут власник (dev) може читати, писати й виконувати; група — читати й виконувати; інші — тільки читати.
Кожен прапорець позначається числом:
Тож chmod 755 file.sh = 7 (rwx) для власника, 5 (r-x) для групи, 5 (r-x) для інших.
Ви склонували репозиторій і спробували:
./build.sh
Але оболонка видає «Доступ заборонено». Чому? Бо Git за замовчуванням не зберігає біти виконання. Виправте так:
chmod +x build.sh
git update-index --chmod=+x build.sh
chmod 600 ~/.ssh/id_rsa
chown $USER:$USER ~/.ssh/id_rsa
sudo chown -R www-data:www-data storage
sudo chmod -R 750 storage
Монтування директорії хоста в контейнер часто призводить до невідповідності UID.
docker run --user $(id -u):$(id -g) ...
sudo chown -R 1000:1000 /data
sudo nano /etc/nginx/nginx.conf
Для глибшого розуміння вибору між NGINX і Apache дивіться нашу статтю Оптимізація веб-сайту: вибір між NGINX і Apache
ls -l filenamechmod +x script.shsudo chown youruser:youruser /path/to/dirsudo commandgetenforce
sudo ausearch -m avcchmod 744 file → повні права для власника, тільки читання для іншихchmod 755 file → повні для власника, читання й виконання для іншихchmod 777 file → усі можуть усе (не рекомендується!)Правило великого пальця:
mount | grep your_folderumask 022.auditctl -w /etc/ -p w -k perms
ausearch -k perms
«Доступ заборонено» — це не баг, а Linux, яка робить свою справу, запобігаючи небезпечним чи несанкціонованим діям. Як тільки ви розберетеся з власництвом і правами, помилка стає передбачуваною й легкою для виправлення.
У продакшені дрібні помилки з правами можуть перерости в дорогі простої. Щоб уникнути рутинного головняка, розгляньте керовані VPS-сервери, які автоматично керують правами, безпекою та обслуговуванням, дозволяючи зосередитися на коді.
chmod +x script.sh або збережіть це в репозиторії за допомогою git update-index --chmod=+x script.sh.chmod 777 дає повний доступ усім користувачам, що небезпечно. Краще використовувати 755 для скриптів або 644 для конфігів.umask 022, автоматизуйте перевірки прав і використовуйте auditd для моніторингу.