Linux系统中的nobody是一个特殊的系统用户,它的UID和GID通常都是65534,权限被严格限制在最低水平,主要作用是运行那些不需要特殊权限的服务进程,降低服务被入侵后带来的系统安全风险。

nobody用户的基本属性
我们可以通过查看/etc/passwd文件来确认nobody用户的基础信息,执行以下命令:
# 查看passwd文件中nobody的配置 grep nobody /etc/passwd
正常情况下输出内容如下:
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
各个字段的含义如下:
- 第一个字段
nobody是用户名 - 第二个字段
x表示密码存储在/etc/shadow文件中 - 第三个字段
65534是UID,也就是用户ID - 第四个字段
65534是GID,也就是用户组ID - 第五个字段
nobody是用户描述信息 - 第六个字段
/nonexistent是用户的家目录,这个目录通常不存在,无法登录 - 第七个字段
/usr/sbin/nologin是用户的登录Shell,设置为nologin意味着该用户无法直接登录系统
nobody用户的常见使用场景
运行低权限服务
很多不需要读写系统核心文件的服务,默认会使用nobody用户运行,比如早期的NFS服务、部分Web服务器的静态资源服务进程等。以Nginx为例,部分场景下可以配置静态资源服务进程以nobody身份运行,配置方式如下:
# nginx配置片段,设置工作进程用户为nobody user nobody; worker_processes auto;
临时文件权限控制
系统中部分临时目录会设置允许nobody用户读写,比如/tmp目录的权限通常是1777,nobody用户可以在其中创建临时文件,但无法修改其他用户的文件,避免临时文件被恶意篡改。
沙箱环境隔离
在运行不可信的脚本或者程序时,可以切换到nobody用户执行,限制程序的权限,即使程序存在漏洞,也无法对系统造成过大破坏。切换用户的命令如下:
# 切换到nobody用户执行指定命令 sudo -u nobody 要执行的命令
nobody和普通用户的区别
我们可以通过下表对比nobody和普通用户的差异:
| 对比项 | nobody用户 | 普通用户 |
|---|---|---|
| UID范围 | 通常是65534 | 1000及以上(不同发行版可能有差异) |
| 登录权限 | 无法登录系统,Shell为nologin | 可以登录系统,有可用的Shell |
| 权限级别 | 极低,仅能操作权限开放的文件 | 拥有自己的家目录和部分系统操作权限 |
| 使用场景 | 运行低权限服务、隔离不可信程序 | 日常系统操作、运行个人程序 |
使用nobody用户的注意事项
- 不要随意修改nobody用户的UID和GID,避免依赖该用户的服务出现异常
- 不要让nobody用户拥有过高权限,否则会失去它的安全防护作用
- 如果服务需要访问特定文件,不要直接给nobody开放全局权限,最好通过ACL单独配置该服务所需文件的访问权限
- 部分系统可能会把nobody用户作为默认的匿名用户,注意不要误删该用户,否则可能导致依赖它的服务无法启动
常见问题解答
nobody用户可以被删除吗
不建议删除,很多系统服务默认依赖nobody用户,删除后可能导致NFS、部分Web服务等出现异常,如果需要限制该用户,可以通过修改权限而不是删除的方式处理。
如何查看当前以nobody身份运行的进程
可以执行以下命令查看:
# 查看所有以nobody用户运行的进程 ps -u nobody
nobody用户的家目录不存在会有问题吗
不会,因为nobody用户本身无法登录系统,也不需要家目录存储个人文件,/nonexistent目录不存在是正常配置,不需要手动创建。