在使用nginx -t检查nginx配置文件时出现这个错误:linux
$ /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的全部者也就是rootnginx
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
权限bash
$ 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
来提醒一下本身,感受安全性是提升了很多.ui