扫盲说明:
Linux用户分为三类:超级用户、系统用户、普通用户
超级用户:root (uid=0)
系统用户:又称伪用户(uid的范围是1-499,一般来说 uid < 500 的都是系统 ID),与系统和程序服务相关,因为并不是真实的使用者,所以叫伪用户,如bin、daemon、shutdown、halt、nobody等,任何Linux系统都默认有这些伪用户;mail、ftp、sshd等,与Linux系统的进程相关;后面会单独说明一下nobody用户。
普通用户:(uid 500-60000)也就是我们平时所使用的用户
用户信息存放位置
cat /etc/passwd # 查看用户信息
结果如图:
含义:
1:用户名,用户登录系统时使用的用户名
2:密码位
3:UID,用户标识号
4:GID,缺省组标识号
5:注释性描述
6:宿主目录,用户登录系统后的缺省目录
7:用户使用的shell,默认为bash
用户组
每个用户至少属于一个用户组,每个用户组拥有多个用户,每个用户组共享共同的权限
cat /etc/group # 查看用户组
格式说明
root:x:0:
root:组名,
x:组密码位
0:组标识号
nobody用户专题
nobody 是系统用户,是一个不能登陆的帐号,一个特殊用途的用户 ID ,一些服务进程如apache,aquid等都采用一些特殊的帐号来运行,比如nobody,news,games等等。
服务器程序提权有专用的办法来防止恶意使用的。
除了 nobody ,常见的还有 ftp 、ssh 什么的。有的不是用来跑服务,而是用来占坑,主要是用用户组的权限管理进行权限设置,这个时候会有一个占坑用的同名 ID 加入到用户组。这种情况好像主要是为了兼容。
nobody的应用举例
最常见的web应用就使用到了nobody用户。
问题描述:
上午业务人员反映,系统响应很慢,界面要刷新很久才出得来。查后台也没有报什么错,我们系统是用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了。