새 파일 및 디렉토리를 만들 때 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-usergroup = 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.