저는 DocumentRoot를 로 변경했습니다 /home/user/www
. 이를 달성하기 위해 /etc/apache2/sites-available/default에서 경로의 두 항목을 모두 변경했습니다.
/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를 사용하여 www 디렉토리를 /var/www에 배치하는 것이 좋습니다.www-data 그룹에 사용자를 추가하세요.
먼저 Apache 구성에서 DocumentRoot 등을 다시 /var/www로 변경합니다.
/var/www 디렉토리(및 그 안에 있는 모든 하위 디렉토리)에는 www-data 그룹을 사용하여 파일과 디렉토리가 생성되도록 gid가 설정되어 있어야 합니다.
다음 명령은 모두 루트로 실행하거나 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 부울
httpd
이 명령을 사용하여 (Apache) 관련 부울 값 목록을 볼 수 있습니다.
$/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