- - PR -
一般ユーザにルート権限でシェルを実行する方法について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-09-07 11:17
ありがとうございます。 sudoと言うものをはじめて知りました。 ちょっと試しにやってみたいと思います。 なんか話しの内容を見ていると、 おっかないことをやっているように見えますが(素人の目では(笑)) sudoって手抜きなんですね・・・。 | ||||
|
投稿日時: 2004-09-07 11:54
こんにちわ.
sudo 使うこと自体が手抜きなのでなく, sudo を script で使うことが手抜きだったりするかなと. sudo はうまく使えばとても便利で, 例えば一般 user に管理権限は与えたくなくても 「これだけは使わせたい」場合に特定の command だけ sudo させたり, root の password を教えずに root 権限で command 実行させたり出来ます. ※使いようによっては root の password も変えられるので「無条件解放」は危険ですが... | ||||
|
投稿日時: 2004-09-07 12:56
「上手くいきませんでした」というのは具体的にはどーゆーことでしょうか。 SUIDビットで変更されるのはプロセスの実効ユーザIDです。 実ユーザIDは変更されません。プログラムによっては、実ユーザIDを チェックしているものもあります。 そーゆー状況でしょうか? | ||||
|
投稿日時: 2004-09-07 13:16
その、問題の実行ファイルを ls -l した結果は?
オーナー、グループ、アザーの状態は? | ||||
|
投稿日時: 2004-09-07 13:39
説明不足ですみませんでした。
バイナリファイルにs-bitを立ててルートの実行権限で実行しようとしたやり方は以下のようにしました 1.もともとの状態 -rwxr-xr-x 1 root sys 135240 3月 8 2004 utlsend この状態でutlsendを実行すると 一般ユーザの場合:無反応(そのまま次のプロンプト行に移る) ROOTユーザの場合:実行可能 2.s-bitを負荷した場合 -rwsr-xr-x 1 root sys 135240 3月 8 2004 utlsend この状態でutlsendを実行すると 一般ユーザの場合:無反応(そのまま次のプロンプト行に移る) ROOTユーザの場合:実行可能 1の時と2の時の動作は全く変わりませんでした。 ちなみに、pingを調べてみると -rwsr-xr-x 1 root root 28628 1月 25 2003 /bin/ping となっていて、何も変わらないように思えました。 pingと全く同じようにするために 「utlsend」のオーナー:グループを「root:root」に変更して実行しましたが 結果は変わりませんでした。 | ||||
|
投稿日時: 2004-09-07 15:55
utlsend がどう動くものか知りませんが、この動作をみる限り 「プログラムによっては、実ユーザIDをチェックしている ものもあります」とゆーことだと思います。 だとすれば、 「コンパイル前のソースに手を加える必要があるのでしょうか?」 という問いに対する答えは Yes です。 とはいえ... ひょっとしたら一般ユーザでも実行可能にする設定とかあるかも しれないので、そういうのを調べてみたらいかがでしょーか。 | ||||
|
投稿日時: 2004-09-07 16:29
"s-bit"を設定する方法でも"sudo"でもroot権限で動かす事ができませんでした
ぽんすさんの言われる通りプログラムが何らかの制限をかけている可能性も考えられます この辺に関してはサポートに質問を投げる事にします。 最後に確認しておきたいのですが、今回の"s-bit"を付加する方法で 今回のような特殊なケースを除くならばroot権限で実行できるという認識でよろしいのでしょうか? [ メッセージ編集済み 編集者: TSUYOSHI 編集日時 2004-09-07 16:30 ] | ||||
|
投稿日時: 2004-09-07 20:37
うっかり大事なことを忘れていました。
実ユーザIDでチェックしていたとしても、抜け道が存在します。 ただし、ちょっとしたプログラミングが必要です。 # 本当に「ちょっと」 ![]() setreuid(2) を用いれば、実ユーザIDを変えることが可能です。 そいうわけで、root に SUID したプロセスの中で setreuid システムコールを発行して実ユーザIDでも root になり、 然る後に目的のプログラムを exec する、というようにすれば O.K. です。
多くのプログラムでは実ユーザIDのチェックなんてことはやってない と思いますが、やっている例が「特殊」というほど稀なわけでも ありません。オープンソースのソフトウェアなんかでも、ときどき あります。 |