web-dev-qa-db-ja.com

CIFSマウントとKerberos-アクセス許可またはベストプラクティス

現在、Ubuntuクライアントは、システムの起動時に/ etc/fstabを介してcifs共有に接続します。これには次の欠点があります。

  • パスワードはマウントオプションとしてプレーンテキストで書き込まれます
  • パスワードは有効期限が切れているはずですが、有効期限が切れている場合は、すべてのクライアントで/ etc/fstabを変更する必要があります。そのため、マウントに使用されるほとんどのパスワードは、現時点では有効期限が切れていません
  • CIFS共有は接続ユーザーとその許可の下にマウントされるため、Ubuntuで共有を実際に使用しているユーザーは表示されません。副作用は、UbuntuユーザーがWindowsファイルシステムの権限にリストされていないため、権限がぼやけていることです。

Ubuntuクライアントで既にテストに成功したこと:ユーザーログインでのKerberos認証の使用-ユーザーが利用できるKerberosチケットがあります。

そのkerberosチケットを使用して、systemd userservice内でcifs共有を(Sudo)マウントします

  • PRO:グラフィカルログインおよびsshで動作します
  • PRO:ローカルファイルシステムのように共有にアクセスできます
  • CON:/ servers/mymountのようなグローバルマウントポイントにマウントする場合、複数のユーザーによるマウントをオーバーレイしないように注意する必要があります。そして、接続しているユーザーは、後続のユーザーがアクセス許可を使用するユーザーになります。

そのケルベロスチケットを使用して、ファイルブラウザnautilusおよびthunarから共有を動的にマウントします

  • PRO:ファイルブラウザを介して共有への接続が確立される場合、追加のスクリプトまたはサービスは必要ありません
  • PRO:共有はユーザーコンテキストにマウントされるため、間違いなくユーザーの許可が必要です。ユーザーに権限がない場合でも、共有を別のユーザーに接続する可能性があります。
  • PRO:gvfs-mountを使用して/ etc/profileでマウントを自動化できます
  • PRO:Sudo権限は必要ありません。ユーザーはgvfs-mountおよび-unmountを必要に応じて実行できます。ファイルブラウザを介して非常に直感的です
  • CON:実際のマウントポイントはありません。ls、cpなどの標準的なUNIXコマンドは機能しません。私はgvfs- *の代替手段を使用する必要があります。この時点で、mount.cifsを使用した上記のソリューションの方が優れているようです。

したがって、nfs共有にアクセスするようにcifs共有にアクセスしたいです。

  • マウント中にパスワードは使用されません
  • アクセスするユーザーのアクセス許可を使用する必要があります
  • ファイルシステムはローカルファイルシステムのように動作する必要があります(標準のUNIXコマンドが機能するはずです)

CIFS共有をユーザーごとに別々にホームディレクトリに複数回マウントできましたが、

接続中のユーザーを指定せず、アクセスユーザーからのアクセス許可を使用せずに、ユーザールートによるブート中にCIFS共有をマウントする方法はありますか(たとえば、Kerberosチケット経由)?

事前にありがとう、バスティアン

5
user2149308

Automount + mount.cifsのマルチユーザーオプションを使用する

これは、automountとmount.cifsのマルチユーザーオプションを使用して実現できます。必要なパッケージをインストールします。

Sudo apt install autofs keyutils cifs-utils

次の例では、cifsサーバーが、アクセスしているユーザーにちなんだ名前の共有をエクスポートすることを想定しています。通常、これはホームディレクトリに適しています。

これを/etc/auto.masterに追加します:

/cifs /etc/auto.cifs

/etc/auto.cifsにこれを入れてください:

*   -fstype=cifs,multiuser,cruid=${UID},sec=krb5    ://server.domain/&

必ずserver.domainをファイルサーバーに置き換えてください。この方法で固定共有を使用することもできます。 *を固定名と&に置き換えるだけです。

上記の構成の重要な詳細は、cruid=${UID}です。カーネルは、共有にアクセスするユーザーのコンテキストでkerberosチケットを検索します。それ以外の場合は、ルートチケットキャッシュを試行します。

最後に自動マウントをリロードします:

Sudo service autofs reload

Kerberosチケットがある場合、最初のアクセスでファイルシステム/cifs/$USERをマウントします。つまり、明示的にeを入力する必要があります。 g。 cd /cifs/myuserまたはGUIファイルブラウザの同様のアクション。これを回避するには、他の場所からこれを指すシンボリックリンクを配置し、それらにアクセスするようユーザーに指示することができます。

もちろん、固定共有を使用している場合(*および&を使用していない)、cd /cifs/sharenameと入力する必要があります。

同じ共有への他のユーザーによる後続のアクセスは、multiuserオプションによって可能になるtheir許可を使用します。追加のマウントは行われませんが、既存のマウントは再利用されます。

mount.cifs(8) から:

   multiuser
       Map user accesses to individual credentials when accessing
       the server. By default, CIFS mounts only use a single set of
       user credentials (the mount credentials) when accessing a
       share. With this option, the client instead creates a new
       session with the server using the user's credentials whenever
       a new user accesses the mount. Further accesses by that user
       will also use those credentials. Because the kernel cannot
       Prompt for passwords, multiuser mounts are limited to mounts
       using sec= options that don't require passwords.

必要な自動マウントマップを集中管理用のLDAPサーバーに追加することも可能ですが、これはおそらくこの回答の範囲外です。

質問では、マウントをブート時にルートとしてマウントするように要求しました。技術的には、これはautofsのプレースホルダーマウントの形で行われます。実際には、実際のマウントはユーザーによる最初のアクセスでのみ行われます。

かなり大きな光沢のあるファイルシステムにアクセスするために、私の職場の〜100クライアントにこのセットアップを使用しており、確実に動作します。

2
Sebastian Stark