正在运行的进程切换自己的属主失败
例如:一个进程启动时是使用用户A启动的,这个进程运行期间,能否将自己切换成用户B么?
使用setuid尝试,发现总是失败,测试使用文件权限如下设置:
-rwxr-xr-x 1 nmsuser root 10300 Apr 26 15:32 a.out
-rwx------ 1 ftpuser root 12 Apr 26 11:13 testfile.txt
测试代码如下,使用nmsuser登录系统执行a.out:
int main(int argc, void** argv)
{
struct passwd *pw;
uid_t uid;
pw = getpwnam("ftpuser");
printf("\n\n\n");
printf("getpwnam(ftpuser):\n");
printf("name = %s\nuid = %d\ngid = %d\nhome = %s\nshell = %s\n",\
pw->pw_name, pw->pw_uid, pw->pw_gid, pw->pw_dir, pw->pw_shell);
int err = setuid(pw->pw_uid);
printf("new UID: %d\n", getuid());
printf("errcode: %d\n", err);
printf("errno: %d\n", errno);
char errmsg[1024] = {0};
perror(errmsg);
printf("%s\n", errmsg);
FILE* pFile = fopen("testfile.txt", "r");
if (NULL == pFile)
{
printf("Open File Fail!\n");
return 0;
}
char buf[1024] = {0};
int bytes_read = fread(buf, sizeof(buf), 12, pFile);
printf("%s\n", buf);
return 0;
}
输出错误结果如下:
getpwnam(ftpuser):
name = ftpuser
uid = 110
gid = 0
home = /opt/backup/ftpboot
shell = /bin/bash
new UID: 111
errcode: -1
errno: 1
Not owner
Open File Fail!