Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
chsh是如何在linux中实现的?_Linux_Security_Unix - Fatal编程技术网

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-例如,很容易找到和阅读。我怀疑其他实现是否更复杂。