2011.12.20
前へ
次へ
目次へ戻る
ホームページトップへ戻る

パソコンをつくろう!(パソコン自作のすすめ)
組み立てキットを使って自作に挑戦!

[第274回]


●chmod u+s(その2)

前回は、rootでなければ実行できないはずのパラレルポート出力プログラムを、ユーザーのままで実行できるようにするための方法について説明をしました。
その方法は、
1)まずrootとしてコンパイルして
2)できた実行ファイルに対してchmod u+s を実行する
というものでした。

この方法は、いつもごひいきいただいておりますJ大学のI先生からご紹介いただいたサイトに書いてありました。
こちらのサイト(http://www.epanorama.net/circuits/parallel_output.html)です。
ePanorama.netという非常に大きなサイトのCircuitという項目の中のParallel_outputというページです(つながりにくいことがあるようです。午後にはつながっていたのですが、夜になったら全然つながらなくなってしまいました)。

ここだけでもかなりのボリュームです。


I先生から教えていただいたのは、その中のParallel port controlling in Linuxのページです。



このページでもパラレルポートに出力するプログラムとしてiopermを使ったプログラム例が紹介されています。
しかし、私がこのページで「おおっ」と思ったのは、そのプログラム例の下に書かれている文章です。
綴りの間違いやら、文法的に、むむ?というようなところがありますが、細部にこだわらずに読むと、なんとなく意味は通じます。

パラレルポートにアクセスする、この種のプログラムはrootになって実行しなければならない。
(しかし)もしrootになることなくユーザーのままそういうプログラムを実行したいならば。
まず最初にプログラムの所有者をrootにする(たとえばrootになってそのプログラムをコンパイルする)。
それからそのプログラムに対してchmod +sを実行すれば、ユーザーがそのプログラムをroot権限で実行することができる。

というようなことが書いてあります。
もっともこのchmod +sというのが、chmod u+sのことらしい、ということがわかるまでに、かなりネットをさまよい歩かなければなりませんでした。
これもどうやら脱字だったようです(あるいはこういう表記もあるのかも)。

そういうこともあって、念の為にchmod u+sについて調べてみたのでありますが。
日本語のサイトでは、もうひとつはっきりしませんでした。
そのようなときは英語のサイトを検索してみますと、なるほど、という説明をみつけられることがよくあります。

英語のサイトをサーチしてみつけた、こちらのサイト(http://www.linux-tutorial.info/modules.php?name=MContent&pageid=225)の説明は、さきほどのサイトの説明より、わかりやすいと思います。



同サイトのずっと下の方にいくと、chmod u+sについての説明がみつかります。
その部分を以下に引用します。

There are a few other things that you can do with permissions. For example, you can set a program to change the UID of the process when the program is executed. For example, some programs need to run as root to access other files. Rather than giving the user the root password, you can set the program so that when it is executed, the process is run as root. This is a Set-UID, or SUID program. If you want to run a program with a particular group ID, you would use the SGID program with the s option to chmod, like this

chmod u+s program
or
chmod g+s program

ここでUIDとはUser IDのことだという説明がリンク先にあります。
しかし。
そのリンク先に行きましても、
ユーザーを識別するためのナンバーである。
としか書かれていません。

まあ、これまで見てきました説明で、とにかくそういうことなのだ、ということはわかりましたので、それでいいじゃないの、というようなものなのですが。
まだなんとなく u+s、SUIDの概念がわかったようでよくわかりません。
さらにあちこち探ってみましたら。

どうやらこの”s”というのは、”Set−User ID”フラグのことらしい、ということが読めてきました。
WIKIPEDIA(http://en.wikipedia.org/wiki/Setuid)からの引用です(下線は筆者)。

setuid and setgid (short for "set user ID upon execution" and "set group ID upon execution", respectively)[1] are Unix access rights flags that allow users to run an executable with the permissions of the executable's owner or group. They are often used to allow users on a computer system to run programs with temporarily elevated privileges in order to perform a specific task. While the assumed user id or group id privileges provided are not always elevated, at a minimum they are specific.

私は”ユーザーID”の”ユーザー”を「今エントリーしているユーザー」のことだと思っていましたので、それでどうにも今一つ理解が進まなかったのです。
ここでいうユーザーはowner(所有者)のことのようです。
”set user ID”と並んで”set group ID”という表現が使われていることからも、そのことがうかがわれます。

同ページの下の方にサンプルがあります(同ページから一部分のみコピーして示します。着色は筆者)。

[bobie]$ sudo chmod ug+s printid # SetUID and SetGID flags
[bobie]$ sudo chmod o-rx printid # Don't let Others read or execute it
[bobie]$ ls -l
-rwsr-s--- 1 root staff 6944 2011-10-06 10:22 printid

所有者の実行権ビットと所有者グループの実行権ビットにsフラグが立っています(chmod us+gを実行したため)。
このsフラグが”set User ID”フラグまたは”set Group ID”フラグだったのです。

う?sフラグ?
はて?
そんなものが表示されていたっけ?
前回(第273回)をよくよく確認してみましたら。
ありました。

おお。
しっかりと。
−rwr−xr−x
と表示されておりました。

やっと。納得。
これにて、一件落着です。

パソコンをつくろう![第274回]
2011.12.20upload
2011.12.21後半部分書き換え&追記しました

前へ
次へ
目次へ戻る
ホームページトップへ戻る