NFSサーバ(Linux)と5k iMacのUID、GIDを揃える(半分成功、半分失敗)

前に5k iMacにNFS経由でディレクトリをマウントさせた時に5k iMacのユーザでファイルの書き換え等が行えるようにユーザID(UID)を揃えました
その結果、マウントしたディレクトリに5k iMacから各種操作(ファイル作成・削除など)が行えるようになったはなったのですが・・・。

例えばマウントしたディレクトリに5k iMacでフォルダを作成したとします(testdirというディレクトリを作成)。そして(sshでリモートログインして)NFSサーバ側から作成されたtestdirの情報を見てみるとですねぇ・・・。

# cd /mount_dir
# ls -l
drwxr-xr-x  2 server games  4096  4月 11 07:27 2016 testdir

となるんです。
ここで、serverはサーバ上のユーザ名を指し、UIDは5k iMacのそれと揃えてあるので、ファイル・ディレクトリの「所有者」は同一となり(NFSはUIDで識別する)、このディレクトリをマウントした当該5k iMacユーザでもサーバ上に作成されたserverアカウントのどちらでもこのディレクトリ(あるいはファイル・サブディレクトリ)に対して所有者権限で各種操作を行えるわけです。

しかし、次の要素に表示されている「games」って、なんだ!?
確かにNFSサーバ上の一般ユーザのUID、GIDは現時点で揃っていませんが、数字が違うだけで表示される名称は同じはず(どちらもserverになるはず)。
実際、コマンドを叩いて確認してみれば、

$ id
uid=501(server) gid=500(server) 所属グループ=500(server)

となることからも、UID501で作成されているtestdirディレクトリはそのグループIDも同一になるのではないかと思うわけで・・・。
だってユーザの所属グループは500のserver一つだけなのですから。
※uidにはユーザーグループが表示され、gidにはプライマリグループが表示され、所属グループにはユーザーが所属しているグループすべてが表示されます。

・・・じゃ、所属グループ(プライマリグループ)gamesって・・・??

でこれまた確認すると。

# less /etc/passwd
 ・
 ・
games:x:12:100:games:/usr/games:/sbin/nologin
 ・
 ・

これかっ!
でもこいつ、プライマリグループは100だな。5k iMac側のユーザのプライマリグループは確か20だったはず・・・と思い確認してみると。

$ id
uid=501(boota) gid=20(staff) groups=20(staff),701(com.apple.sharepoint.group.1),
12(everyone),61(localaccounts),79(_appserverusr),80(admin),81(_appserveradm),
98(_lpadmin),33(_appstore),100(_lpoperator),204(_developer),395(com.apple.access_ftp),
398(com.apple.access_screensharing),399(com.apple.access_ssh)

あぁ、ここにグループ100が含まれてますね〜。Linux側と被っているのがこれだから、NFSマウントディレクトリで作成したファイル・ディレクトリのグループが100すなわちgamesになったわけか〜(多分)。

わけがわからなくならないように、UID、GID、グループをかっちり揃えてしまいましょう。
現時点から考えて、それぞれの側に残っている作業は以下のとおり。

  1. サーバ側(Linux側)の一般ユーザ(server)
    UID=501 → OK
    GID=501
    Group=server → OK
  2. Mac側の一般ユーザ(boota)
    UID=501 → OK
    GID=501
    Group=boota(501のグループを作成)

といったところですね。

ではまずサーバ側のGIDを501で揃えてしまいましょう。LinuxでGIDを変更するには、groupmodコマンドを利用します。グループIDを変更する場合は、オプションで-gを指定します。

# groupmod -g 501 server
# less /etc/passwd
 ・
 ・
server:x:501:501::/home/server:/bin/bash

となり、サーバ側の一般ユーザのuidとgidをそれぞれ501に揃えることができました。

