- PR -

一般ユーザにルート権限でシェルを実行する方法について

投稿者投稿内容
TSUYOSHI
常連さん
会議室デビュー日: 2004/09/02
投稿数: 32
投稿日時: 2004-09-07 11:17
引用:

kazさんの書き込み (2004-09-07 00:00) より:

自分もときどき手抜きに sudo 使いますが,
安易に該当の user で login させないようにする仕掛けも必要かも,
です -> TSUYOSHI様




ありがとうございます。
sudoと言うものをはじめて知りました。
ちょっと試しにやってみたいと思います。
なんか話しの内容を見ていると、
おっかないことをやっているように見えますが(素人の目では(笑))
sudoって手抜きなんですね・・・。
kaz
ぬし
会議室デビュー日: 2003/11/06
投稿数: 5403
投稿日時: 2004-09-07 11:54
こんにちわ.
引用:

TSUYOSHIさんの書き込み (2004-09-07 11:17) より:

なんか話しの内容を見ていると、
おっかないことをやっているように見えますが(素人の目では(笑))
sudoって手抜きなんですね・・・。



sudo 使うこと自体が手抜きなのでなく,
sudo を script で使うことが手抜きだったりするかなと.

sudo はうまく使えばとても便利で,
例えば一般 user に管理権限は与えたくなくても
「これだけは使わせたい」場合に特定の command だけ sudo させたり,
root の password を教えずに root 権限で command 実行させたり出来ます.
※使いようによっては root の password も変えられるので「無条件解放」は危険ですが...
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-09-07 12:56
引用:

TSUYOSHIさんの書き込み (2004-09-07 10:59) より:
pingのようにバイナリファイルにs-bitを立ててルート権限で実行しようかと考えましたが
これも上手くいきませんでした。


「上手くいきませんでした」というのは具体的にはどーゆーことでしょうか。

SUIDビットで変更されるのはプロセスの実効ユーザIDです。
実ユーザIDは変更されません。プログラムによっては、実ユーザIDを
チェックしているものもあります。
そーゆー状況でしょうか?
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2004-09-07 13:16
その、問題の実行ファイルを ls -l した結果は?
オーナー、グループ、アザーの状態は?
TSUYOSHI
常連さん
会議室デビュー日: 2004/09/02
投稿数: 32
投稿日時: 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」に変更して実行しましたが
結果は変わりませんでした。

ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-09-07 15:55
引用:

TSUYOSHIさんの書き込み (2004-09-07 13:39) より:
2.s-bitを負荷した場合
-rwsr-xr-x 1 root sys 135240 3月 8 2004 utlsend

この状態でutlsendを実行すると
一般ユーザの場合:無反応(そのまま次のプロンプト行に移る)
ROOTユーザの場合:実行可能


utlsend がどう動くものか知りませんが、この動作をみる限り
「プログラムによっては、実ユーザIDをチェックしている
ものもあります」とゆーことだと思います。
だとすれば、
「コンパイル前のソースに手を加える必要があるのでしょうか?」
という問いに対する答えは Yes です。

とはいえ...
ひょっとしたら一般ユーザでも実行可能にする設定とかあるかも
しれないので、そういうのを調べてみたらいかがでしょーか。
TSUYOSHI
常連さん
会議室デビュー日: 2004/09/02
投稿数: 32
投稿日時: 2004-09-07 16:29
"s-bit"を設定する方法でも"sudo"でもroot権限で動かす事ができませんでした
ぽんすさんの言われる通りプログラムが何らかの制限をかけている可能性も考えられます
この辺に関してはサポートに質問を投げる事にします。

最後に確認しておきたいのですが、今回の"s-bit"を付加する方法で
今回のような特殊なケースを除くならばroot権限で実行できるという認識でよろしいのでしょうか?

[ メッセージ編集済み 編集者: TSUYOSHI 編集日時 2004-09-07 16:30 ]
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2004-09-07 20:37
うっかり大事なことを忘れていました。
実ユーザIDでチェックしていたとしても、抜け道が存在します。
ただし、ちょっとしたプログラミングが必要です。
# 本当に「ちょっと」

setreuid(2) を用いれば、実ユーザIDを変えることが可能です。
そいうわけで、root に SUID したプロセスの中で setreuid
システムコールを発行して実ユーザIDでも root になり、
然る後に目的のプログラムを exec する、というようにすれば
O.K. です。

引用:

TSUYOSHIさんの書き込み (2004-09-07 16:29) より:
最後に確認しておきたいのですが、今回の"s-bit"を付加する方法で
今回のような特殊なケースを除くならばroot権限で実行できるという認識でよろしいのでしょうか?


多くのプログラムでは実ユーザIDのチェックなんてことはやってない
と思いますが、やっている例が「特殊」というほど稀なわけでも
ありません。オープンソースのソフトウェアなんかでも、ときどき
あります。

スキルアップ/キャリアアップ(JOB@IT)