在使用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