NGINX 사용자를 어떻게 변경합니까?


37

디렉토리를 만들고 디렉토리에 이미지를 출력하는 PHP 스크립트가 있습니다. 이것은 Apache에서 잘 작동했지만 최근에는 제한된 RAM을 더 많이 사용하기 위해 NGINX로 전환하기로 결정했습니다. PHP mkdir () 명령을 사용하여 디렉토리를 만듭니다.

mkdir(dirname($path['image']['server']), 0755, true);

NGINX로 전환 한 후 다음과 같은 경고 메시지가 나타납니다.

Warning: mkdir(): Permission denied in ...

부모 디렉토리의 모든 권한을 이미 확인 했으므로 NGINX 또는 PHP-FPM 'user'를 변경해야한다고 결정했지만 어떻게 해야할지 모르겠습니다 (사용자를 지정하지 않아도됩니다) APACHE에 대한 권한). 나는 이것에 대해 많은 정보를 찾을 수없는 것 같습니다. 어떤 도움이라도 좋을 것입니다!

(참고 :이 작은 전화 끊기 외에도 NGINX 로의 전환은 매우 매끄 럽습니다. 처음으로 사용하고 있으며 NGINX를 시작하고 실행하는 데 문자 그대로 약 10 분 밖에 걸리지 않았습니다. 꼬임.)


1
패키지 관리자가 nginx를 설치 한 경우 가장 좋은 방법은 'ps'를 사용하여 nginx가 실행중인 사용자를 확인하고 디렉토리 소유자를 해당 사용자로 변경하는 것입니다. 일반적으로 보안은 패키지에 의해 기본적으로 잘 설정되어 있으며, 변경하는 사용자는 다른 것을 화나게 할 수 있습니다.
Joachim Isaksson

nginx.conf그리고 www.conf기본적으로 IIRC.
PeeHaa

fastcgi를 사용하는 경우 PHPscript를 suexec 할 수 있는지 확인하십시오. 특정 사용자로 다른 사이트를 실행할 수 있습니다. 온라인에서 일부 설정 지침을 사용할 수 있습니다.
hakre

답변:


58

www : www로 nginx & php-fpm을 실행하십시오

1. Nginx

nginx.conf를 편집하고 사용자www www;

마스터 프로세스가 루트로 실행되면 nginx는 setuid () / setgid ()를 USER / GROUP으로 설정합니다. GROUP을 지정하지 않으면 nginx는 USER와 동일한 이름을 사용합니다. 기본적으로 이는 nobody user 및 nobody 또는 nogroup 그룹이거나 ./configure 스크립트의 --user = USER 및 --group = GROUP입니다.

2. PHP-FPM

php-fpm.conf를 편집 하고 사용자 및 그룹을로 설정하십시오 www.

user-프로세스의 유닉스 사용자. 기본 "www-data"

group-유닉스 프로세스 그룹. 기본 "www-data"


1
좋아, 방금 nginx.conf를 변경했습니다 (로 설정되었습니다 user www-data). 그러나, 나는 보이지 않는 어떤 에서 정의 된 사용자 php-fpm.conf. 동일한 구문 ( user www www)을 사용하여 맨 위에 추가해야합니까 ?
David

php-conf 구문은 같은 os nginx.conf가 아닙니다. [www]부품을 찾아서 user=www다음 줄과 다음 줄에 추가하십시오 group=www.
glavić

nginx를 재시작 할 때 다음 오류가 발생했습니다 : nginx 재시작 : [emerg] getpwnam("www") failed in /etc/nginx/nginx.conf:1 nginx: configuration file /etc/nginx/nginx.conf test failed.
David

그런 다음 해당 디렉토리에 대한 적절한 권한이있는 사용자로 Nginx 및 php-fpm을 실행하거나 "sudo useradd -g www www"를 실행하여 www라는 새 사용자를 작성할 수 있습니다. 더 자세한 설명이 필요하면 알려주십시오.
Roman Prykhodchenko

1
@xorinzor : 아니, 사용, 당신은 무엇을 : D
glavić

24

에서 우분투 14.04 변경에 파일 사용자그룹 에서 PHP-FPM은 다음과 같습니다 /etc/php5/fpm/pool.d/www.conf. 이 파일에서 다음 매개 변수를 변경하십시오.

user = www
group = www
listen.owner = www
listen.group = www

3
우분투 16.10의 경우도 마찬가지입니다.
Craimasjien

1
Ubuntu 18.04의 경우도 마찬가지입니다
siliconrockstar

이것은 받아 들인 대답에 아주 좋은 추가 일 것입니다.
Ashkan Kh. Nazary

PHP 7.2의 경우/etc/php/7.2/fpm/pool.d/www.conf
11

6

실제 질문에 대답하려면 다음 과 같이 user줄을 바꾸십시오 nginx.conf.

user    [username];

예:

user    www-data;

Nginx를 선호하는 사용자는 실제로 운영 체제마다 다릅니다. 때때로 Nginx는 다음과 같이 실행됩니다 www-data. 다른 경우에는 실제로로 실행됩니다 nobody.

일부 운영 체제 (예 : Windows)에서는 문제가되지 않으며 user줄을 nginx.conf주석 처리하거나 완전히 제외 할 수 있습니다.


사용자 지시문을 추가하고 Nginx 서비스를 다시 시작하면 '사용자'가 알지 못하는 지시문이라는 오류가 발생합니다.
JoeTidee

예, OS 및 / 또는 Nginx에 따라 일부 버전에는 명시적인 사용자 지시문이 필요하지 않습니다.
rubynorails

Nginx 설정 파일의 맨 위에 사용자 지시문을 배치해야 인식 할 수있었습니다.
JoeTidee
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.