用非root使用者啟動Apache|Nginx的方法

神諭丶發表於2014-12-23
眾所周知,apache的80埠為系統保留埠,如果透過其他非root使用者啟動,會報錯如下:

(13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs

因為普通使用者只能用1024以上的埠,1024以內的埠只能由root使用者使用。


但是為了避免每次啟動都透過root使用者,可以透過set UID的方式來解決此問題。

一次性進行如下操作即可完成。
在root使用者環境中做如下操作
cd ……/apache/bin
chown root httpd
chmod u+s httpd
再 su - USERNAME
到普通使用者下,透過
……/apache/bin/apachectl start即可



為何不chmod u+s apachectl呢?
因為set UID這種方式只針對二進位制檔案有效,而tail一下apachectl發現:
apachectl是一個指令碼檔案,仔細查閱發現有如下一句

HTTPD='/home/……/apache/bin/httpd'

得出結論:apachectl指令碼是透過啟動httpd檔案來啟動整個httpd服務。
再次cat httpd,出現各種不可讀亂碼,ctrl+c結束輸出之後,斷定httpd為二進位制檔案。
最後chmod u+s httpd即可,當然得保證httpd的所屬者為root使用者,如果不是,執行:
chown root httpd即可。



同樣,nginx啟動也如此,用root使用者進入....nginx/sbin
然後chown root nginx
chmod u+s nginx
然後透過普通使用者就可以啟動了。

再同樣,tomcat也如此。


當然,修改預設埠到大於1024也是可以的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-1377290/,如需轉載,請註明出處,否則將追究法律責任。

相關文章