새 파일 및 디렉토리를 만들 때 WordPress / PHP가 setgid 비트를 준수하도록 강제


1

LEMP VPS에서 여러 WordPress 사이트를 호스팅하고 있습니다.

  • 각 사이트에는 자체 Wordpress 설치 (아래에 위치 /srv/http/domain/wordpress), 자체 사용자 계정 ( site-user ) 및 site-user 로 실행되는 자체 php-fpm 풀이 있습니다 .
  • Nginx는 http 계정으로 실행되고 있으며 아래의 모든 파일 에는 0640 (파일) 및 2750 (디렉토리) 권한 /srv/http/domain/wordpress이있는 site-user : http 소유권이 있습니다.

따라서 각 사용자는 자신의 파일 / 디렉토리에 완전히 RW 액세스 할 수 있지만 다른 사이트의 파일 / 디렉토리에는 액세스 할 수 없습니다. Nginx는 모든 사이트의 파일 / 디렉토리에 R로만 액세스 할 수 있습니다.

setgid 비트를 사용하여 Nginx가 이들에 대한 읽기 액세스 권한을 갖도록 아래 /srv/http/domain/wordpress에 생성 된 새 디렉토리 가 http 그룹 을 상속 하도록합니다. SFTP를 통해 파일을 만들 때 예상대로 작동합니다.

이것은 제게 보이지만 wp-admin 인터페이스를 통해 플러그인, 테마 및 WordPress를 성공적으로 업데이트 할 수 있습니다. 그러나 WordPress가 새 파일 / 디렉토리를 생성 해야하는 작업을 실행할 때마다-기본적으로 플러그인 / 테마를 설치하거나 업데이트하거나 Wordpress 자체를 업데이트 할 때마다 결과 파일 소유권은 site-user : site-user 입니다. 내가 원하는 것은 새로 작성된 파일 / 디렉토리가 setgid 비트를 존중하고 site-user : http 소유권을 가진 파일 / 디렉토리를 작성하는 것이므로 Nginx가 내 개입없이이 파일을 읽을 수 있습니다.

각 사이트의 wp-config.php 파일 에서 다음을 설정했습니다 .

  • define( 'FS_CHMOD_DIR', ( 02750 & ~ umask() ) );
  • define( 'FS_CHMOD_FILE', ( 0640 & ~ umask() ) );

이렇게하면 권한을 원하는대로 강제하지만 소유권에는 영향을 미치지 않습니다.

나는 이것 과 이것을 읽었 지만 "솔루션"은 PHP 코드를 수정하여 사용하지 않는 move_uploaded_file()것이 좋습니다. 자신의 PHP 코드를 작성하는 경우 괜찮습니다.하지만 WordPress PHP 파일을 수정하지는 않을 것입니다. 이것이 이것이 내 문제의 원인인지 확실하지 않습니다.

또한 Nginx가 그룹 소유권이 있는지 여부에 관계없이 파일을 읽을 수 있도록 권한을 풀고 755 (디렉토리) 및 644 (파일)로 설정할 수 있음을 알고 있지만 보안상의 이유로 세계가 읽을 수있는 것을 피하려고합니다. 공유 서버의 파일.

WordPress / PHP로 만든 파일의 소유권을 제어하려면 어떻게합니까?


포함 된 워드 프레스 태그를 읽으십시오. 주제를 벗어난 질문을하고 있습니다. 주제를 참조하십시오 . wordpress.com에 대한 질문은 웹 응용 프로그램에 속합니다 . WordPress 설치 및 유지 관리에 대한 질문은 WordPress Development
— DavidPostill에 있습니다.

이것은 어리 석다. 나는 이것을 파일 시스템 / 권한 문제로 읽고 있습니다. 웹 서버와 관련이있을 수 있습니다. 지금 다시 여는 중입니다. @DavidPostill과 대화하는 방법에 대해 이야기하고 여기서 주제가 아닌 경우 적절한 사이트로 이동하십시오.
— Journeyman Geek

필자는 Apache와 비슷한 작업을 수행했으며 기본적으로 Nginx를 http그룹 소유권 으로 설정해야합니다 . 자세한 내용은 여기를 참조하십시오 .
— JakeGould

@JakeGould-Nginx 작업자 스레드는 원래 게시물에 명시된 바와 같이 http : http 사용자 / 그룹에서 실행되고 있습니다. 문제는 Wordpress (실제로 PHP)에 의해 새로 작성된 파일이 http 그룹 소유권을 갖도록 Nginx가 읽을 수 있도록 만드는 것입니다.
— chr0mag

@DavidPostill-사과 데이비드. 실제로 이것이 Wordpress 관련 문제라고 생각하지는 않지만 PHP와 관련이 있으며 Linux 파일 권한을 포함하여 일반적으로 LEMP 스택을 설정하는 방법과 관련이 있습니다.
— chr0mag

답변:


1

이에 대한 몇 가지 해결책을 찾았습니다.

  1. Wordpress (실제로 PHP)에 의해 생성 된 새 파일은 PHP가 실행되는 php-fpm 풀 구성 파일 의 그룹 지시문을 사용자가 지정합니다 . 원래 새로 생성 한 파일을 site-user : http 소유권으로 강제 생성하려면 사이트 별 php-fpm 풀 구성 파일 에서 user = site-user 및 group = http 를 설정하면됩니다. 이것은 새로 만든 파일에 내가 찾고 있던 그룹 소유권이 있다는 점에서 작동합니다. 그러나 보안 관점에서는 사이트 사용자 가 다른 사이트의 파일 / 디렉토리에 대한 읽기 액세스 권한이있는 PHP 파일을 잠재적으로 생성 할 수 있으므로 각 사이트에 대해 별도의 php-fpm 풀을 작성하려는 목적을 부분적으로 상실합니다 .

  2. 위의 # 1보다 간단하고 안전하면 site -user : site-user가 소유 한 사이트의 모든 파일 / 디렉토리 (예 : 원래 계획했던대로 site-user : http 대신)를 보유한 다음 http 사용자 를 사이트 사용자 그룹 . 모든 사이트에서 640 (파일) 및 750 (폴더) 권한을 사용 하면 필요한 경우 모든 사이트 파일에 대한 nginx 읽기 전용 액세스 권한을 효과적으로 유지하면서도 사용자는 자신의 사이트를 제외한 다른 사이트의 파일을 읽을 수 없습니다.

위의 옵션 # 2는 setgid 비트를 사용 하지 않아도되지만 wp-config.php 파일에 다음을 추가해야 합니다.

  • define( 'FS_CHMOD_DIR', ( 0750 & ~ umask() ) );
  • define( 'FS_CHMOD_FILE', ( 0640 & ~ umask() ) );

위의 줄이 없으면 WordPress / PHP는 세계가 읽을 수있는 파일 (644)과 폴더 (755)를 만듭니다.


스스로 대답하는 훌륭한 질문 !!!
— JakeGould
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.