GNU/Linux >> Znalost Linux >  >> Linux

Oprávnění odepřeno, protože chybí oprávnění k vyhledávání na komponentě cesty po chmod a chgrp

Nakonec přišel na nápravu. Spustil jsem tyto 2 funkce, abych rekurzivně zařadil oprávnění ke složce a souborům www a uvnitř.

find /var/www -type d -exec chmod 755 {} \;
find /var/www -type f -exec chmod 644 {} \;

Četl jsem tuto stránku zde:https://wiki.apache.org/httpd/13PermissionDenied a v podstatě mi to vysvětlilo a připomnělo, že oprávnění se dědí, "udělejte totéž pro adresář a každý nadřazený adresář." Tak jsem spustil ty 2 a všechno zase funguje.


Obvykle není nastaveno oprávnění ke spuštění pro jednu cestu, jako tomu bylo v této otázce. Nejjednodušší způsob, jak to vyřešit, je následující příkaz:

chmod a+rX -R /var/www

Ale při používání CentOS7 nebo RHEL7 můžete narazit na problémy se SELinuxem. Pokud jsou oprávnění souboru správná a chyba se stále zobrazuje, podívejte se na následující protokol:

tail -f /var/log/audit/audit.log

Pokud dostanete zprávu jako je tato:

type=AVC msg=audit(1464350432.916:8222): avc:  denied  { getattr } for  pid=17526 comm="httpd" path="/var/www/app/index.html" dev="sda1" ino=42021595 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file
type=SYSCALL msg=audit(1464350432.916:8222): arch=c000003e syscall=4 success=no exit=-13 a0=7fde4e450d40 a1=7ffd05e79640 a2=7ffd05e79640 a3=7fde42e43792 items=0 ppid=17524 pid=17526 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)

To znamená:SELinux blokuje přístup ke kořenovému adresáři vašeho dokumentu. Můžete zkusit příkaz jako je tento (rekurzivní a podrobný na volbě -Rv ):

chcon  --user system_u --type httpd_sys_content_t -Rv /var/www/app/public

Chcete-li najít správná nastavení, podívejte se do pracovního adresáře jako /var/www/html s tímto:

ls -laZ /var/www/

Mělo by to vypadat takto:

drwxr-xr-x. server server system_u:object_r:httpd_sys_content_t:s0 .
drwxr-xr-x. root   root   system_u:object_r:var_t:s0       ..
drwxr-xr-x. server server system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. server server system_u:object_r:httpd_sys_content_t:s0 html
drwxrwxr-x. server server unconfined_u:object_r:var_t:s0   app

Pro lidi, kteří možná vyzkoušeli výše uvedené a stále mají problémy, se ujistěte, že žádný z adresářů v cestě nemá ACL, které brání přístupu Apache.

Můžete použít:

getfacl <directoryname>

získat oprávnění k adresáři, která mohla být nastavena pomocí ACL. Uvidíte něco takového, co v podstatě říká, že uživatel má všechna oprávnění a skupina četl a spouštěl (nebo vyhledával), ale nepsal:

# file: <directoryname>
# owner: username
# group: username
user::rwx
user:1000:rwx
group::---
group:username:r-x
mask::rwx
other::rwx

Chcete-li dát Apache nebo skupině přístup k používání ACL, použijte následující:

setfacl -m g:<groupname>:rx <directoryname>

jen se ujistěte, že nadřazené adresáře mají stejné. Můžete použít přepínač -R k provedení změny rekurzivně v horním adresáři.

Narazil jsem na stejný problém s oprávněními Apache a klepal jsem si na hlavu, když jsem se snažil přijít na to, proč chmod a chown neměly žádný účinek, než jsem si vzpomněl, že jsem před chvílí nastavil ACL v adresáři, když jsem používal Sambu.


Linux
  1. Úvod do linuxových příkazů chgrp a newgrp

  2. Úvod do linuxového příkazu chmod

  3. [CentOS 7 Apache]:Oprávnění odepřeno:oprávnění k souboru zakazují přístup k serveru

  1. Jaké jsou výhody CloudLinuxu?

  2. UNIX / Linux :Jaká je správná oprávnění adresářů /tmp a /var/tmp

  3. Chmod 777 do složky a veškerého obsahu

  1. Jsou tar.gz a tgz to samé?

  2. JAVA_HOME a PATH jsou nastaveny, ale verze Java stále zobrazuje starou verzi

  3. Oprávnění odepřeno při přístupu ke sdílené složce VirtualBox, když je členem skupiny vboxsf