私のLinuxサーバーにNFS共有ディレクトリがあります。
ls: cannot access file: Permission denied
ls: cannot access res: Permission denied
total 20
d????????? ? ? ? ? ? file
drwx------ 2 root root 16384 May 19 2015 lost+found
drwxr-x--- 9 lma lum 4096 Feb 18 2020 lum
d????????? ? ? ? ? ? res
権限を変更しようとするとrootユーザーカタログファイルに
chmod 775 file
chmod: cannot access `file': Permission denied
chown root:root file
chown: cannot access `file': Permission denied
エラーが発生しましたPermission denied
。ディレクトリの権限を変更する方法を教えてください。
答え1
エクスポートオプションを使用してNFS共有をエクスポートしない限り、NFSクライアントホストのUID 0()はno_root_squash
NFSサーバー(または一部のオペレーティングシステム)のUID 65534にマップされます。これにより、クライアントホストのrootユーザーがNFS共有に悪意のあるsetuid-root実行可能ファイルを生成し、それを使用して同じ共有を使用する他のNFSクライアントまたはNFSサーバー自体へのrootアクセス権を違法に取得するのを防ぎます。 。root
nobody
nfsnobody
奇妙な疑問符は、ユーザーにnobody
読み取り権限がありますが、x
問題のディレクトリへのアクセス権がないことを示している可能性があります。この組み合わせは、ユーザーが通常のls
ディレクトリの一覧を読み取ることができ、ディレクトリ内のファイルにアクセスできないことを意味します。したがって、stat(2)
これらのファイルのサイズ/所有権/権限情報を取得するためのすべてのシステムコールも失敗します。
andは正常に表示されますが、疑問符を表示するディレクトリのfile
合計のみが、クライアントホストのrootユーザーグループメンバーシップ、サーバーシステムのACLまたはSELinuxの使用、またはこれらの要素の組み合わせによって発生する可能性があります。res
lost+found
lum
これが問題であれば、NFSでは解決する方法はありません。 NFSサーバーシステムにログインし、ローカルでファイルシステムにアクセスする必要があります。
理想的には、NFSサーバー上のユーザーが共有から何も所有しないようにroot
(明示的に読み取り専用またはすべてのクライアントがアクセスできない場合を除き)、NFS共有ディレクトリのグループ割り当てを設計する必要があります。
クライアント/サーバー接続全体で所有権を保持する必要がある場合は、NFSサーバー上のファイル内の共有定義にエクスポートオプションを追加してから共有を再エクスポートするだけですroot
。ただし、これを行うには、マウントオプションを使用してNFSサーバーに共有を含むファイルシステムをマウントする必要があります。no_root_squash
/etc/exports
noexec,nosuid