正在运行的进程切换自己的属主失败

blackcat242 2012-04-26 03:42:59
例如:一个进程启动时是使用用户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!
...全文
76 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
root_jli 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:

将setuid改为setreuid试试。
setuid()要有效当前进程必须是root,uid=0

不过你的程序很奇怪,uid=110用户竟然和root同等权限,但不是root.
uid = 110
gid = 0

setreuid也试过了,一样失败
[/Quote]
chown nmsuser:users a.out
chown ftpuser:users testfile.txt
使用setreuid没问题,
setuid的man手册中指名了If the effective UID of the caller is root, the real UID and saved set-user-ID are also set.(要让这个函数有效,其用户识别码必须为0)没有说是GID呀。
所以看你怎么设计了。
qq120848369 2012-04-26
  • 打赏
  • 举报
回复
没有这种功能,你必须以root或者将程序提升为s权限,否则是不可能直接变成另一个uid的。
blackcat242 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

将setuid改为setreuid试试。
setuid()要有效当前进程必须是root,uid=0

不过你的程序很奇怪,uid=110用户竟然和root同等权限,但不是root.
uid = 110
gid = 0
[/Quote]
setreuid也试过了,一样失败
root_jli 2012-04-26
  • 打赏
  • 举报
回复
将setuid改为setreuid试试。
setuid()要有效当前进程必须是root,uid=0

不过你的程序很奇怪,uid=110用户竟然和root同等权限,但不是root.
uid = 110
gid = 0

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