web-dev-qa-db-ja.com

「passwd」コマンドはどのようにrootユーザー権限を取得しますか?

Linuxは、passwd、setuidなどの特定のプロセスのみにeuid 0(rootのuid)を与える必要があることをどのようにして知っていますか?.

プロセスがroot権限を取得できる場合、それはLinuxプラットフォームでの潜在的なセキュリティ違反につながりませんか?

たとえば、passwdなどのrootユーザー権限を取得できるプログラムを作成すると、/ etc/passwd、/ etc/groupsなどの重要なシステムファイルが破損する可能性があります。

Linuxはどのようにして安全性を維持していますか?

7
gulam

passwdプログラムには、setuidビットセットがあり、ls -lで確認できます。

-rwsr-xr-x 1 root root 39104 2009-12-06 05:35 /usr/bin/passwd

s(行の4番目の文字)です。

この許可ビットが設定されているすべてのプログラムは、そのプログラムの所有者として実行されます。この例では、ユーザーはroot(行の3番目のワード)です。

これらのsetuidプログラムは、システムに影響を与えないようにする必要があります。システムのすべてのユーザーが有効なroot特権で実行できるためです。そのため、自分のパスワードのみを変更できます。 Linuxや他の同様のオペレーティングシステムは、これらのsetuidプログラムの作成者が多くの注意を払っているため、依然として安全です。

たとえば、人気のあるsetuidプログラムであるApache Webサーバーの suexec.c を参照してください。そのソースコードには異常に多くのコメントがあります。

13
Roland Illig

Roland Illigの回答の補足として、root権限が与えられると、システムファイルを破損したり、さまざまな方法でシステムを危険にさらしたりするプログラムを作成することは完全に可能です。

問題は、単にwritingであることを意味します。ルートとして自動的に実行されるわけではありません。所有者をルートに設定する必要があります。 Rolandが参照するsetuidビットを設定する必要があります-そしてrootだけがそれを行う権利を持っています。

つまり、はい。setuidビットが設定されたすべてのバイナリは、少なくともセキュリティリスクの可能性があります。 root権限を取得するためにsetuid対応のバイナリの欠陥を悪用することは、いわゆる Privilege Escalation 攻撃の最も一般的な原因であり、発生した場合には大きな問題になる傾向があります。このため、setuidを使用するソフトウェアは比較的少なく、存在するソフトウェアは厳重に監視される傾向があります。

4
Shadur