为什么给nginx服务使用普通用户:
默认情况下nginx的Master进程使用的用户root,worker进程使用的是nginx指定的普通用户,使用root用户跑nginx的master进程有两个问题。
1.管理用户必须是root,这样使的最小化分配权限遇到问题
2.使root跑nginx服务,一旦网站出现了漏洞,用户就可以轻松的获得服务器的root权限。
配置实战:
1.常见普通用户,通过普通用户启动nginx:
#useradd inca
#su - inca
#pwd
#mkdir conf logs www
#cp /application/nginx/conf/mime.types ~/conf
#echo inca > www/index.html
---------------------------------------------------------------
2.配置nginx配置文件
#cat conf/nginx.conf
worker_processes 1;
worker_rlimit_nofile 65535;
error_log /home/inca/logs/error.log;
user inca inca;
pid /home/inca/logs/nginx.pid;
events {
use epoll;
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8990;
server_name www.ofo.com;
root /home/inca/www;
location / {
index index.html index.php index.htm;
}
access_log /home/inca/logs/web_access.log;
}
}
#LANG=en
#tree
|-- conf
| |-- mime.types
| `-- nginx.conf
|-- logs
| |-- error.log
| |-- nginx.pid
| `-- web_access.log
`-- www
`-- index.html
简单说明:
需要单独制定pid,用户。location下的目录,以及默认网站根目录所有参数的值要配置到/home/inca用户家目录下
特权用户root使用的80端口,改为普通用户使用的端口,在1024以上
启动nginx:
# ps -ef |grep nginx |grep -v grep
#/applocation/nginx/sbin/nginx -c /home/inca/conf/nginx.conf <以root启动吧,要不又报错
#ps -ef |grep nginx |grep -v grep
inca 4210 1 0 15:23 ? 00:00:00 nginx: master process /applocation/nginx/sbin/nginx -c /home/inca/conf/nginx.conf
inca 4211 4210 0 15:23 ? 00:00:00 nginx: worker process
#lsof -i :8990
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 4210 inca 5u IPv4 19061 0t0 TCP *:http-wmap (LISTEN)
nginx 4211 inca 5u IPv4 19061 0t0 TCP *:http-wmap (LISTEN)
配置好客户端进行测试:
[root@localhost ~]# curl 192.168.1.251:8990/index.html
inca
解决普通端口非80提供问题。
可以通过负载均衡web服务进行转换。可以haproxy nginx f5等
本次解决方案优点;
给nginx服务降权,让网站更安全
按用户设置站点权限,让站点更安全
不必要给几把开发root权限
可实现责任划分(划重点)