Zadáte příkaz, očekáváte hladký průběh, a místo toho dostanete:
bash: ./deploy.sh: Permission denied.
Je to ta frustrující chyba, která zastaví nasazení, zhatí sestavení nebo zablokuje aktualizaci serveru – a často vás donutí strávit hodiny lovem jediného příznaku oprávnění. Téměř každý uživatel Linuxu se s ní setkal, a přestože je běžná, pořád vyvolává paniku a prostoje.
O co jde – neznamená to, že je něco rozbité. Znamená to jen, že se snažíte udělat něco, na co nemáte práva. Linux prostě vynucuje své bezpečnostní hranice.
V tomto článku prozkoumáme, proč se tato chyba objevuje, co opravdu znamená a jak ji krok za krokem opravit – aniž byste ohrozili bezpečnost systému nebo vytvořili nové zranitelnosti.
Chyba „Přístup odepřen“ v Linuxu se objeví, když uživatel nemá správná práva k čtení, zápisu nebo spuštění souboru.
Zní to jednoduše, ale v reálných prostředích – jako jsou kontejnery, prostředí s více uživateli nebo CI/CD pipeline – se oprávnění rychle zamotají.
chmod 777 a teď vládne chaos.Takže ne, nejde jen o „zapomněli jste přidat +x“. Jde o to, jak Linux vynucuje hranice, aby udržel systém v bezpečí.
Každý soubor a složka v Linuxu má tři typy přístupu – čtení (r), zápis (w) a spuštění (x) – aplikované na tři entity:
| Kategorie | Symbol | Popis |
|---|---|---|
| Uživatel | u | Vlastník souboru |
| Skupina | g | Členové skupiny souboru |
| Ostatní | o | Všichni ostatní |
Příklad:
-rwxr-xr-- 1 dev dev 1234 Oct 10 12:00 app.sh
Zde vlastník (dev) může číst, psát a spouštět; skupina může číst a spouštět; ostatní mohou jen číst.
Takže chmod 755 file.sh = 7 (rwx) pro vlastníka, 5 (r-x) pro skupinu, 5 (r-x) pro ostatní.
Naklonovali jste repo a zkusili:
./build.sh
Ale shell vyhodí „Přístup odepřen.“ Proč? Protože Git ve výchozím nastavení neuchovává bity spustitelnosti. Opravte to takto:
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
Montáž adresáře hosta do kontejneru často vede k neshodě UID.
docker run --user $(id -u):$(id -g) ...
sudo chown -R 1000:1000 /data
sudo nano /etc/nginx/nginx.conf
Pro hlubší pochopení výběru mezi NGINX a Apache si přečtěte náš článek Optimalizace webových stránek: volba mezi NGINX a Apache
ls -l filenamechmod +x script.shsudo chown youruser:youruser /path/to/dirsudo commandgetenforce
sudo ausearch -m avcchmod 744 file → plná práva pro vlastníka, jen čtení pro ostatníchmod 755 file → plná pro vlastníka, čtení a spuštění pro ostatníchmod 777 file → všichni mohou všechno (nedoporučuje se!)Pravidlo palce:
mount | grep your_folderumask 022.auditctl -w /etc/ -p w -k perms
ausearch -k perms
„Přístup odepřen“ není chyba – je to Linux, který dělá svou práci, aby zabránil nebezpečným nebo neoprávněným akcím. Jakmile pochopíte vlastnictví a práva, chyba se stane předvídatelnou a snadno opravitelnou.
V produkci se malé chyby v oprávněních mohou rozrůst do nákladných prostojů. Abyste se vyhnuli manuálním bolestem hlavy, zvažte naše managedVPS služby, které automaticky řídí oprávnění, bezpečnost a údržbu, což vám umožní soustředit se na váš kód.
chmod +x script.sh nebo trvale v repozitáři pomocí git update-index --chmod=+x script.sh.chmod 777 uděluje plná práva všem uživatelům, což je nebezpečné. Používejte 755 pro skripty a 644 pro konfigurace.umask 022, pravidelně kontrolujte oprávnění a používejte auditd pro monitoring.