>

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

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

저는 다음과 같이했습니다 :

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

그리고 작동합니다.

그러나 www 에있는 Wordpress  파일을 삭제하거나 만들 수 없습니다. 어떤 아이디어?

  • 답변 # 1

    /var/www의 www 디렉토리, 소유자 www-data 및 그룹 www-data 및사용자를 www-data 그룹에 추가하면 더 좋을 것입니다.

    아파치 설정에서 DocumentRoot 등을 다시/var/www로 변경하십시오.

    /var/www 디렉토리 (및 그 안에있는 모든 서브 디렉토리)는 파일과 디렉토리가 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

    에서 쓰기 권한이 있어야합니다.

    BTW, '사용자'가 웹 파일을 쉽게 찾을 수있게하려면 홈 디렉토리에 심볼릭 링크를 만드십시오 :

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

  • 답변 # 2

    읽기/쓰기 액세스를 위해서는 부모 디렉토리 (경우에 따라/home/user)에 대한 실행 권한이 있어야합니다. 이 답변을 확인하십시오.

    /home/user/www에서 루트를 사용하고 있습니다 (사용자홈 디렉토리에 있음). 홈 디렉토리는 기본적으로 700 개의 권한으로 설정되어 있습니다. 예를 들어, /apache/www

  • 답변 # 3

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

    SELinux 부울

    이 명령을 사용하여 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에 해당 레이블과 연관된 서비스/데몬이 무엇이든이 디렉토리 나 파일에 액세스 할 수 있음을 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
    
    
    참조

    5.7. SELinux 컨텍스트-파일 레이블링

  • 이전 NetBSD에서 비밀번호없이 사용자 작성
  • 다음 bash - Apache 액세스 로그 파일을 삭제 하시겠습니까?