2016-05-30 17 views
0

chshプログラムは、/etc/passwdファイルを変更してユーザーのログインシェルを変更するために使用します。誰でもこのコマンドを発行できますが、通常のユーザーは互いのデフォルトシェルを変更できないようにする必要があります。chshはどのようにlinuxに実装されていますか?

chshのようなプログラムでは、ユーザーは自分のシェルを変更できますが、別のユーザーのシェルは変更できません。使用する必要のある特定のシステムコールまたはライブラリコールがありますか?

+2

@TobySpeight:私は同意しません。私はOPがchshがどのようにセキュリティを実装しているのかを尋ねていると思います。ツールの使い方ではありません。それはプログラミングの質問です。 – rodrigo

+0

@rodrigo - 私は少し質問を編集し、私の近くの投票を撤回しました。 –

答えて

2

実際は簡単です。

$ ls -l /usr/bin/chsh 
-rwsr-xr-x 1 root root ... /usr/bin/chsh 
^
    +--- see the 's'! 

だから、プログラムがrootの実効UIDで実行されます。chshは、セットのuidプログラムです。

今、どのユーザーがそれを呼び出すのかはどのようにわかりますか? set set-uidはの有効な UIDを変更しますが、 UIDは変更しません。実際のUIDと変更したい行のpasswdを比較することで、それが許可されているかどうかを確認できます。

通常のユーザーは自分の行だけを変更できますが、実際のルートは誰でも変更できることを覚えておいてください。

詳細については、getuidgeteuidのマニュアルページとそれにリンクされている他の機能を参照してください。

+0

私はあなたの答えからその概念を理解することができます。 chshのCコードを共有していただけますか? – Kaustav

+1

Linux版のchshは[こちら](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)は、たとえば、検索して読みやすくなりました。私は他の実装がもう複雑ではないかと疑います。 –

関連する問題