linux权限

linux权限是linux中很重要的一部分。

linux设置用户ID和组ID

与一个进程相关的ID有6个或更多。
实际用户ID,实际组ID;有效用户ID,有效组ID,附属组ID;保存的设置用户ID,保存的设置组ID。
实际用户ID和实际组ID标识我们到底是谁。这两个字段在登录时取自口令文件的登录项。通常在一个登录会话期间这些值并不会改变。有效用户ID,有效组ID,附属组ID决定我们的文件访问权限。保存的设置用户ID和保存的设置组ID在执行一个程序时包含了有效用户ID和有效组ID的副本。

通常有效用户ID等于实际用户ID,有效组ID等于实际组ID。当执行一个程序文件时,进程的有效用户ID通常就是实际用户ID,有效组ID就是实际组ID。但是在文件模式字(st_mode)中设置一个特殊标志,其含义是“当执行此文件时,将进程的有效用户ID设置为文件所有者的用户ID”,同样在文件模式字中可以设置另一位,它将执行此文件的进程的有效组ID设置为文件的组所有者ID。在文件模式字的这两位被称为设置用户ID位设置组ID位

测试程序

思路尚不清晰,还没有说清楚这个问题。

get_uid_etc.cpp

1
2
3
4
5
6
7
8
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main() {
printf("uid = %d, gid = %d, euid = %d, egid = %d\n", getuid(), getgid(), geteuid(), getegid());
return 0;
}

查看get_uid_etc.cpp,可以看出get_uid_etc.cpp属于root用户。

1
2
3
4
5
6
7
xixi2@xixi2:~/liunx_prac$ ls -l get_uid_etc
-rwxr-xr-x 1 root root 8488 10月 13 11:11 get_uid_etc

# 设置用户ID位
xixi2@xixi2:~/liunx_prac$ sudo chmod u+s get_uid_etc
xixi2@xixi2:~/liunx_prac$ ls -l get_uid_etc
-rwsr-xr-x 1 root root 8488 10月 13 11:11 get_uid_etc

使用who可以查看当前登录用户为xixi2。

1
2
3
4
5
xixi2@xixi2:~/liunx_prac$ who
xixi2 :0 2019-10-09 16:12 (:0)

xixi2@xixi2:~/liunx_prac$ cat /etc/passwd | grep xixi2
xixi2:x:1000:1000:xixi2,,,:/home/xixi2:/bin/bash

以xixi2身份运行get_uid_etc.cpp文件。

1
2
xixi2@xixi2:~/liunx_prac$  ./get_uid_etc 
uid = 1000, gid = 1000, euid = 1000, egid = 1000

以root身份运行get_uid_etc.cpp文件。

1
2
xixi2@xixi2:~/liunx_prac$  sudo ./get_uid_etc 
uid = 0, gid = 0, euid = 0, egid = 0

参考文献

[1]深入了解linux权限:https://mp.weixin.qq.com/s/nxJe3XDighMysLgbSYxX9A
[2]linux查看当前登录用户:https://blog.csdn.net/y874961524/article/details/71102134