Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

プログラムにroot権限を与える にはどうすればいいですか?

378 views
Skip to first unread message

Tsuchiyama Masaru

unread,
Nov 26, 1999, 3:00:00 AM11/26/99
to
Linux でroot権限を必要とする操作(SCSIのデバイスファイルを
開いてデバイスファイルに書き込みまたは読み込みを行う)をする
プログラムを書いています。

このプログラムはrootのもとでしか実行できません。
このプログラムを使う以外はrootは必要ないので、
このプログラムだけroot権限で動くようにしたいのですが、
どうすればよいでしょうか?

--------------------------------------------
M.T
<s00u...@ip.media.kyoto-u.ac.jp>

--------------------------------------------

Hideo Sir MaNMOS Morishita

unread,
Nov 26, 1999, 3:00:00 AM11/26/99
to

"Tsuchiyama Masaru" <s00u...@ip.media.kyoto-u.ac.jp> writes:

> 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

緊急用医療ホログラム

unread,
Nov 26, 1999, 3:00:00 AM11/26/99
to
かなりあほな質問かもしれませんが、、

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


FUJIMOTO Kou

unread,
Nov 26, 1999, 3:00:00 AM11/26/99
to
藤本@東工大です。

メールアドレスが変ですよ。

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


Toshio HORI

unread,
Nov 26, 1999, 3:00:00 AM11/26/99
to
In article <D46F1C504737D211A950...@news-sv3.localnet.sts.co.jp>,
緊急用医療ホログラム <fu...@aaa.letter.co..jp> writes:
fumi>  ということは、 root でない一般ユーザが、何も制限をかけずに setuid()
fumi> するような su もどき や passwd もどきの ソースを持ってきてコンパイルす
fumi> るか、コンパイルしたバイナリを持ってきたら、それを使ってrootとして何で
fumi> も出来てしまうのでしょうか。

setuid()するときに、そのprocessのreal/effective UIDがsuper userでなけ
れば、uidをrootにsetできません。

---ほり。

Hideo Sir MaNMOS Morishita

unread,
Nov 26, 1999, 3:00:00 AM11/26/99
to

=?ISO-2022-JP?B?GyRCNls1Xk1RMGVORSVbJW0lMCVpJWAbKEI=?= <fu...@aaa.letter.co..jp> writes:

> かなりあほな質問かもしれませんが、、
>
> 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として何で
> も出来てしまうのでしょうか。

引用しているんだったらその記事を、ちゃんと読んでみて下さい。貴方が仰っ
ていることが間違いであることに気がつくはずです。

緊急用医療ホログラム

unread,
Nov 26, 1999, 3:00:00 AM11/26/99
to
 みなさんお騒がせしてすみませんでした。

 元記事を読み返したら、できあがったバイナリに対して、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


Takanori Watanabe

unread,
Nov 26, 1999, 3:00:00 AM11/26/99
to
UNIX全般的な話なので。fj.unixを追加し、Followup-To:は(もしあれば)
fj.unixにします。

<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


MARUBAYASHI Takamichi

unread,
Nov 27, 1999, 3:00:00 AM11/27/99
to
緊急用医療ホログラム wrote:

> > su…変更するユーザのパスワードを求める
> > passwd…そのユーザのパスワードの変更だけを行なうようにプログラムで制御
>
>  ということは、 root でない一般ユーザが、何も制限をかけずに setuid()
> するような su もどき や passwd もどきの ソースを持ってきてコンパイルす
> るか、コンパイルしたバイナリを持ってきたら、それを使ってrootとして何で
> も出来てしまうのでしょうか。

とりあえず普通はユーザーがsetuid()を使ってroot権限を得るような行為はkernel

禁止する(はず)のでできません。バイナリのコピーやtarの展開時にも自分の
uid/gidに変更されるのでpasswdの改竄もできません。
リムーバブルメディア(FDやCDなど)で持ってきた場合にはuid/gidが保存されてる
こともあるので、リムーバブルドライブ上でのバイナリの実行ができないよう
に/etc/fstabやmountの設定に気を使っておくことが大切です。(noexecまたは
nosuidを
追加するとか)


0 new messages