linux 实际用户ID 有效用户ID 和设置用户ID位
实际用户ID:实际用户ID标识了我们是谁,通常在登录后不会改变,但是超级用户有方法改变。
有效用户ID:有效用户ID决定了文件访问权限(通常有效用户ID等于实际用户ID)。
以上概念可能比较抽象,举例说明:
用户A(实际用户ID=110) 用户B(实际用户ID=120)
文件: 1.txt(用户A有读写权限,用户B没有读写权限)
一个用户A创建了一个可执行文件 test,然后这个可执行文件test属于ID为110的用户A。test可执行程序在执行后会操作文件1.txt。用户A去执行test程序后,进程的有效用户ID就等于实际用户ID,也就是110。此时可以读写1.txt。
但是当用户B去执行test程序后,进程的有效用户ID等于实际用户ID,也就是120。因为有效用户ID决定了文件访问权限,ID120对1.txt没有读写权限,此时进程将无法读写1.txt。
如果用户A在创建了test后,设置了用户ID位,
chmod u+s test
此时,用户B再去执行test程序后,进程的实际用户ID=120,但是因为test设置了用户ID位,有效用户ID=110(也就是test文件的实际所属用户),此时就可以正常读写1.txt。
这就是有效用户ID决定文件访问权限的意思。
像passwd这个命令操作了/etc/passwd这个文件,这个文件普通用户是无法修改的,但是root用户对passwd设置了用户ID位,在普通用户使用passwd时,其有效用户ID等于了root的有效用户ID,就可以对/etc/passwd进行修改了。