chsh
プログラムは、/etc/passwd
ファイルを変更してユーザーのログインシェルを変更するために使用します。誰でもこのコマンドを発行できますが、通常のユーザーは互いのデフォルトシェルを変更できないようにする必要があります。chshはどのようにlinuxに実装されていますか?
chsh
のようなプログラムでは、ユーザーは自分のシェルを変更できますが、別のユーザーのシェルは変更できません。使用する必要のある特定のシステムコールまたはライブラリコールがありますか?
chsh
プログラムは、/etc/passwd
ファイルを変更してユーザーのログインシェルを変更するために使用します。誰でもこのコマンドを発行できますが、通常のユーザーは互いのデフォルトシェルを変更できないようにする必要があります。chshはどのようにlinuxに実装されていますか?
chsh
のようなプログラムでは、ユーザーは自分のシェルを変更できますが、別のユーザーのシェルは変更できません。使用する必要のある特定のシステムコールまたはライブラリコールがありますか?
実際は簡単です。
$ 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
を比較することで、それが許可されているかどうかを確認できます。
通常のユーザーは自分の行だけを変更できますが、実際のルートは誰でも変更できることを覚えておいてください。
詳細については、getuid
、geteuid
のマニュアルページとそれにリンクされている他の機能を参照してください。
私はあなたの答えからその概念を理解することができます。 chshのCコードを共有していただけますか? – Kaustav
Linux版のchshは[こちら](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 - 私は少し質問を編集し、私の近くの投票を撤回しました。 –