关于nginx启动权限错误

7,595 阅读1分钟

在使用nginx -t检查nginx配置文件时出现这个错误:

$ /usr/local/nginx/sbin/nginx -t
nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /usr/local/nginx/conf/nginx.conf:2

nginx的所有者是root
我们都知道nginx的主进程需要使用root来运行,而子进程可以使用普通用户运行,
普通用户如果不使用sudo命令运行nginx时则需要获取SUID权限才能在nginx运行时将身份切换为root,否则就是用自己的身份来执行nginx,而恰巧在这个nginx.conf文件中设置了ssl的证书的放置位置在一些普通用户不能读取的位置或者一些普通用户不能读取的目录,所以出现了权限的错误.
解决的方法我总结了两种,一种是使用sudo来运行nginx,另一种是给nginx赋予SUID权限,让普通用户在执行nginx时将身份提升为nginx的所有者也就是root

1.使用sudo

$ sudo /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

2.给nginx赋予SUID权限

$ sudo chmod u+s /usr/local/nginx/sbin/nginx
//或者$ sudo chmod 4755 /usr/local/nginx/sbin/nginx
$ ll /usr/local/nginx/sbin/nginx
-rwsr-xr-x 1 root root 8641260 Sep  7 14:33 /usr/local/nginx/sbin/nginx

但是由于SUID权限是linux中比较危险的一种程序,假设要执行的程序的所有者是root,那么任何非sudo用户都可以在运行这个程序的时候身份都变为了root,所以这个程序可以让任何人以root身份执行,有点心里慌慌.
还是用sudo执行好一些吧,至少只有在sudoers列表中的用户才能以root权限执行,还必须在命令前敲sudo来提醒一下自己,感觉安全性是提高了不少.