chsh
程序用于通过修改/etc/passwd
文件来更改用户的登录shell。任何人都可以发出此命令,但普通用户必须无法更改彼此的默认shell。
chsh
等程序如何允许用户更改自己的shell而不是其他用户的shell?是否需要使用特定的系统或库调用?
答案 0 :(得分:2)
实际上很容易。 chsh
是一个set-uid程序:
$ ls -l /usr/bin/chsh
-rwsr-xr-x 1 root root ... /usr/bin/chsh
^
+--- see the 's'!
因此程序以root的有效UID运行。
现在,它如何知道哪个用户正在调用它?因为set set-uid会更改有效 UID,而不会更改真实 UID。通过将实际UID与您想要更改的passwd
行进行比较,可以检查您是否被允许这样做。
请记住,普通用户只能更改自己的行,而真正的root用户可以更改任何人。
有关详细信息,请参阅getuid
,geteuid
的手册页以及与之关联的其他功能。