如何在linux中实现chsh?

时间:2016-05-30 15:54:14

标签: linux security unix

chsh程序用于通过修改/etc/passwd文件来更改用户的登录shell。任何人都可以发出此命令,但普通用户必须无法更改彼此的默认shell。

chsh等程序如何允许用户更改自己的shell而不是其他用户的shell?是否需要使用特定的系统或库调用?

1 个答案:

答案 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用户可以更改任何人。

有关详细信息,请参阅getuidgeteuid的手册页以及与之关联的其他功能。