「SUID(セットユーザーID)」属性の効果を試してみよう:“応用力”をつけるためのLinux再入門(12)(2/2 ページ)
ファイルやディレクトリのパーミッションには「r」「w」「x」という基本的な属性の他に、「SUID(セットユーザーID)」や「SGID(セットグループID)」という特殊な属性があります。前回はディレクトリでこれらの特殊な属性がどのように働くかを試しましたが、今回は実行可能ファイルに対するSUID属性を試します。
SUIDがどのように効いているか試してみよう
それでは、「passwd」コマンドを使って、SUIDの働きを確かめてみましょう。
passwdは、パスワードを変更するコマンドです。rootユーザーの場合は全てのユーザーのパスワードを変更できますが、その他のユーザーでも自分自身のパスワードならば変更できます。
パスワードを変更するには、「パスワードを記録しているファイル」(※)を書き換える必要がありますが、これにはroot権限が必要になります。このため、passwdコマンドは所有者rootかつSUIDが有効になっており、誰が実行してもroot権限を行使できることになります。
【※】「/etc/passwdや/etc/shadow」など。
passwdコマンドをコピーする
それでは、「/usr/bin/passwd」をホームディレクトリにコピーして実行してみましょう。実行画面では、自分の「Desktop」ディレクトリを使用します。
なお、カレントディレクトリのpasswdは、「./passwd」のようにパスを指定して実行します(本連載第8回を参照)。
なお、root以外のユーザーが「cp」コマンドでファイルをコピーした場合は、ファイルの所有者は自分自身になります。また、SUIDも保持されません(※)。
【※】rootユーザーで「cp -a」コマンドで属性を保持したままコピーすると、SUIDも保持されます。
従って、この状態では、たとえ自分のパスワードであってもパスワードを変更することはできません。
cp /usr/bin/passwd .
(passwdをカレントディレクトリにコピーする)
ls -l passwd
(属性を確認する)
./passwd
(カレントディレクトリのpasswdを実行する)(画面4)
所有者をrootに変更する
次に、「chown」コマンドで、カレントディレクトリにコピーしたpasswdの所有者をrootに変更してみましょう。なお、chownコマンドで所有者をrootにするには、root権限が必要です。「sudo」コマンドまたは「su」コマンドを使用してください(第11回を参照)。画面5では「su -c」で実行しています。
所有者をrootにしたら、この状態で再び「./passwd」でパスワードを変更できるかどうか試してみましょう。
chown root passwd
(passwdの所有者をrootに変更する※)
【※】root権限が必要です(sudoが使用可能であれば「sudo chown root passwd」で実行)
SUIDを有効にする
所有者をrootにしても、パスワードを変更することはできませんでした。それでは、今度は「chmodコマンドで、カレントディレクトリにコピーしたpasswdのSUIDを有効にしてみましょう(画面6)。なお、ファイルの所有者がrootなので、属性の変更にはroot権限が必要です。
所有者をrootに変更したら、あらためて「./passwd」を実行してみましょう。今度は変更できるはずです。
chmod u+s passwd
(passwdのSUIDを有効にする※)
【※】root権限が必要です(sudoが使用可能であれば「sudo chmod u+s passwd」で実行)
一般ユーザーが所有するファイルの場合
SUIDは“実行ファイルの所有者”の権利を引き継ぎます。従って、所有者が一般ユーザーのままでSUIDが有効になっている状態では、一般ユーザーの権限でrootユーザーが実行してもパスワードの変更ができない、ということになります。
それでは、もう一度「/usr/bin/passwd」をコピーし直して、SUIDだけ設定して試してみましょう。
ここでは“rootユーザーによる実行”を、suコマンドで「su -c "./passwd ユーザー名"」としています(画面7)。sudoコマンドが実行できる場合は「sudo ./passwd ユーザー名」としてください。
cp /usr/bin/passwd .
(passwdコマンドをカレントディレクトリにコピーする)
sudo -c "./passwd ユーザー名"
(rootでカレントディレクトリのpasswdを実行する)
(パスワードが変更できる)
chmod u+s passwd
(SUIDを有効にする)
sudo -c "./passwd ユーザー名"
(再度rootでカレントディレクトリのpasswdを実行する)
(パスワードが変更できない)
後始末
テストが終わったら、カレントディレクトリにコピーしたpasswdを削除しておきましょう(画面8)。
rm passwd
(passwdを削除する)
【注意】不要なSUIDは使用しないように!
SUIDが設定されているroot所有の実行ファイルは、誰が実行してもroot権限で実行されることになります。従って、セキュリティ上の問題になりやすく、取り扱いには十分な注意が必要です。
対策としては、例えば、(1)SUIDおよびSGIDが設定されているファイルのリストを作成しておき、(2)SUID/SGID付きのファイルが追加されていないかどうか、あるいは、SUID/SGIDが設定されているファイルが書き換えられていることはないかを定期的に確認する、というものがあります。
筆者紹介
西村 めぐみ(にしむら めぐみ)
PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.