Nginx에서 서로 다른 사용자로 여러 VHost 호스팅

서버가 있을 때 세상에서 가장 일반적인 일은 보안과 더 많은 보안에 대해 생각하는 것입니다. 편집증에 빠질 수는 없습니다 

다소 일반적인 관행이지만 권장되지 않는 것은 모든 데이터베이스에 대해 동일한 사용자를 사용하는 것입니다. 루트를 사용하는 경우에는 더 나빠 보입니다.모호함 또는 무지로 인해) 이렇게, 나는 이미 당신이 이렇게 행동해서는 안되는 이유에 대해 이야기했습니다. 어린이의 소식이제 다른 사용자에서 웹 서버 처리를 분리하는 것이 더 나은 방법과 이유를 설명 할 시간입니다. 이번에는 Nginx에.

전용 서버_하위 이미지

사용자와 웹 서버는 무엇입니까?

간단하고 간단하게 설명하기 위해 웹 서버 (apache, nginx 등)는 시스템의 프로세스를 열고 HDD (이미지 등)에서 파일을 가져 와서 만드는 프로세스를 열어야합니다. 클라이언트의 브라우저에서 사용할 수 있습니다. 웹 서버는 단순히 파일을 가져 와서 아무도 아닌 것으로 조작 할 수 없습니다. 즉, 결국이 모든 작업을 수행 할 사용자가 필요하며 그 사용자가 제가 말하는 사용자입니다. 이해하십니까?

여러 사용자를 분리하는 것은 무엇입니까?

서버에 2 개의 웹 사이트가 있다고 가정 해 보겠습니다. 개인 프로젝트 인 웹 사이트와 다른 웹 사이트 (그것이 우리의 여자 친구 또는 형제의 것이라고 상상해 봅시다.). 별도의 데이터베이스와 다른 사용자를 사용하여 액세스하더라도 결국 두 웹 사이트의 파일이 동일한 사용자에 의해 조작되고 PHP 처리는 모든 사이트에 대해 동일한 사용자가 관리합니다 (일반적으로 www-data입니다.). 이것은 권장되지 않는 관행입니다. 모든 것을 잘 분리하는 것이 좋습니다. 오래된 속담처럼 후회하는 것보다 안전한 것이 낫습니다.

네, Nginx로 어떻게하는지 이해합니다.

2000px-Nginx_logo.svg

가장 먼저 주목할 점은 Nginx에는 Apache처럼 PHP 처리를 처리하는 자체 모듈이 없다는 것입니다. Nginx의 경우 Apache보다 잘 작동하거나 더 잘 작동하는 PHP-CGI 또는 PHP-FPM을 사용해야합니다. 따라서 다른 사용자간에 PHP 처리를 분리하려면 Nginx 자체가 아닌 PHP 구성 파일 (CGI 또는 FPM)의 행을 변경해야합니다.

당신이 사용한다고 가정 PHP-FPM, 구성 파일을 생성합니다. 특정 사이트, 즉 풀은 PHP 처리와 PHP-FPM을 분리하는 방법이지만 부분적으로 진행됩니다.

1. 먼저 우리가 사용할 시스템의 사용자를 알아야합니다. 아직 생성 된 것이 없다고 가정하고 생성하겠습니다.

다음 명령은 모두 직접 루트 또는 sudo를 사용하여 관리 권한으로 실행해야합니다.

adduser blog

사용자 생성, 비밀번호 입력 등의 일반적인 프로세스를 시작합니다.

나는 사용자에게 블로그를 작성하여 우리가 호스팅 할 첫 번째 사이트가 블로그가 될 것이라는 예를 따르고 있습니다. 어떤 사이트와 관련된 각 사용자를 알기 위해

1. 먼저 /etc/php5/fpm/pool.d/로 이동합니다.

cd /etc/php5/fpm/pool.d/

2. 이제 blog.conf라는 파일을 생성합니다.

touch blog.conf

3. 이제 VHost 블로그에 사용할 풀의 구성을 입력합니다.

