내 PHP 코드를 저장할 수 있는 폴더나 수정할 수 있게 하려는 파일은 www-data의 소유여야 합니다. sudo 없이 내가 만들거나 편집하려는 모든 것이 내 사용자의 소유이기 때문에 이는 짜증나는 일입니다.
반면에 우리 학교 서버에는 사용자가 소유한 모든 것이 표시되지만 이와 같은 문제는 결코 발생하지 않습니다. www-data는 소유자가 아님에도 불구하고 내용을 저장하거나 수정하는데 아무런 문제가 없는 것 같습니다.
모든 콘텐츠에 대한 소유권을 유지하면서 www 데이터에 대한 액세스를 방해하지 않는 /var/www 사이트를 이와 같이 작동하게 하려면 어떻게 해야 합니까?
답변1
제가 일반적으로 웹 서버에서 사용하는 솔루션은 ACL을 사용하는 것입니다. 기본적으로 이는 다른 시스템에서 사용하는 일반적인 사용자 그룹 외에 추가 권한 세트를 사용하는 것을 의미합니다. 제한된 PHP 액세스를 설정할 때(예: suPHP 사용) 이 기능이 특히 유용하다고 생각합니다.
내 파일의 소유권을 유지하기 위해 해당 파일이 내 소유인지 확인합니다.
$ chown me:me /var/www -R
그런 다음 모든 곳에서 읽기 액세스 권한을 부여합니다 www-data
(디렉토리에 대한 액세스 권한도 부여합니다. 때로는 더 세부적인 설정이 필요할 수도 있습니다).
$ setfacl -Rdm 'u:www-data:r-X' /var/www
$ setfacl -Rm 'u:www-data:r-X' /var/www
나는 또한 내가 쓰고 싶은 모든 것에 대해 Apache 쓰기 액세스 권한을 부여했습니다. 예를 들어:
$ setfacl -Rdm 'u:www-data:rwX' /var/www/uploads
$ setfacl -Rm 'u:www-data:rwX' /var/www/uploads
ACL을 사용하려면 acl
파일 시스템이 이 옵션으로 마운트되어 있는지 확인해야 합니다. 이 작업은 다음에서 수행됩니다 /etc/fstab
.
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/sdxy /var ext4 defaults,acl 0 2
( /var
다른 파티션에 있다고 가정하고 그렇지 않은 경우 참조 /
)
그런데 일부 시스템에서는 이 acl
옵션이 기본적으로 설정되어 있습니다.예를 들어:
Ubuntu 14.04 및 ext4부터는 acl이 이미 기본값이므로 위의 내용이 필요하지 않습니다.
tune2fs
다음 명령을 사용하여 파일 시스템(ext* FS로 가정)에서 ACL이 활성화되어 있는지 확인할 수 있습니다 .
# tune2fs -l /dev/sdxy | grep acl
Default mount options: acl ...
자세한 내용은 setfacl
,이봐.
답변2
(당신이 제어하는 기계에서) 할 수 있는 가장 간단한 일은 다음과 같습니다.
www-data
계정의 그룹에 그룹 ID를 추가 하고 폴더 그룹을 쓰기 가능하게 만듭니다(예: )chmod 775
.또는 자신이 소유한 디렉토리를 가리키도록 변경하여 해당 디렉토리를 읽을 수 있는지(및 스크립트가 실행될 수 있는지)
DocumentRoot
확인할 수 있습니다.www-data
이들 중 어느 것도 실제 서버에 대한 만족스러운 솔루션이 아닙니다(충분히 안전하지 않습니다).