2016-05-30 38 views
0

chsh程序用於通過修改/etc/passwd文件來更改用戶的登錄shell。任何人都可以發出此命令,但普通用戶不能更改彼此的默認shell。如何在Linux中執行chsh?

程序如chsh如何允許用戶更改他們自己的shell但不是其他用戶的shell?是否需要使用特定的系統或庫呼叫?

+2

@TobySpeight:我不同意。我認爲OP在詢問'chsh'如何實現其安全性,而不是如何使用該工具。這是一個編程問題。 – rodrigo

+0

@rodrigo - 我已經編輯了一些問題並收回了我的近距離投票。 –

回答

2

實際上很簡單。 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和其他鏈接的功能。

+0

我可以從你的答案中理解這個概念。你能分享一下chsh的C代碼嗎? – Kaustav

+1

chsh的Linux版本是[here](https://git.kernel.org/cgit/utils/util-linux/util-linux.git/tree/login-utils/chsh.c#n287)。我已經突出了我認爲您感興趣的一行。 – rodrigo

+1

@Kaustav - [Debian的chsh'實現](https://anonscm.debian.org/cgit/pkg-shadow/shadow.git/tree/src/例如,chsh.c#n263)很容易找到並閱讀。我懷疑其他實現是否更復雜。 –