nano ...로 blog.conf 파일을 편집합니다. 예 : sudo nanoblog.conf
[블로그] 사용자 = 블로그
그룹 = 블로그
듣기 = / var / run / php5-fpm-블로그.sock listen.owner = 블로그
청취.그룹 = 블로그
오후 = 온 디맨드 pm.max_children = 96 chdir = /

참고 : 내가 빨간색으로 표시 한 것은 이전에 만든 사용자에 따라 수정해야하는 것입니다. 예를 들어, 다른 사용자 (예를 들어 포럼) 블로그 대신 단순히 각 줄에 포럼을 넣으십시오. 이해됩니까?

4. 새 풀 (방금 만들고 편집 한 blog.conf 파일), Nginx VHost에이 사이트에 대해 해당 VHost에 대해 다른 양말을 사용하도록 지시 할 차례입니다. 사용될 양말은 우리가 이전에 선언 한 것입니다 (/var/run/php5-fpm-blog.sock). Nginx VHost를 편집하고 PHP 처리 부분에서 해당 양말을 사용하도록 지정합니다. 예를 들면 :

위치 ~ \ .php $ {if (! -f $ request_filename) {return 404; }
fastcgi_pass 유닉스 : / var / run / php5-fpm-블로그.양말;
fastcgi_params 포함; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; fastcgi_read_timeout 300; }

보시다시피 해당 VHost (그 라인은 예를 들어 / etc / nginx / sites-enabled / vhost-blog 안에 있습니다.) /var/run/php5-fpm-blog.sock에있는 양말을 사용하여 수행하십시오 ... 이전에 /etc/php5/fpm/pool.d/blog.conf를 편집 할 때 만든 양말입니다. 이해되지 않습니까?

5. 이 작업이 완료되면 두 서비스 (php5-fpm 및 nginx)와 voila를 다시 시작하면 해당 사이트 (vhost)의 처리가 www-data 또는 root 또는 이와 유사한 사람이 수행하지 않고 우리가 이전에 정의 된.

여기서는 추신 보조 | 그렙 fpm 내 노드의 서버 중 하나에서 :

ps aux | grep fpm ebook 586 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm : 풀 ebook ebook 589 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm : 풀 ebook www 608 0.0 0.2 350084 5008? S Mar30 0:00 php-fpm : 풀 www www 609 0.0 0.2 350600 5048? S Mar30 0:00 php-fpm : 풀 www tv3 611 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm : 풀 tv3 tv3 615 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm : pool tv3 magazine 1818 1.7 1.7 437576 36396? S 09:55 0:46 php-fpm : 풀 매거진 매거진 2264 1.9 1.7 437332 35884? S 10:15 0:26 php-fpm : 풀 매거진 학생 2338 4.3 1.0 428992 22196? S 10:18 0:53 php-fpm : 풀 학생 잡지 2413 1.8 1.7 437764 36152? S 10:22 0:18 php-fpm : 풀 구틀 매거진 2754 3.5 1.3 356724 27164? S 10:38 0:00 php-fpm : 풀 gutl cgr 5624 0.0 1.0 365168 22696? S Apr28 0:16 php-fpm : pool cgr pupil 7900 0.3 2.5 457052 52444? S Apr25 20:23 php-fpm : 수영장 학생 학생 11021 0.4 2.5 458316 52864? S Apr28 5:57 php-fpm : pool pupil cgr 11254 0.0 1.0 363152 21708? S Apr28 0:12 php-fpm : 풀 cgr cgr 13184 0.0 1.0 362872 21360? S Apr28 0:08 php-fpm : 풀 cgr

보시다시피 ... Nginx + PHP-FPM을 사용하여 사용자가 PHP 처리를 분리하는 것은 정말 쉽습니다. 여러 사용자가 있기 때문에 여러 풀이 있음을 알 수 있습니다.

결론

서버에 관해서는 결코 편집증적일 수 없습니다... 보안은 가지고 놀 수 있는 것이 아닙니다. 우리가 항상 서버와 서비스의 보안을 개선하려고 노력할수록 ( 성공) 해킹 시도 또는 이와 유사한 것 