2006年4月19日水曜日

4294967294番の人って誰ですか~?

FreeBSDとかLinuxとかSolarisとかいろんなOSが混在したネットワーク環境で、NFSを使うこと ・・・ たぶん、そんな特殊な事例ではないと思います。そんな環境で、これまで、見なかったことにしてたことがありました。



FreeBSDなNFSクライアントで、「ls -l」とかしてファイル一覧を見たときに、uid(user id)のところが、「4294967294」と表示されているものがありました。



意味不明な数字だな~と、多くの人は思うかもしれませんが、見る人が見れば、ああなるほど、あれだよね

% printf "%x\n" 4294967294
fffffffe

というわけで、signed 32bit integerで「-2」のことですので、非常に意味ありげな数値です。



どうやら、この「ファイルのuidが4294967294になる」現象は、NFSサーバがSolarisのときにおきるようです。



実は、このファイル、Solarisで見ると、ちゃんとnobodyって表示されるのです。



Solarisでは、nobodyのuidは60001なんですが、なぜかNFSでアクセスすると、nobodyが4294967294(== -2)にすげかえられてしまいます。なんででしょ?



☆ ☆ ☆ ☆ ☆



さて、ところでnobodyさんのuidっていくつなんでしょう?ということで、いくつか調べてみました。



FreeBSD       ・・・ nobody = 65534
Linux debian      ・・・ nobody = 65534
Linux Fedora Core5 ・・・ nobody = 99
Linux Fedora Core5 ・・・ nfsnobody = 4294967294
Solaris10       ・・・ nobody = 60001
Solaris10       ・・・ nobody4 = 65534



Fedoraは、なかなか賢いですねぇ。わざわざnfsnobodyというユーザーが登録されています。



Solarisが、なんかアレですね。nobody4ってのは、SunOS 4.x時代のnobodyのことだそうです。



☆ ☆ ☆ ☆ ☆ 



さて、ls -lしたときに数字がでちゃうのもいやなので、ユーザーを登録してみることにしました。そこの環境では、アカウント情報はLDAPで管理しているので、LDAPでuidNumber=4294967294なユーザーを登録して、ls -lしてみると・・・あれれ?変化ありません。



よくよくみたら、4294967294と入力したはずなのに、なぜか、半分の2147483647になっちゃってました。ふむ、uidNumberは、32bit signed integerなのかな?ってことで、-2と入力したところ、ようやくうまいこといきました。



こんな感じで。

dn: uid=nfsnobody,ou=People,dc=うんたら,dc=かんたら,dc=co,dc=jp
objectClass: top
objectClass: shadowAccount
objectClass: account
objectClass: posixAccount
uid: nfsnobody
cn: nfsnobody
homeDirectory: /nonexistent
loginShell: /usr/sbin/nologin
gecos: Unprivileged user Solaris
uidNumber: -2
gidNumber: -2



0 件のコメント:

コメントを投稿