本文将从以下几个方面具体阐述nobody进程的前世今生
-
如何给予nobody权限
-
nobody进程负责的任务以及实现
如何给予nobody权限
先看看在系统中ftp服务器是如何工作的吧
[root@VM_0_11_redhat ~]# ps -ef | grep miniftp root 6362 1 0 May13 ? 00:00:00 ./miniftpd nobody 32305 6362 0 18:23 ? 00:00:00 ./miniftpd root 32306 32305 0 18:23 ? 00:00:00 ./miniftpd
在这里,miniftpd的客户端是以root用户链接的,这显然不太合适,但是这不是重点,我们可以看到负责链接unix内核和用户环境的nobody进程,居然是以noobody权限启动的,这个权限显然不足以绑定固定端口20,所以我们需要对其提升权限。
首先我们将进程的用户更改成nobody
if (setegid(pw->pw_gid) < 0) ERR_EXIT("setegid"); if (seteuid(pw->pw_uid) < 0) ERR_EXIT("seteuid");
在capablity.h文件中定义了以下的结构体
typedef struct __user_cap_header_struct { __u32 version; int pid; } *cap_user_header_t; typedef struct __user_cap