Synology NAS の NFS でのユーザー ID マッピング

nfs synology-diskstation

私はSynology NASボックス(DSM 5.1を実行しています)を持っており、NFS経由でディレクトリをエクスポートしました。私のUbuntuボックスにマウントしようとしています

ほとんど問題なく動作していますが、ユーザーとグループのマッピングに問題があります。Ubuntuのボックスでは、uid 1000 (roger)、gid 1000 (roger)となっています。Synologyでは、uid 1026 (roger)、group 100 (users)となっています

NFSv3 を使用すると、数値の uid/gid 値を使用しているため、Synology 上で所有権が混乱しています

私は同じユーザーを使用して、同じUbuntuのボックスからNFSマウントにアクセスするだけであれば、これは大丈夫なのですが、私はまた、WindowsのボックスからCIFS(SMB)を使用してディレクトリにアクセスしているので、パーミッションが間違っていることを意味します

Synologyのデフォルト設定でNFSv4(mount -o nfsvers=4)を使用すると、Synology上のroger.usersが所有するファイルは、Ubuntuボックスから見るとroger.usersが所有しているように表示されます。これはいいですね

しかし、touchファイルを作成したときに

roger@ubuntu$ touch /mounts/diskstation/music/foo

Synology上では1000.1000が所有しており、Ubuntuボックスから見るとnobody.4294967294が所有しているように表示されます

Synology フォーラムで見つけたトピックはすべて、NFSv4 がサポートされていなかった 2011 年以降のものか、同じ質問をして諦めている人のものです

完全性のために、/etc/exportsは持っています

/volume1/music  10.0.0.0/24(rw,async,no_wdelay,root_squash,insecure_locks,sec=sys,anonuid=1025,anongid=100)

…とUbuntuの箱にマウントしています

mount -t nfs diskstation:/volume1/music /mounts/diskstation/music/ -o rw,nfsvers=4

Why NFSv4 uid/gid mapping doesn’t work with AUTH_UNIX (AUTH_SYS)が問題かもしれないというヒントを見つけましたが、これは解決策がありません

この問題を回避する簡単な方法はありますか?これを解決するもっと複雑な(咳Kerberos咳)方法はありますか?

真面目な話、ケルベロスが答えならその一撃は受けるけど、無駄に時間を浪費する前に知っておきたい

更新: Synology documentation には Kerberos の様々なオプションについて書かれていますが、UI には見つかりません。リリースノートには「Kerberosセキュリティフレーバーが実装されていれば…」と書かれています。特定の機種には搭載されていない可能性があることを示唆するページを見つけました(しかし、再び見つけることはできません)。システム情報のページによると、私はDS211を持っています。もしかしたら、私の運がないのかな?

  23  None  2015-01-04


ベストアンサー

NFSv4 IDマッピングが正しく動作するためには、クライアントとサーバの両方がidmapd ID Mapperデーモンを実行していて、/etc/idmapd.confで同じDomainを設定している必要があります

このようにして、NFSクライアントはそのID認証情報をワイヤ上のNFSコマンドでroger@example.comとして送信し、NFSサーバのidmapperはそれをNFSサーバ上のrogerというユーザにマッピングする。UID と GID は問題ではなく、idmapper によって各システムにマッピングされます

しかし、私のSynologyではそれを気にすることはありません。私の共有フォルダには以下のような権限があります

  • Permissions
    • ローカルユーザー
      • 管理者=読み書き
  • NFS パーミッション
    • Squash
      • すべてのユーザーを管理者にマッピングします

これにより、anonuid=1024,anongid=100 (adminユーザおよびusersグループ)がNAS上の/etc/exportsのエクスポートに追加されます

私のNFSクライアント(ID Mapperを実行していない)は、私のユーザ(1000:1000)として私のNFSコマンドを送信し、そのUIDとGIDはNAS上に存在しないため、私のUIDとGIDを1024:100に変換し、私は完全な権限を持つAdminユーザとして扱われています

これは、ビジネス環境のためのNFSの恐ろしく専門的で安全でない使用ですが、私が自宅で自分のファイルにアクセスするためだけに、それは私にとって許容できるNFSの動作の乱用です

別のオプションとして、rogerのUIDとGIDをNFSクライアントとNASで同じにして、IDマッピングなしでNFSv4を使用するか、UIDとGIDのみに依存するNFSv3を使用することもできます

9  suprjami  2015-11-29


全く同じ問題に悩まされています。Synology上でDockerを使ってKerberosサーバーをセットアップし、IDマッピングをセットアップするという大変な苦労をしましたが、それでも動作が気に入らなかったのです。Kerberosはあまりにもオーバーエンジニアリングされていて、リブートやオートマウンティングで作業を続けるのが難しい。さらに、新しく作成されたファイルのデフォルトのumaskは0000で、私のローカルのumaskが何であっても、すべての新しいファイルは777モードで作成されました

私の解決策はsuprjamiさんと似ていましたが、もう少し踏み込んでみました

  • Synology Web UIで新しいユーザーを作成し、roger.remoteのような名前を付けます。ユーザーグループにも同じようにして、ユーザー名と同じ名前を付けます
  • Synologyをrootにして、/etc/passwdを編集し、roger.remoteのUIDを1000に、GIDを1000に変更します
  • etc/groupを編集し、グループroger.remoteも1000に変更します
  • SynologyのWeb UIで、squashを “all users to admin “に設定して保存します
  • 再びrootとして、/etc/exportsを編集し、UID/GIDをanonuid=1000,anongid=1000に変更します
  • /usr/syno/etc.defaults/rc.sysv/S83nfsd.sh restartでNFSを再起動します
  • これもちょっとハックなんですが — chmod 777 /volume1ホームディレクトリがマウントされていて、奇妙な問題がたくさんありました。glibc access() 関数がマウントされた NFS ディレクトリでアクセス拒否を返すため、KDE は起動しませんでした (ただし、どのサブディレクトリでも動作します)。(ただし、どのサブディレクトリでも動作します) Firefox にも同様の問題があり、アクセスチェックのためにマウントされたディレクトリにファイルを保存することを拒否しました。パーミッションが正しく、マウントされたディレクトリ内のファイルをタッチ/作成/書き込みすることができたにもかかわらず。親ディレクトリの /volume1 を world 書き込み可能なディレクトリに変更すると、この間抜けな問題が修正され、クライアントアプリがそこに書き込むように誤魔化すことができました
  • 共有からファイルシステムのACLをすべて削除します。多くのランダムな実験を通して、これらのACLが作成されたファイルのモードマスクの問題を引き起こすことがわかりました。私はACLマスターではないので、もっとエレガントな解決策があるかもしれません。Synologyのrootとして、synoacltool -del /volume1/myshareを実行します。ls -l 出力から + シンボルが削除されているのがわかるはずです
  • シェアの所有権を新しいユーザーに変更します。chown roger.remote:roger.remote /volume1/myshare
  • モードを755:chmod 755 /volume1/myshareに変更します
  • クライアントにボリュームをマウントし、パーミッションをテストしてください。同様にファイルをタッチして、bash の umask が正しく適用されていることを確認してください
$ umask
0002
$ cd /mnt/myshare
$ touch test
$ ls -l test
-rw-rw-r-- 1 roger roger 0 Oct 21 18:15 test

Synologyでは、以下のように表示されます

# ls -l /volume1/myshare/test
-rw-rw-r-- 1 roger.remote roger.remote 0 Oct 21 18:15 test

Enjoy!

2  Cal  2019-10-21


タイトルとURLをコピーしました