このプログラムはrootのもとでしか実行できません。
このプログラムを使う以外はrootは必要ないので、
このプログラムだけroot権限で動くようにしたいのですが、
どうすればよいでしょうか?
--------------------------------------------
M.T
<s00u...@ip.media.kyoto-u.ac.jp>
--------------------------------------------
> Linux でroot権限を必要とする操作(SCSIのデバイスファイルを
> 開いてデバイスファイルに書き込みまたは読み込みを行う)をする
> プログラムを書いています。
>
> このプログラムはrootのもとでしか実行できません。
> このプログラムを使う以外はrootは必要ないので、
> このプログラムだけroot権限で動くようにしたいのですが、
> どうすればよいでしょうか?
プログラムをrootでsetuidしてしまう方法があります。(chown root XXXと
chmod u+s XXX)そうすればプログラム中にsetuid()することで完全にroot権限
を得ることが出来ます。
しかし、何の権限もなしにrootの権限を持つので、そのあたりはプログラムで
きっちり制御しなくてはなりません。
setuidプログラムとその制御の例
su…変更するユーザのパスワードを求める
passwd…そのユーザのパスワードの変更だけを行なうようにプログラムで制御
逆にmountなどは普通のユーザには触らせたくないのでsetuidしません。
また、そのデバイスは誰が触っても良いようなものであればデバイスファイル
のパーミッションを変えると言うのも方法ではあります。
#*.lang.cにポストしてるんだからsudoとかの話じゃないよね?
--
___ わしは、山吹色のかすてーらが大好きでのぅ
[[o o]] ふぉっふぉっふぉ
'J' 森下 お代官様 MaNMOS 英夫@ステラクラフト
PGP Finger = CD EA D5 A8 AD B2 FE 7D 02 74 87 52 7C B7 39 37
Hideo "Sir MaNMOS" Morishitaさんの<squogci...@stellar.co.jp>から
> プログラムをrootでsetuidしてしまう方法があります。(chown root XXXと
> chmod u+s XXX)そうすればプログラム中にsetuid()することで完全にroot権限
> を得ることが出来ます。
>
> しかし、何の権限もなしにrootの権限を持つので、そのあたりはプログラムで
> きっちり制御しなくてはなりません。
>
> setuidプログラムとその制御の例
>
> su…変更するユーザのパスワードを求める
> passwd…そのユーザのパスワードの変更だけを行なうようにプログラムで制御
ということは、 root でない一般ユーザが、何も制限をかけずに setuid()
するような su もどき や passwd もどきの ソースを持ってきてコンパイルす
るか、コンパイルしたバイナリを持ってきたら、それを使ってrootとして何で
も出来てしまうのでしょうか。
--
緊急用医療ホログラム mailto:fu...@aaa.letter.co.jp
メールアドレスが変ですよ。
At Fri, 26 Nov 1999 12:02:21 +0900,
緊急用医療ホログラム <fu...@aaa.letter.co..jp> wrote:
> かなりあほな質問かもしれませんが、、
疑問を持つこと自体は別にいいんですけど、
> ということは、 root でない一般ユーザが、何も制限をかけずに setuid()
> するような su もどき や passwd もどきの ソースを持ってきてコンパイルす
> るか、コンパイルしたバイナリを持ってきたら、それを使ってrootとして何で
> も出来てしまうのでしょうか。
森下さんの記事には setuid() でroot権限を得るために必要な
手続きが明記されてますよね?で、その手続きを一般ユーザが
実行できるかどうか、試してみるとわかると思います。
--
FUJIMOTO Kou: Tokyo Institute of Technology
setuid()するときに、そのprocessのreal/effective UIDがsuper userでなけ
れば、uidをrootにsetできません。
---ほり。
> かなりあほな質問かもしれませんが、、
>
> Hideo "Sir MaNMOS" Morishitaさんの<squogci...@stellar.co.jp>から
>
> > プログラムをrootでsetuidしてしまう方法があります。(chown root XXXと
> > chmod u+s XXX)そうすればプログラム中にsetuid()することで完全にroot権限
> > を得ることが出来ます。
> >
> > しかし、何の権限もなしにrootの権限を持つので、そのあたりはプログラムで
> > きっちり制御しなくてはなりません。
> >
> > setuidプログラムとその制御の例
> >
> > su…変更するユーザのパスワードを求める
> > passwd…そのユーザのパスワードの変更だけを行なうようにプログラムで制御
>
> ということは、 root でない一般ユーザが、何も制限をかけずに setuid()
> するような su もどき や passwd もどきの ソースを持ってきてコンパイルす
> るか、コンパイルしたバイナリを持ってきたら、それを使ってrootとして何で
> も出来てしまうのでしょうか。
引用しているんだったらその記事を、ちゃんと読んでみて下さい。貴方が仰っ
ていることが間違いであることに気がつくはずです。
元記事を読み返したら、できあがったバイナリに対して、chownとchmodで属
性をセットする必要があるんですね。早とちりしてました。
KATAYAMA Yoshioさんの<KATE.99No...@yamato.trad.pfu.co.jp>から
> man の chmod(2)、setuid(2) を見て下さい。
xxx(2) があることを今回初めて知りました。man man を参考に、
man 2 xxx としたら見られました。
笑われそうですね。。
--
緊急用医療ホログラム mailto:fu...@aaa.letter.co.jp
<81kjdf$efo$1...@ginger.media.kyoto-u.ac.jp>の記事において
s00u...@ip.media.kyoto-u.ac.jpさんは書きました。
>> Linux でroot権限を必要とする操作(SCSIのデバイスファイルを
>> 開いてデバイスファイルに書き込みまたは読み込みを行う)をする
>> プログラムを書いています。
>>
>> このプログラムはrootのもとでしか実行できません。
>> このプログラムを使う以外はrootは必要ないので、
>> このプログラムだけroot権限で動くようにしたいのですが、
>> どうすればよいでしょうか?
実行ファイルがfooという名前として
# chown root foo
# chmod u+s foo
そして、デバイスファイルは最初に開けて
開けた後すぐにsetuid(getuid());でuidを戻した方が
無難です。要らない権限はさっさと放棄する方が安全なので。
ところで、前も質問してましたけど、CD Ripperか何かですか?
渡辺尊紀
神戸大学大学院自然科学研究科D2情報メディア科学専攻
<a href="http://www.planet.sci.kobe-u.ac.jp/~takawata/key.html">
Public Key</a>
Key fingerprint = 2C 51 E2 78 2C E1 C5 2D 0F F1 20 A3 11 3A 62 2A
> > su…変更するユーザのパスワードを求める
> > passwd…そのユーザのパスワードの変更だけを行なうようにプログラムで制御
>
> ということは、 root でない一般ユーザが、何も制限をかけずに setuid()
> するような su もどき や passwd もどきの ソースを持ってきてコンパイルす
> るか、コンパイルしたバイナリを持ってきたら、それを使ってrootとして何で
> も出来てしまうのでしょうか。
とりあえず普通はユーザーがsetuid()を使ってroot権限を得るような行為はkernel
が
禁止する(はず)のでできません。バイナリのコピーやtarの展開時にも自分の
uid/gidに変更されるのでpasswdの改竄もできません。
リムーバブルメディア(FDやCDなど)で持ってきた場合にはuid/gidが保存されてる
こともあるので、リムーバブルドライブ上でのバイナリの実行ができないよう
に/etc/fstabやmountの設定に気を使っておくことが大切です。(noexecまたは
nosuidを
追加するとか)