2005-08-21
_ 水泳部
自転車通勤してるので足腰はある程度使っているのだけど、やはり全身運動も欲しいよねということでプールの施設を調べてみた。
近所のプールというと高校生のころによく利用していたヨネッティ王禅寺しか知らなかったのだけど、さすがに自宅からヨネッティ王禅寺は遠い。尻手黒川沿いなので電車では行けず、車は使えるけど面倒くさい。なので以前自転車で行ったことがある( 2004-08-05 )。片道 40 分くらい。さすがにしんどい。
あらためて川崎市内のプールがある施設を調べてみるとこんな感じ。
けっこう多いのね。
自宅近所や会社近所を考えるとこの辺りかな。
_ おひる
そうめん、きゅうりの梅あえ。
_ MSN メッセンジャー
なんとなく起動してみたらサインインできた。
ううむ。
ところで Windows Update のイベントログは「 システム 」に書かれるのだね。
というわけで最後の Windows Update のログはこれか。
今日は Windows Update してないのだけど、なんなのだか。
_ Mac OS X で Process.uid=
ruby の Process モジュール の属性。
Mac OS X だと自分の uid とは異なる uid に Process.uid= しようとすると EPERM が起きる。
Linux
% uname -a Linux sakura 2.4.27 #2 SMP 2004年 8月 9日 (月) 18:23:11 JST i686 unknown
非特権ユーザの uid 。
% ruby -e "p Process.uid" 10001
自分の uid に設定。
% ruby -e "Process.uid=10001; p Process.uid" 10001
特権ユーザの uid に設定。
% ruby -e "Process.uid=0; p Process.uid" -e:1:in `uid=': Operation not permitted (Errno::EPERM) from -e:1
特権ユーザの uid 。
bash-2.04# ruby -e "p Process.uid" 0
自分の uid に設定。
bash-2.04# ruby -e "Process.uid=0; p Process.uid" 0
非特権ユーザの uid に設定。
bash-2.04# ruby -e "Process.uid=10001; p Process.uid" 10001
Mac OS X
% uname -a Darwin kahori.local 7.7.2 Darwin Kernel Version 7.7.2: Wed Dec 22 20:01:20 PST 2004; root:xnu/xnu-517.10.7.obj~1/RELEASE_PPC Power Macintosh powerpc
非特権ユーザの uid 。
% ruby -e "p Process.uid" 501
自分の uid に設定。
% ruby -e "Process.uid=501; p Process.uid" 501
特権ユーザの uid に設定。
% ruby -e "Process.uid=0; p Process.uid" -e:1:in `uid=': Operation not permitted (Errno::EPERM) from -e:1
特権ユーザの uid 。
% sudo ruby -e "p Process.uid" 0
自分の uid に設定。
% sudo ruby -e "Process.uid=0; p Process.uid" 0
非特権ユーザの uid に設定。
% sudo ruby -e "Process.uid=501; p Process.uid" -e:1:in `uid=': Operation not permitted (Errno::EPERM) from -e:1
特権ユーザにも制限があるのか。
Mac OS X ユーザは Process.uid= したいときはどうしてるんだ。
_ ライブ
たくみの「 暇なら来い 」という声が聞こえたような気がしたので一純悠人さんのライブ行ってみた。
@ club-asia P
初めて聞いたのだけど声が太いな。
ドラムのひとは大変そうだ。
「 乱れ雪月花 」という歌はたぶんロマサガとは関係ないだろう。
_ Mac OS X の setuid()
setuid() について「 詳解 UNIX プログラミング 」に説明があった。
p206 より引用。
誰が ID を変更できるかに関しては規則がある。まずはユーザ ID だけについて考える。( ユーザ ID に関して述べることはすべてグループ ID にも適用できる )。
1. プロセスがスーパーユーザ特権を有すれば、setuid 関数は、実ユーザ ID 、実効ユーザ ID 、保存セットユーザ ID を uid に変更する。
2. プロセスがスーパーユーザ特権を持たない場合、uid が実ユーザ ID か保存セットユーザ ID に等しければ、setuid は実効ユーザ ID のみを uid に設定する。実ユーザ ID と保存セットユーザ ID は変更されない。
3. 上記のいずれの条件も満たされない場合、errno に EPERM を設定して、エラーを返す。
ここでは POSIX_SAVED_IDS が真であることを仮定している。この機能がない場合には、上述の保存セットユーザ ID に関する部分をすべて削除すること。
POSIX_SAVED_IDS というのは sysconf() で調べられる制限事項の名前のこと。POSIX_SAVED_IDS を調べるときは sysconf() の引数に _SC_SAVED_IDS を与える。
以下引用。
_SC_SAVED_IDS
Returns 1 if saved set-group and saved set-user ID is available, otherwise -1.
というわけで実際に sysconf を実行してみる。
せっかくだから setuid も実行する。
このようなコード。
#include <unistd.h> #include <string.h> #include <errno.h> int main( int ac, char** av ) { if( sysconf( _SC_SAVED_IDS ) < 0 ) printf( "_POSIX_SAVED_IDS not defined\n" ); if( setuid( 501 ) < 0 ) printf( "setuid : %s\n", strerror( errno ) ); return 0; }
コンパイルして
% gcc setuid.c
非特権ユーザで実行。
% ./a.out _POSIX_SAVED_IDS not defined
not defind ということで _SC_SAVED_IDS は実装されてない。
setuid() は成功する。
特権ユーザで実行するとこう。
% sudo ./a.out _POSIX_SAVED_IDS not defined
setuid() も成功している。
ruby の Process:uid=501 は失敗していたのだけど。
はて。
4894713195