我可以在命令中获得与 EUID 不同的 UID 和与 EGID 不同的 GID 吗?
Can I get a different UID than EUID and GID than EGID in a command?
我有一个程序可以获取自己的 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 编号的名字。
我有一个程序可以获取自己的 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 编号的名字。