저는 개발 컴퓨터에서 Magento 2(온라인 스토어 소프트웨어) 프로젝트를 호스팅하고 있습니다.
사용자 및 그룹 설정은 다음과 같습니다.
user -> company
group -> www-data
Magento 2에서는 일부 파일이 런타임 시(예: 사이트를 다시 로드할 때) 자동으로 생성됩니다. 단, 자동으로 생성된 파일의 권한은 다음과 같습니다.
company@server:/srv/www/vhosts/company_m2/generated/code$ ls -lah
total 64K
drwxrwxr-x 16 company www-data 4,0K Mär 3 14:28 .
drwxrwxr-x 4 company www-data 4,0K Mär 3 13:50 ..
drwxrwxr-x 3 www-data www-data 4,0K Mär 3 14:27 ADM
drwxrwxr-x 8 www-data www-data 4,0K Mär 3 14:28 Amasty
drwxrwxr-x 4 www-data www-data 4,0K Mär 3 14:27 Amazon
drwxrwxr-x 3 black sudo 4,0K Mär 3 14:28 Composer
drwxrwxr-x 3 www-data www-data 4,0K Mär 3 14:27 Dotdigitalgroup
drwxrwxr-x 3 black sudo 4,0K Mär 3 14:28 EthanYehuda
drwxrwxr-x 3 www-data www-data 4,0K Mär 3 14:27 Ho
drwxrwxr-x 107 www-data www-data 4,0K Mär 3 14:28 Magento
drwxrwxr-x 5 black sudo 4,0K Mär 3 14:28 Migration
drwxrwxr-x 3 black sudo 4,0K Mär 3 14:28 PayPal
drwxrwxr-x 3 www-data www-data 4,0K Mär 3 14:27 Psr
drwxrwxr-x 3 black sudo 4,0K Mär 3 14:28 Symfony
drwxrwxr-x 3 www-data www-data 4,0K Mär 3 14:27 Vertex
보시다시피 세 가지 사용자:그룹 조합이 있습니다.
company www-data
www-data www-data
black sudo
항상 해당 조합을 사용하도록 어떻게 변경할 수 있습니까 company www-data
?
고쳐 쓰다:
재정의하여 Apache 사용자를 company
in 으로 변경했습니다./etc/apache2/envvars
export APACHE_RUN_USER=company
보고 싶다여기.
또한 @unxnut의 제안에 따라 상위 폴더의 권한을 drwxrwsr-x
with 으로 설정했습니다 chmod 2775
.
이제 새 파일을 생성하면 다음과 같습니다.
drwxrwsr-x 18 company www-data 4,0K Mär 3 18:50 .
drwxrwxr-x 4 company www-data 4,0K Mär 3 18:30 ..
drwxrwsr-x 3 company www-data 4,0K Mär 3 18:50 ADM
drwxrwsr-x 3 company www-data 4,0K Mär 3 18:50 Aheadworks
drwxrwsr-x 13 black www-data 4,0K Mär 3 18:50 Amasty
drwxrwsr-x 4 black www-data 4,0K Mär 3 18:50 Amazon
drwxrwsr-x 3 black www-data 4,0K Mär 3 18:50 Composer
drwxrwsr-x 4 black www-data 4,0K Mär 3 18:50 Dotdigitalgroup
drwxrwsr-x 3 black www-data 4,0K Mär 3 18:50 EthanYehuda
drwxrwsr-x 3 company www-data 4,0K Mär 3 18:50 Ho
drwxrwsr-x 3 company www-data 4,0K Mär 3 18:50 Klarna
drwxrwsr-x 118 black www-data 4,0K Mär 3 18:50 Magento
drwxrwsr-x 5 black www-data 4,0K Mär 3 18:50 Migration
drwxrwsr-x 3 black www-data 4,0K Mär 3 18:50 PayPal
drwxrwsr-x 3 black www-data 4,0K Mär 3 18:50 Psr
drwxrwsr-x 3 black www-data 4,0K Mär 3 18:50 Symfony
drwxrwsr-x 3 company www-data 4,0K Mär 3 18:50 Vertex
그러나 사용자는 여전히 폴더 수가 많지 black
않은 것으로 설정되어 있습니다 company
.
나는 이 모든 것이 불필요하다고 느낀다. 더 큰 근본 원인이 있을 겁니다. sgid 또는 suid 비트가 전혀 설정된 폴더가 없는 랙스피드에서 호스팅되는 또 다른 서버가 있는데 그것은 매력적으로 작동합니다.
답변1
사용자가 새 파일이나 디렉터리를 만들면 일반적으로 해당 사용자가 소유하게 됩니다. 일반 사용자의 경우 이를 변경할 수 없습니다. 파일 소유자 root
(또는 액세스 권한이 있는 사용자 ) 가 CAP_CHOWN
파일 소유자를 변경할 수 있지만 프로그램은 소유자를 변경하기 위해 명시적으로 시스템 호출을 수행해야 합니다. 일반적으로 파일을 일괄 백업/복원하도록 설계된 프로그램만 이 작업을 수행할 수 있습니다.
일반 사용자가 읽기 전용 액세스 권한만 갖고 있는 파일이 포함된 디렉터리에 대해 쓰기 액세스 권한을 갖고 있는 경우 해당 사용자는 문제의 파일 복사본을 만들고 원본 파일을 삭제하여 문제의 파일에 대한 소유권을 효과적으로 가져올 수 있습니다. 파일 이름을 원래 이름으로 바꿉니다.
새 파일/디렉터리가 사용자 소유로 실수로 생성된 경우 해당 파일/디렉터리 black
를 생성한 프로세스가 해당 사용자로 실행되고 있음을 의미할 수 있습니다.black
일부 프로세스가 실수로 user 대신 user 로 시작되었거나 company
해당 사용자에게 크론 작업 또는 파일을 생성/조작하는 기타 자동화된 프로세스가 있을 수 있습니다.
이는 표준화된 서비스 시작 프로세스를 사용하면 오류를 최소화할 수 있는 상황 중 하나입니다. 웹 서버 프로세스를 직접 시작하는 것과 같은 작업 에 익숙하다면 apachectl start
실수로 잘못된 사용자로 프로세스를 실행하기 쉬우므로 오류를 수정한 후 잘못된 권한을 삭제해야 합니다. 그러나 서버 프로세스가 실행되어야 하는 사용자를 명시적으로 정의하는 systemd와 같은 것을 사용하거나 .service
시작 스크립트를 사용하여 서비스를 시작하기 전에 올바른 사용자로 실행되고 있는지 확인하고 항상 표준 도구를 사용하여 서비스를 중지하고 시작하는 경우 , 그러한 실수는 피할 수 있습니다.