chsh是如何在linux中实现的?
chsh是如何在linux中实现的?,linux,security,unix,Linux,Security,Unix,chsh程序用于通过修改/etc/passwd文件来更改用户的登录shell。任何人都可以发出此命令,但普通用户不能更改彼此的默认shell 像chsh这样的程序如何允许用户更改自己的shell而不是其他用户的shell?是否需要使用特定的系统或库调用?这其实很简单chsh是一个设置uid的程序: $ ls -l /usr/bin/chsh -rwsr-xr-x 1 root root ... /usr/bin/chsh ^ +--- see the 's'! 因此,程序使用roo
chsh
程序用于通过修改/etc/passwd
文件来更改用户的登录shell。任何人都可以发出此命令,但普通用户不能更改彼此的默认shell
像
chsh
这样的程序如何允许用户更改自己的shell而不是其他用户的shell?是否需要使用特定的系统或库调用?这其实很简单chsh
是一个设置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
和其他链接函数的手册页。这其实很简单chsh
是一个设置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
和其他链接函数的手册页。@TobySpeight:我不同意。我认为OP所问的是chsh如何实现其安全性,而不是如何使用该工具。这是一个编程问题。@rodrigo-我对这个问题做了一些编辑,收回了我的投票。@TobySpeight:我不同意。我认为OP所问的是chsh如何实现其安全性,而不是如何使用该工具。这是一个编程问题。@rodrigo-我对这个问题做了一些编辑,收回了我的投票。我可以从你的回答中理解这个概念。你能分享chsh的C代码吗?chsh的Linux版本是。我已经突出显示了我认为您感兴趣的那一行。@Kaustav-例如,很容易找到和阅读。我怀疑其他实现是否更复杂。我可以从您的回答中理解这个概念。你能分享chsh的C代码吗?chsh的Linux版本是。我已经突出显示了我认为您感兴趣的那一行。@Kaustav-例如,很容易找到和阅读。我怀疑其他实现是否更复杂。