私はNFSにとても慣れていません。はっきりさせておきたいと思います。
NFSサーバーがディレクトリrwを共有し、ディレクトリ内のすべてのファイルがパーミッション700であり、それらのファイルのユーザー/グループがroot/root 、、、である場合
クライアントでは、rootとしてログインして表示する必要があります。これは正しいです?
クライアントのroot以外のユーザーが、これをオーバーライドするためにdirect接続を行う可能性があることを認識しています。 (マウントを使用しない場合と同様に、NFSクライアントハックを使用するだけです。)
クライアントマシンにアクセスできる人は誰でもファイルにアクセスできるはずであり、クライアントマシンはアクセス許可を無視する必要があるようです。サーバーのみが権限を処理する必要があります。
私の理解は正しいですか?このタイプのレイアウトを使用するのは正常ですか?クライアント側の権限を無視する方法はありますか?
全体として、NFSの理解は正しいと思います。あなたが言及したポイントについてのいくつかの詳細はここにあります:
NFSv3サーバーは、ファイルの所有権とアクセス許可のみを提供します。特定のユーザーにこれらのアクセス許可を適用するのはクライアントの責任です(つまり、特定のUIDを持つプロセスが要求してfs操作を行う場合)。
暗号化、Kerberos承認、およびLDAPを備えたNFSv4 (およびKrbサーバーとLDAPサーバーが異なるホストで実行されている)をセットアップした場合でも、クライアントのルートには、少なくとも同じくらいのfs特権の可能性があります。許可されたすべてのユーザーとグループ。ただし、root以外のユーザーのアクティビティや、プライベートネットワーク上の他のホストからも保護を受けることができます。
通常、クライアントはユーザー権限の適用に非常に成功します。 NFSマウントでファイルのアクセス許可を無視する簡単な方法を私は知りません。それが必要な場合は、すべてのフォルダーに対してu=rwx,g=rwx,o=rwx
に、すべてのファイルに対してu=rw,g=rw,o=rw
にアクセス許可を設定するだけです。
オフトピック:
ただし、setuidビットを反転しないように注意してください。これにより、実際には、クライアントの通常のユーザー(www-dataなど)にルートシェルが提供される可能性があります。 Setuidは、NFSおよび非NFSマウントの「-onosuid」オプションを使用して完全に無効にできます。
Solarisサーバーのrootsquashを無効/有効にする方法があります(Solarisの用語ではrootsquash以外と呼ばれています-私はそれが何であったかを忘れました)。
Solarisサーバーに共有全体を読み取り専用としてマークさせることができます。例:
zfs set sharenfs="[email protected]/16" tank/home/tabriz
そうすれば、クライアントが何をしても、fsは書き込み可能になりません。
プログラムがNFSプロトコルを通信できる場合でも、クライアントのroot以外のユーザーがNFSサーバーへの直接接続を開くことはおそらく不可能です。これは、 NFSクライアントは通常、特権ポートからの接続を強制されます であり、正常なクライアントではrootのみが接続できるためです。
NFSセキュリティはクライアントに適用されます。
NFSは、NFS共有に接続する人が信頼できるネットワーク内にいた時代に作成されました。 NFSサービスにパケットを送信できる可能性のある信頼できないエンティティがある場合は、本当にすべきしない NFSを使用します。
これを回避すると、NFSは通常デフォルトでrootsquashになります。つまり、クライアントのroot(uid 0)は、サーバーのnobody(uid 65535)として解釈されます。
ディスク上のファイルは、実際にはserに関連付けられていません(これは一般的なルールであり、NFSに固有のものではありません)。それらはidに関連付けられています。ユーザーaliceのNFSサーバーにuid100があり、ユーザーbobのNFSクライアントにuid 100がある場合、bobはaliceのファイルにアクセスできます。実際、クライアントでは、すべてのファイルがbobによって所有されているかのように表示されます。つまり、NFSサーバーは生のメタデータをクライアントに提示するだけです。それをどのように解釈するかはクライアント次第です。
NFSはセキュリティのために設計されていません。信頼できないパーティが存在するネットワークでは、NFSを使用しないでください。
ディレクトリrwを共有すると、サーバーは、適切な資格情報を持つすべてのユーザーがディレクトリとその内容に読み取りおよび書き込みアクセスできるようにする必要があることを示しています。
ディレクトリとその内容のアクセス許可を700に変更し、所有権をroot/rootに変更することで、すべてのユーザーへのアクセスを事実上拒否できます。これは、デフォルトでSolarisNFSがrootユーザーをクライアントマシンから誰にもマップしないためです。
Solarsのマニュアルページを見つけることができますshare_nfs ここ