問題
user www未設置引發的權限問題
更改 Nginx 服務的默認用戶
<nginx.conf> nginx用戶權限
在nginx.conf文件的第一行一般是設置用戶的地方(編譯安裝nginx時的參數--user=
如不指定nginx默認用戶是nobody. 這里用戶的設置又有什么意義呢?主要是指定執行nginx的worker process的用戶,linux里所有程序都是文件,都具有權限問題,這個指定的用戶對特定的文件有沒有權限訪問或執行,就是這個用戶的意義。
本人遇到的問題
2018/04/04 11:27:28 [crit] 28789#0: *3670 open() "/usr/local/nginx/fastcgi_temp/1/20/0000000201" failed (13: Permission denied) while reading upstream, client: 114.248.147.155, server: localhost, request: "GET /phpmyadmin/js/get_scripts.js.php?scripts%5B%5D=jquery/jquery.min.js&scripts%5B%5D=jquery/jquery-migrate-3.0.0.js&scripts%5B%5D=sprintf.js&scripts%5B%5D=ajax.js&scripts%5B%5D=keyhandler.js&scripts%5B%5D=jquery/jquery-ui.min.js&scripts%5B%5D=jquery/jquery.cookie.js&scripts%5B%5D=jquery/jquery.mousewheel.js&scripts%5B%5D=jquery/jquery.event.drag-2.2.js&scripts%5B%5D=jquery/jquery-ui-timepicker-addon.js&v=4.7.9 HTTP/1.1", upstream: "fastcgi://127.0.0.1:9001", host: "59.110.161.17"
解決方案
查看了一下nginx進程ps aux|grep nginx,發現都是nobody的進程,但是nginx的目錄都是root用戶;
解決:權限問題。編輯nginx.conf 把nginx 運行時的用戶 由nobody 改為www解決;查看編輯vim nginx.conf:
user nobody
改成:user root(或者www)
關於linux下的nobody用戶
nobody 是系統用戶,是一個不能登陸的帳號,一個特殊用途的用戶 ID ,一些服務進程如apache,aquid等都采用一些特殊的帳號來運行,比如nobody,news,games等等。一般來說 uid < 500 的都是系統 ID 。
Linux 系統為了安全,很多操作和服務的運行都不是運行在 root 用戶下面的,而是一個專用的 ID ,這個 ID 一般就是 nobody ,這樣就可以把每個服務運行的情況隔離出來。保證不會因為服務器程序的問題而讓服務器程序成了黑客的直接操作源(黑客拿下了服務器程序,也僅僅是 nobody 用戶而不是 root 用戶)。同時也不會影響其他用戶的數據。
服務器程序提權有專用的辦法來防止惡意使用的。
除了 nobody ,常見的還有 ftp 、ssh 什么的。有的不是用來跑服務,而是用來占坑,主要是用用戶組的權限管理進行權限設置,這個時候會有一個占坑用的同名 ID 加入到用戶組。這種情況好像主要是為了兼容。
問題描述
上午據反映,系統響應很慢,界面要刷新很久才出得來。查后台也沒有報什么錯,我們系統是用nginx做負載均衡。慣性地不走負載均衡而直接訪 問單節點應用,發現響應很快,很正常。初步定位問題出在nginx上,然后查nginx日志,發現有很多錯誤,錯誤中有“13: Permission denied”這個信息,明顯是權限問題,很奇怪,之前運行都很正常啊。后來一問才知道,維護人員做了操作。
系統上nginx安裝時使用的是root用戶,也是用root用戶啟動的,所以要修改配置的時候需要使用root用戶,管理上不方便,所以維護人員 心血來潮修改了nginx的權限(后來知道他是使用這個命令修改的權限chown -R user:group $nginxdir)。就是將nginx的用戶和組都換掉了,但是這樣為什么會造成“響應慢”呢?
問題原因及解決
前面提到在linux上有些應用程序的一些進程會默認使用nobody這個用戶來啟動,以保安全。nginx有兩種進程,除主進程之外的工作進程都 是用nobody這個用戶啟動的(nginx工作進程的數量使用worker_processes這個參數來設定)。而工作進程要訪問nginx下這兩個 目錄client_body_temp和proxy_temp(這兩個目錄按我的理解是緩存一些靜態文件,比如圖片或者css文件什么的,以提高 nginx訪問速度),權限變更后,造成工作進程訪問不了這兩個目錄下的內容,造成某些圖片和連接打不開,就像響應很慢一樣。將權限變更一下就OK了。
