ファイルは読み取ることができますが、ユーザーはNFSからマンページを読み取ることはできません。

ファイルは読み取ることができますが、ユーザーはNFSからマンページを読み取ることはできません。

NFSのインストール時にマニュアルページを読むのに問題があります。私はそれを以下の最小限の例に分けました。マニュアルページファイルは、/data次のパスのNFSマウントにあります。/data/program.1

ファイルをコンソールに印刷できるので、cat /data/program.1読み取り権限は確実です(関連ディレクトリの場合は755、ファイルの場合は644、ACLや固定ビットなどの権限はありません)。

しかし、man -l /data/program.1通常は動作しません。

ただし、奇妙なことに、ファイルまたはそのメタデータ(成功など)を読み取った直後に短時間(〜30秒)で突然ls /data/program.1動作man -l /data/program.1しますが、これはいくつかのキャッシュに関連しているようです。それでも結論が出ていないようです(ls以降はほとんど機能しますが、繰り返して前後に再び動作すると、いくつかの試みは機能しません)。

ただし、奇妙なことは、問題全体が一部のクライアントコンピュータにのみ存在し、同じNFSサーバー(同じインストールオプションを使用)の他のクライアントコンピュータに問題がないことです。

「動作していないとき」出力されます。man: /data/program.1: Permission denied

使用すると、strace man -l /data/program.1次の関連行が表示されます。

stat("/data/program.1", 0x7ffe5ac9c9e0) = -1 EACCES (Permission denied)

実行すると、man program(適切なMANPATHを使用して)次のようになります。

access("/data/program.1", R_OK) = -1 EACCES (Permission denied)

だから私は呼び出しを完了できないと思いましたが、access私のCプログラムをコンパイルして呼び出すとうまくいきます(0が印刷されます)。

#include <unistd.h>
#include <stdio.h>
int main(){
  printf("%d", access("/data/program.1", R_OK));
}

ここで何が間違っている可能性がありますか?

manのソースコードを見ましたが、おそらくこの行に関連しているようです(https://git.savannah.gnu.org/cgit/man-db.git/tree/src/man.c#n3746drop_effective_privs()?それ以外の場合は、すべて(cat、head、My Cプログラムなど)がファイルにアクセスできますが、man最近他のプログラムがメタデータを読み取らない限り、なぜアクセスできないのか説明できません。

Ubuntu 18.04はクライアントとサーバーの両方にインストールされます。マウントは次のとおりです。

x.x.x.x:/srv/nfs/data on /data type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=x.x.x.x,fsc,local_lock=none,addr=x.x.x.x)

ベストアンサー1

Ubuntu 18.04では、デフォルトでmanNFS経由のファイルアクセスを含むネットワークアクセスをブロックするAppArmorが有効になっています。

ネットワーク/NFS アクセスを許可するには、man以下を追加します/etc/apparmor.d/local/usr.bin.man

  # TCP/UDP network access for NFS
  network inet stream,
  network inet6 stream,
  network inet dgram,
  network inet6 dgram,

それからsystemctl reload apparmor

または、たとえばapparmor=0カーネルパラメータを設定してAppArmorを無効にします。

おすすめ記事