我有一个程序,得到自己的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