最近在工作中遇到nobody用户的问题。关于nobody的介绍,可以看这篇文章。
https://blog.csdn.net/weixin_37569048/article/details/83030167?ops_request_misc=&request_id=&biz_id=102&utm_term=nobody&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~sobaiduweb~default-1-83030167
对于服务器来说一般请求发过来以后,apach要执行代码都是通过这个nobody用户权限来执行,我们在调试程序的时候需要使用nobody用户来调试,我们可以使用su命令来实现。
举个例子:
下面的代码是读取一个名叫test的文件,然后关闭。如果这文件不存在时创建这个文件。
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
int fd = open("test", O_RDONLY|O_CREAT);
if (fd < 0){
perror("open\n");
return -1;
}
if (close(fd) < 0){
perror("close\n");
return -1;
}
return 0;
}
编译gcc openfile.c -g -o openfile得到可执行文件openfile
现在我们使用nobody用户来执行:
su -c "./openfile" -s /bin/bash nobody
原因是最开始我们没有创建test这个文件,于是这段代码就要创建test,创建的权限是看该文件夹是否有写的权限,应为对于nobody这个others来说没有写权限。
我觉得就读文件来说nobody的权限低这种说法是不准确的,这个还是要看文件对others设置具体权限是什么。将nobody这个文件夹权限改成777。再试一次。
执行成功了,创建了一个所欲nobody的文件test。这就是我们可能看到的nobody文件的由来,比如服务器的session文件。
su的使用和具体参数含义可以通过man su来查看。