我可以在命令中得到与EUID不同的UID和GID与EGID不同的UID吗?

我有一个程序,得到自己的UID、EUID、GID、EGID,我想得到UID!=EUID和GID!=EGID。

我试过改变程序文件的所有者和组,但我总是得到同样的结果。

下面是c代码。

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    char cad[128];

    pid_t pid;
    pid = getpid();

    char s1[] = "ps -p ";
    char s2[] = " -o cmd,pid,ppid,uid,euid,gid,egid,pri,stat";
    char spid[42];
    sprintf(spid, "%d", (int)pid);
    char result[2048];

    strcpy(result, s1);
    strcat(result, spid);
    strcat(result, s2);

    sprintf(cad,"Program %s started.\n",argv[0]);
    write(1,cad,strlen(cad));

    system(result);

    read(0,cad,1);

    sprintf(cad,"Program %s ended.\n",argv[0]);
    write(1,cad,strlen(cad));

    exit(0);
}

我试过的命令是:

$ sudo chown 2000 filename
$ sudo chgrp 2000 filename
$ sudo chmod u+r,g+x filename

然后执行编译后的程序 总是得到。

Program ./pgm1_1_1 started.
CMD                           PID  PPID   UID  EUID   GID  EGID PRI STAT
./pgm1_1_1                  18216 17683  1000  1000  1000  1000  19 S+

解决方案:

你没有设置权限中的SUID和SGID位。

sudo chmod ug+s filename

或者,如果要一次完成所有的权限设置,你可以使用其中的一种:

sudo chmod 6755 filename              # Numeric permissions (octal)
sudo chmod a=rx,u+w,ug+s filename     # Symbolic permissions

你应该运行 ls -l filename 完成权限设置后。 当SUID和SGID位被设置后,你应该会看到这样的内容。

-rwsr-sr-x  1 2000  2000  8712 May  8 00:18 filename

这两个 s 值在权限中是至关重要的。 你可能会有一些名字,我可以看到UID和GID号。

本文来自投稿,不代表实战宝典立场,如若转载,请注明出处:https://www.shizhanbaodian.com/40693.html

(0)
上一篇 15小时前
下一篇 15小时前

相关推荐

发表评论

登录后才能评论