Apache2 권한 문제

Apache2 권한 문제

내 DocumentRoot를 /home/user/www. 이를 달성하기 위해 /etc/apache2/sites-available/default에서 경로의 2개 항목을 변경했습니다.

/home/user/www의 권한은 0774입니다. www-data 사용자를 내 사용자 그룹에 추가했으며 소유자는 /home/user/www내 사용자 및 그룹(사용자:사용자)입니다.

나는 다음과 같은 방법으로 그렇게 했습니다:

sudo chmod -R 0774 www
sudo chown -R user:user www
sudo adduser www-data user

문제는 Apache가 이 디렉터리에 쓸 수 없다는 것입니다. www-data를 소유자로 설정해야만 쓸 수 있는데, 그렇게 하면 해당 디렉토리에 쓸 수 없습니다.

다음을 사용하여 권한을 테스트했습니다.

sudo -u www-data ls /home/user/www
sudo -u www-data cat /home/user/www/some-file

그리고 그것은 작동합니다.

하지만 제가 갖고 있는 Wordpress에서는 www파일을 삭제하거나 생성할 수 없습니다. 어떤 아이디어가 있나요?

답변1

소유자 www-data 및 그룹 www-data가 있는 /var/www의 www 디렉토리를 사용하는 것이 더 나았을 것입니다.www-data 그룹에 사용자 추가.

먼저 Apache 구성에서 DocumentRoot 등을 다시 /var/www로 변경합니다.

/var/www 디렉토리(및 그 안의 모든 하위 디렉토리)는 setgid로 설정되어야 파일과 디렉토리가 www-data 그룹으로 생성됩니다.

다음은 모두 루트로 실행하거나 sudo를 사용하여 실행해야 합니다.

mkdir -p /var/www

/home/user/www에 보관하고 싶은 파일이 있으면 지금 다음을 사용하여 해당 파일을 /var/www로 이동하세요.

mv /home/user/www/* /var/www/

이제 /var/www 디렉토리의 권한과 소유권을 수정하십시오.

chown -R www-data:www-data /var/www
chmod -R 775 /var/www
find /var/www -type d -print0 | xargs -0r chmod g+s
adduser user www-data

다음에 '사용자'가 로그인(또는 실행 newgrp www-data)할 때 /var/www에 쓰기 권한이 있어야 합니다.

그런데 '사용자'가 웹 파일을 쉽게 찾을 수 있도록 하려면 홈 디렉토리에 심볼릭 링크를 만드세요.

 ln -s /var/www/ /home/user/

답변2

읽기/쓰기 액세스의 경우 상위 디렉터리(귀하의 경우 /home/user)에 대한 실행 권한도 갖는 것이 중요합니다. 확인하다이것답변.

/home/user/www(아래에 해당)에서 루트를 사용하고 있습니다.사용자의홈 디렉토리와 홈 디렉토리는 생성 시 기본적으로 700개의 권한으로 설정되어 있습니다. 예를 들어 다른 곳에서 Apache의 루트를 생성해 보십시오./apache/www

답변3

배포판에서 SELinux 또는 App Armor와 같은 것을 사용하는 경우 홈 디렉터리 영역에 대한 액세스가 "허용"되도록 Apache 프로세스에 대한 액세스 권한을 부여해야 할 수 있습니다.

SELinux 부울

이 명령을 사용하면 (Apache)와 관련된 불리언 목록을 볼 수 있습니다 httpd.

$/usr/sbin/getsebool -a | grep httpd
allow_httpd_anon_write --> off
allow_httpd_bugzilla_script_anon_write --> off
allow_httpd_mod_auth_pam --> off
allow_httpd_nagios_script_anon_write --> off
allow_httpd_squid_script_anon_write --> off
allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_network_connect --> off
httpd_can_network_connect_db --> off
httpd_can_network_relay --> off
httpd_disable_trans --> off
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> on
httpd_rotatelogs_disable_trans --> off
httpd_ssi_exec --> off
httpd_suexec_disable_trans --> off
httpd_tty_comm --> on
httpd_unified --> on

이 부울을 활성화해야 합니다.

httpd_enable_homedirs --> on

컨텍스트 라벨

추가적으로 각 디렉토리에 SELinux 컨텍스트(레이블)를 추가해야 합니다. 이는 본질적으로 해당 레이블과 연관된 서비스/데몬이 이 디렉토리나 파일에 액세스할 수 있음을 SELinux에 알려줍니다. Apache(httpd)는 다음 레이블을 사용합니다.

httpd_sys_content_t:s0

chcon따라서 /home 아래의 파일/디렉터리에 해당 레이블을 추가하려면 이 명령을 실행해야 합니다 . Apache가 파일을 제공할 디렉터리에만 레이블을 추가하세요.

$ chcon -R -t httpd_sys_content_t /home/user/www

컨텍스트 레이블을 표시하는 -Z스위치를 사용하여 이것이 작동하는지 확인할 수 있습니다 .ls

$ ls -Z /var/www/manual/
drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t:s0 mod

참고자료

관련 정보