残るは mac側のグループidですね。Linuxのgroupmodコマンドは結局のところ/etc/passwdを書き換えているわけですから、直接こちらを編集しても同じ効果が得られるのに対し、macの場合は/etc/passwdを編集してもダメなんだそうで。
リンク先の情報によれば、ことごとくdsclコマンドを使って行わなければならない模様。そちらによると、次の手順で行けるようです。

  1. 現在のグループを確認する
    $ sudo dscl . -list /Groups
    グループの一覧が表示されるので、作成しようとしているグループ名が存在しないことを確認します。
  2. グループを作成する
    $ sudo dscl . -create /Groups/boota
    ここではbootaというグループを作ります(uidがbootaなので揃えてしまいます)。
  3. 空いているgidを探す
    $ sudo dscl . -list /Groups PrimaryGroupID | sort -k 2 -n
    Password:

    nobody    -2
    nogroup  -1
    wheel         0
    daemon    1
    kmem        2
    sys               3
    tty                4
    operator  5
    mail            6
    bin               7
    procview 8
     ・
     ・
     ・
    この中に501という番号が無いことを確認します。
  4. グループ「boota」にgidとして501を設定する
    $ sudo dscl . -append /Groups/boota PrimaryGroupID 501
    うまく設定されたかどうか確認しましょう。
    $ dscl . -read /Groups/boota
    AppleMetaNodeLocation: /Local/Default
    GeneratedUID: C273EAF6-55B8-4424-8157-F7BD8E5551F5
    PrimaryGroupID: 501
    RecordName: boota
    RecordType: dsRecTypeStandard:Groups
    プライマリグループIDが501になっているので、どうやらOKのようです。
  5. bootaをグループ「boota」に登録する
    $ sudo dscl . -append /Groups/boota GroupMembership boota
    これでユーザbootaをグループbootaに登録できているはずなので確認します。
    $ id -p
    uid boota
    groups staff com.apple.sharepoint.group.1 everyone localaccounts _appserverusr admin _appserveradm _lpadmin boota _appstore _lpoperator _developer com.apple.access_ftp com.apple.access_screensharing com.apple.access_ssh
    とりあえず所属グループの中に「boota」の文字が見えますね。

調べた限りでは、これでユーザbootaをグループboota、つまりuid=501をgid=501に登録できたことになります。
あとはNFSでマウントしたディレクトリに新規ディレクトリか何かを作成し、サーバ側でls -lしてuidとgidを確認してみることにします。

しかし結論から言うと、ダメでした。なるほど確かにユーザbootaはグループbootaに属しているのですが、この状態で作成したディレクトリやファイルは、uid=20のまま、つまりid -pで確認した時の一番初めに来ているグループ(ここではstaff)になってしまっているのです。

どうにもならないので、今度はGUI環境を利用して設定の変更を試みます。
システム環境設定から「ユーザとグループ」をクリック。

gid01

するとユーザとグループの管理画面が開きます。

gid02

初めに左下の「南京錠」をクリックしてロックを外し(パスワード必要)、(今回であれば)gidを変更したいユーザを右クリックして詳細を表示します。

gid03

詳細オプション画面が開くとその中に各種設定が入っているわけですが、そこに「グループ」があります。現状、staffになっていることが確認できますが、これを先ほど作成したグループboota(gid=501)に書き換えてOKをクリック、南京錠を戻して指示通り再起動すれば、当該ユーザのgidは501になるはず・・・だったのですが、変更を加えようとしているユーザが管理者権限をもつユーザだからなのか、変更することができませんでした。

というわけで、サーバとmacのuidとgidを揃える、というのは断念。

uidは揃っているので、ファイルやディレクトリの作成・編集・削除などは問題なく行えるのであまり急ぐ必要もなさそうです。
とりあえずあとできそうな可能性としては、

  1. 5k iMacに新規でユーザ(一般権限のユーザ)を作成し、そのuidとgidを(現在のユーザとかぶらないように)502などで揃え、サーバ側もそのように変更する(つまり5k iMacは管理者権限のないユーザでログインするようにする)
  2. サーバ側で、gidが20のグループを作成し、そこにserverアカウントを含ませるようにする

僕だけしか使わないとはいえ、CentOSを使っていた頃はちゃんとrootと一般ユーザを分けて使っていたのですから、5k iMacでもそのようにするのが理想的なのかもですが、apple idとか重複しても大丈夫なものなのかな?
こういうのが結構めんどくさいんですよね〜。別アカウントで使用されてます、みたいに言われるともうそれだけでやる気がなくなっちゃう(笑)

手っ取り早いのは2番目の方法ですかねぇ。ま、いずれにしてもおいおい考えてみることにします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)