chsh
程序用於通過修改/etc/passwd
文件來更改用戶的登錄shell。任何人都可以發出此命令,但普通用戶不能更改彼此的默認shell。如何在Linux中執行chsh?
程序如chsh
如何允許用戶更改他們自己的shell但不是其他用戶的shell?是否需要使用特定的系統或庫呼叫?
chsh
程序用於通過修改/etc/passwd
文件來更改用戶的登錄shell。任何人都可以發出此命令,但普通用戶不能更改彼此的默認shell。如何在Linux中執行chsh?
程序如chsh
如何允許用戶更改他們自己的shell但不是其他用戶的shell?是否需要使用特定的系統或庫呼叫?
實際上很簡單。 chsh
是一組的uid程序:
$ ls -l /usr/bin/chsh
-rwsr-xr-x 1 root root ... /usr/bin/chsh
^
+--- see the 's'!
因此該程序在執行與根的有效UID。
現在,它如何知道哪個用戶正在調用它?由於set set-uid更改了有效的 UID,但不是實際的 UID。通過比較真實的UID和你想改變的passwd
,你可以檢查你是否被允許這樣做。
請記住,普通用戶只能更改自己的行,而真正的根可以更改任何人。
有關更多詳細信息,請參閱手冊頁getuid
,geteuid
和其他鏈接的功能。
我可以從你的答案中理解這個概念。你能分享一下chsh的C代碼嗎? – Kaustav
chsh的Linux版本是[here](https://git.kernel.org/cgit/utils/util-linux/util-linux.git/tree/login-utils/chsh.c#n287)。我已經突出了我認爲您感興趣的一行。 – rodrigo
@Kaustav - [Debian的chsh'實現](https://anonscm.debian.org/cgit/pkg-shadow/shadow.git/tree/src/例如,chsh.c#n263)很容易找到並閱讀。我懷疑其他實現是否更復雜。 –
@TobySpeight:我不同意。我認爲OP在詢問'chsh'如何實現其安全性,而不是如何使用該工具。這是一個編程問題。 – rodrigo
@rodrigo - 我已經編輯了一些問題並收回了我的近距離投票。 –