Nginx用戶權(quán)限 在nginx.conf文件的第一行一般是設(shè)置用戶的地方(編譯安裝nginx時(shí)的參數(shù)--user=<user>也是指定用戶的地方),如 user www www; 如不指定默認(rèn)是nobody. 這里用戶的設(shè)置又有什么意義呢?主要是指定執(zhí)行nginx的worker process的用戶,linux里所有程序都是文件,都具有權(quán)限問(wèn)題,這個(gè)指定的用戶對(duì)特定的文件有沒(méi)有權(quán)限訪問(wèn)或執(zhí)行,就是這個(gè)用戶的意義。 一、本人遇到問(wèn)題 1.1 問(wèn)題描述 不想讓請(qǐng)求直接訪問(wèn)到具體頁(yè)面,只是列出目錄內(nèi)的文件列表。于是把proxy_pass參數(shù)去掉,配置autoindex on,然后指定root目錄。可訪問(wèn)后返回403,沒(méi)有權(quán)限。 1.2 問(wèn)題解決 猜測(cè)是用戶原因,因?yàn)槭悄J(rèn)的nobody,沒(méi)有訪問(wèn)目錄權(quán)限,然后指定有權(quán)限的用戶,ok了。 二、網(wǎng)上類似問(wèn)題 例一:403錯(cuò)誤,沒(méi)有權(quán)限 參考: http://www./os/201306/218538.html http://www./os/201203/122371.html 有時(shí)候當(dāng)Nginx讀取本地目錄時(shí)會(huì)收到403錯(cuò)誤,權(quán)限問(wèn)題。 先來(lái)了解一下 Nginx的用戶管理 : (1) Nginx在以Linux service腳本啟動(dòng)時(shí),通過(guò)start-stop-domain啟動(dòng),會(huì)以root權(quán)限運(yùn)行daemon進(jìn)程。 (2) 然后daemon進(jìn)程讀取/etc/nginx/nginx.conf文件中的user配置選項(xiàng),默認(rèn)這里的user=nginx,也就是用nginx用戶啟動(dòng)worker process。403錯(cuò)誤就是因?yàn)閚ginx用戶沒(méi)有權(quán)限訪問(wèn)我當(dāng)前開(kāi)發(fā)用的用戶目錄,/home/dean/work/resources。 解決方法是將user=nginx替換成root,然后重新啟動(dòng)nginx,可以了。 其他方法也試過(guò),比如給/home/dean/work/resources目錄設(shè)置777權(quán)限,比如將nginx用戶加入root組,都不行。所以當(dāng)開(kāi)發(fā)的時(shí)候,就用user=root配置吧。至于產(chǎn)品環(huán)境下,resouces目錄完全可以放到nginx用戶目錄下,所以問(wèn)題不大。 舉例2:訪問(wèn)速度慢 http://www.qqstock.cn/content/12/0914/16/1073512_236099670.shtml 在說(shuō)問(wèn)題前,先掃下盲,關(guān)于linux下的nobody用戶: nobody 是系統(tǒng)用戶,是一個(gè)不能登陸的賬號(hào),一個(gè)特殊用途的用戶 ID ,一些服務(wù)進(jìn)程如apache,aquid等都采用一些特殊的賬號(hào)來(lái)運(yùn)行,比如nobody,news,games等等。一般來(lái)說(shuō) uid < 500 的都是系統(tǒng) ID 。 Linux 系統(tǒng)為了安全,很多操作和服務(wù)的運(yùn)行都不是運(yùn)行在 root 用戶下面的,而是一個(gè)專用的 ID ,這個(gè) ID 一般就是 nobody ,這樣就可以把每個(gè)服務(wù)運(yùn)行的情況隔離出來(lái)。保證不會(huì)因?yàn)榉?wù)器程序的問(wèn)題而讓服務(wù)器程序成了黑客的直接操作源(黑客拿下了服務(wù)器程序,也僅僅是 nobody 用戶而不是 root 用戶)。同時(shí)也不會(huì)影響其他用戶的數(shù)據(jù)。 服務(wù)器程序提權(quán)有專用的辦法來(lái)防止惡意使用的。 除了 nobody ,常見(jiàn)的還有 ftp 、ssh 什么的。有的不是用來(lái)跑服務(wù),而是用來(lái)占坑,主要是用用戶組的權(quán)限管理進(jìn)行權(quán)限設(shè)置,這個(gè)時(shí)候會(huì)有一個(gè)占坑用的同名 ID 加入到用戶組。這種情況好像主要是為了兼容。 問(wèn)題描述: 上午業(yè)務(wù)人員反映,系統(tǒng)響應(yīng)很慢,界面要刷新很久才出得來(lái)。查后臺(tái)也沒(méi)有報(bào)什么錯(cuò),我們系統(tǒng)是用nginx做負(fù)載均衡。慣性地不走負(fù)載均衡而直接訪 問(wèn)單節(jié)點(diǎn)應(yīng)用,發(fā)現(xiàn)響應(yīng)很快,很正常。初步定位問(wèn)題出在nginx上,然后查nginx日志,發(fā)現(xiàn)有很多錯(cuò)誤,錯(cuò)誤中有“13: Permission denied”這個(gè)信息,明顯是權(quán)限問(wèn)題,很奇怪,之前運(yùn)行都很正常啊。后來(lái)一問(wèn)才知道,維護(hù)人員做了操作。 系統(tǒng)上nginx安裝時(shí)使用的是root用戶,也是用root用戶啟動(dòng)的,所以要修改配置的時(shí)候需要使用root用戶,管理上不方便,所以維護(hù)人員 心血來(lái)潮修改了nginx的權(quán)限(后來(lái)知道他是使用這個(gè)命令修改的權(quán)限chown -R user:group $nginxdir)。就是將nginx的用戶和組都換掉了,但是這樣為什么會(huì)造成“響應(yīng)慢”呢? 問(wèn)題原因及解決: 前面提到在linux上有些應(yīng)用程序的一些進(jìn)程會(huì)默認(rèn)使用nobody這個(gè)用戶來(lái)啟動(dòng),以保安全。nginx有兩種進(jìn)程,除主進(jìn)程之外的工作進(jìn)程都 是用nobody這個(gè)用戶啟動(dòng)的(nginx工作進(jìn)程的數(shù)量使用worker_processes這個(gè)參數(shù)來(lái)設(shè)定)。而工作進(jìn)程要訪問(wèn)nginx下這兩個(gè) 目錄client_body_temp和proxy_temp(這兩個(gè)目錄按我的理解是緩存一些靜態(tài)文件,比如圖片或者css文件什么的,以提高 nginx訪問(wèn)速度),權(quán)限變更后,造成工作進(jìn)程訪問(wèn)不了這兩個(gè)目錄下的內(nèi)容,造成某些圖片和連接打不開(kāi),就像響應(yīng)很慢一樣。將權(quán)限變更一下就OK了。 |
|
來(lái)自: waitingnothing > 《Nginx》