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#n3746)drop_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では、デフォルトでman
NFS経由のファイルアクセスを含むネットワークアクセスをブロックする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を無効にします。