6 共有ファイル・システム管理

警告:

Oracle Linux 7は現在延長サポート中です。詳細は、Oracle Linux拡張サポートおよびOracleオープン・ソース・サポート・ポリシーを参照してください。

できるだけ早くアプリケーションとデータをOracle Linux 8またはOracle Linux 9に移行してください。

この章では、NFSおよびSamba共有ファイル・システムの管理タスクについて説明します。

共有ファイル・システムについて

Oracle Linuxは、次の共有ファイル・システム・タイプをサポートしています。

NFS

ネットワーク・ファイル・システム(NFS)は、ファイルがローカル・ストレージにあるかのように、クライアント・コンピュータがネットワークを介してファイルにアクセスできる分散ファイル・システムです。NFSについてを参照してください。

Samba

Sambaは、Microsoft Windowsクライアント用のファイルおよび印刷サービスのプロビジョニングを有効にし、Windowsワークグループ、NT4ドメインまたはActive Directoryドメインと統合できます。Sambaについてを参照してください。

NFSについて

ネットワーク・ファイル・システム(NFS)サーバーは、IPベースのネットワークを介して、ローカル・ファイル・システム内のディレクトリ階層をリモート・クライアント・システムと共有できます。NFSサーバーがディレクトリをエクスポートした後に、NFSクライアントはこのディレクトリをマウントします(これを行う権限が付与されている場合)。このディレクトリは、ローカル・ディレクトリであるかのようにクライアント・システムに表示されます。NFSはストレージ・プロビジョニングを一元化するため、データの整合性および信頼性を向上できます。

Oracle Linux 7では、次のバージョンのNFSプロトコルをサポートしています。

  • NFSバージョン3 (NFSv3)、RFC 1813で指定

  • NFSバージョン4 (NFSv4)、RFC 7530で指定

  • RFC 5661で指定されたNFSバージョン4のマイナー・バージョン1 (NFSv4.1)。

NFSv3は、rpcbindサービスで制御されるリモート・プロシージャ・コール(RPC)サービスに依存します。rpcbindは、RPCサービスに対するリクエストに応答し、リクエストされたサービスの接続を設定します。また、ロック・プロトコルとマウント・プロトコルの処理には、別々のサービスが使用されます。これらのすべてのサービスで使用される様々な範囲のポートに対処するようにファイアウォールを構成すると、複雑になり、間違いやすくなります。

NFSv4では、NFSサーバー自体がサービス・リクエストをTCPポート2049でリスニングするため、rpcbindを使用しません。また、プロトコルのマウントおよびロックはNFSv4プロトコルに統合されているため、別々のサービスも必要ありません。これらの調整により、NFSv4のファイアウォール構成はHTTPなどのサービスほど難しくありません。

NFSサーバーの構成

NFSサーバーを構成するには:

  1. nfs-utilsパッケージをインストールします。

    sudo yum install nfs-utils
  2. /etc/exportsファイルを編集して、クライアントがマウントできるようにサーバーが使用可能にするディレクトリを定義します。たとえば:

    /var/folder 192.0.2.102(rw,async)
    /usr/local/apps *(all_squash,anonuid=501,anongid=501,ro)
    /var/projects/proj1 192.168.1.0/24(ro) mgmtpc(rw)

    各エントリは、エクスポートされるディレクトリへのローカル・パス、その後に、カッコで囲まれたクライアント固有のマウント・オプションを使用してディレクトリをマウントできるクライアントのリストで構成されます。この例の場合は次のようになります。

    • IPアドレスが192.0.2.102のクライアント・システムは、読取り/書込み権限を使用して/var/folderをマウントできます。ディスクへの書込みはすべて非同期で、これは、サーバーが、ディスクに書き込まれる書込みリクエストを待機せずに、クライアントからの後続のリクエストに応答することを意味します。

    • すべてのクライアントは/usr/local/appsを読取り専用でマウントでき、接続しているすべてのユーザー(rootを含む)は、UID 501およびGID 501で非特権ローカル・ユーザーにマップされます。

    • 192.168.1.0サブネット上のすべてのクライアントは/var/projects/proj1を読取り専用でマウントでき、mgmtpcという名前のクライアント・システムは読取り/書込み権限を使用してディレクトリをマウントできます。

    ノート:

    クライアント指定子とカッコで囲まれたオプション・リストの間に空白はありません。

    詳細は、exports(5)マニュアル・ページを参照してください。

  3. nfs-serverサービスを開始し、システムの再起動後にサービスが開始するように構成します。

    sudo systemctl start nfs-server
    sudo systemctl enable nfs-server
  4. サーバーがNFSv4クライアントにサービスを提供する場合は、/etc/idmapd.confを編集し、Domainパラメータの定義を編集してサーバーのDNSドメイン名を指定します。たとえば:

    Domain = mydom.com

    この設定によって、all_squashマウント・オプションが指定されていない場合に、NFSクライアント上で所有者やグループが匿名のユーザーまたはグループ(nobodyまたはnogroup)として予期せずにリストされるのを防ぎます。

  5. ファイアウォールを介したNFSv4クライアントへのアクセスのみを許可する場合は、次のコマンドを使用します。
    sudo firewall-cmd --zone=zone --add-service=nfs
    sudo firewall-cmd --permanent --zone=zone --add-service=nfs

    この構成は、rpc.nfsdがTCPポート2049でクライアント・リクエストをリスニングすることを前提としています。

  6. NFSv4クライアントと同様に、ファイアウォールを介してNFSv3クライアントにアクセスできるようにする場合は、次の手順を実行します。

    1. /etc/sysconfig/nfsを編集し、ネットワーク・マウント要求とステータス監視を処理するポート設定を作成します。

      # Port rpc.mountd should listen on.
      MOUNTD_PORT=892
      
      # Port rpc.statd should listen on.
      STATD_PORT=662

      この例に示すポート値は、ファイル内でコメント・アウトされているデフォルト設定です。

    2. /etc/sysctl.confを編集し、ネットワーク・ロック・マネージャがリスニングするTCPおよびUDPポートの設定を構成します。

      fs.nfs.nlm_tcpport = 32803
      fs.nfs.nlm_udpport = 32769
    3. /etc/sysconfig/nfsまたは/etc/sysctl.confで指定したポートが使用中でないことを確認するには、次のコマンドを入力します。

      sudo lsof -i tcp:32803
      sudo lsof -i udp:32769
      sudo lsof -i :892
      sudo lsof -i :662

      いずれかのポートが使用中の場合は、lsof -iコマンドを使用して未使用のポートを判別し、/etc/sysconfig/nfsまたは/etc/sysctl.confの設定を適宜修正します。

    4. サーバーを停止して再起動します。

      sudo systemctl reboot

      指定したポートのいずれかが使用中の場合、NFSは開始に失敗して/var/log/messagesにエラーがレポートされます。開始できなかったサービスで別のポート番号を使用するように/etc/sysconfig/nfsまたは/etc/sysctl.confを編集し、nfslockおよびnfs-serverサービスの再起動を試みます。rpcinfo -pコマンドを使用すると、RPCサービスがリスニングしているポートを確認できます。

    5. ファイアウォール・サービスを再起動し、NFSv3接続を許可するようにファイアウォールを構成します。
      sudo systemctl restart firewalld
      sudo firewall-cmd --zone=zone \
        --add-port=2049/tcp --add-port=2049/udp \
        --add-port=111/tcp --add-port=111/udp \
        --add-port=32803/tcp --add-port=32769/udp \
        --add-port=892/tcp --add-port=892/udp \
        --add-port=662/tcp --add-port=662/udp
      sudo firewall-cmd --permanent --zone=zone \
        --add-port=2049/tcp --add-port=2049/udp \
        --add-port=111/tcp --add-port=111/udp \
        --add-port=32803/tcp --add-port=32769/udp \
        --add-port=892/tcp --add-port=892/udp \
        --add-port=662/tcp --add-port=662/udp

      この例に示すポート値は、/etc/sysconfig/nfsおよび/etc/sysctl.confのデフォルト・ポート設定がRPCサービスで使用できることを前提としています。また、この構成は、rpc.nfsdおよびrpcbindがそれぞれポート2049および111でリスニングすることを前提としています。

  7. showmount -eコマンドを使用して、エクスポートされたファイル・システムのリストを表示します。たとえば:

    sudo showmount -e
    Export list for host01.mydom.com
    /var/folder 192.0.2.102
    /usr/local/apps *
    /var/projects/proj1 192.168.1.0/24 mgmtpc

    showmount -aは、現行のクライアント、およびマウントされたファイル・システムをリストします。たとえば:

    sudo showmount -a
    mgmtpc.mydom.com:/var/projects/proj1

    ノート:

    NFSv4クライアントからshowmountコマンドを使用できるようにするには、MOUNTD_PORT/etc/sysconfig/nfsで定義し、ファイアウォール・ルールでこのTCPポートへのアクセスを許可する必要があります。

/etc/exportsを編集してNFSサービスを再起動せずに、ディレクトリをエクスポートまたはエクスポート解除する場合は、exportfsコマンドを使用します。次の例では、すべてのクライアントの読取りおよび書込みアクセス権を使用して/var/devを使用可能にし、/etc/exportsの既存のエントリを無視します。

sudo exportfs -i -o ro *:/var/dev

詳細は、exportfs(8)exports(5)およびshowmount(8)の各マニュアル・ページを参照してください。

NFSファイル・システムのマウント

NFSファイル・システムをクライアントにマウントするには:

  1. nfs-utilsパッケージをインストールします。

    sudo yum install nfs-utils
  2. showmount -eを使用して、NFSサーバーがエクスポートするファイル・システムを検索します。たとえば:

    sudo showmount -e host01.mydom.com
    Export list for host01.mydom.com
    /var/folder 192.0.2.102
    /usr/local/apps *
    /var/projects/proj1 192.168.1.0/24 mgmtpc
  3. mountコマンドを使用して、エクスポートされたNFSファイル・システムを使用可能なマウント・ポイントにマウントします。

    sudo mount -t nfs -o ro,nosuid host01.mydoc.com:/usr/local/apps /apps

    この例では、読取り専用権限を使用してhost01.mydoc.comによってエクスポートされた/usr/local/apps/appsにマウントします。nosuidオプションによって、リモート・ユーザーは、setuidプログラムを実行して上位の権限を取得できません。

  4. ブート時にNFSファイル・システムをマウントするようにシステムを構成するには、ファイル・システムのエントリを/etc/fstabに追加します。たとえば:

    host01.mydoc.com:/usr/local/apps      /apps      nfs      ro,nosuid  0 0

詳細は、mount(8)nfs(5)およびshowmount(8)の各マニュアル・ページを参照してください。

Sambaについて

SambaはServer Message Block (SMB)プロトコルのオープン・ソースの実装で、Oracle Linuxはこれを使用して、サーバーおよびクライアントとしてWindowsシステムと相互運用できます。SambaはOracle LinuxのファイルおよびプリンタをWindowsシステムと共有できるため、Oracle LinuxユーザーはWindowsシステム上のファイルにアクセスできます。SambaはTCP/IPプロトコルを介してNetBIOSを使用するため、NetBIOS APIに依存するコンピュータ・アプリケーションがTCP/IPネットワーク上で動作できます。

Sambaサーバーの構成

Sambaサーバーを構成するには:

  1. sambaおよびsamba-winbindパッケージをインストールします。

    sudo yum install samba samba-winbind
  2. /etc/samba/smb.confを編集して、必要なサービスをサポートするように各セクションを構成します。たとえば:

    [global]
    security = ADS
    realm = MYDOM.REALM
    password server = krbsvr.mydom.com
    load printers = yes
    printing = cups
    printcap name = cups
    
    [printers]
    comment = All Printers
    path = /var/spool/samba
    browseable = no
    guest ok = yes
    writable = no
    printable = yes
    printer admin = root, @ntadmins, @smbprintadm
    
    [homes]
    comment = User home directories
    valid users = @smbusers
    browsable = no
    writable = yes
    guest ok = no
    
    [apps]
    comment = Shared /usr/local/apps directory
    path = /usr/local/apps
    browsable = yes
    writable = no
    guest ok = yes

    [global]セクションには、Sambaサーバーの設定が含まれます。この例では、サーバーは、ネイティブ・モードで実行されているActive Directory (AD)ドメインのメンバーであることを前提にしています。Sambaは、ローカル・サービスにアクセスするクライアントを認証するために、Kerberosサーバーで発行されるチケットを利用します。

    詳細は、Windowsのワークグループおよびドメインに対するSambaの構成についてを参照してください。

    [printers]セクションでは、印刷サービスのサポートを指定します。pathパラメータは、印刷ジョブをローカルのPrint Spoolerに発行する前に、Windowsクライアントから印刷ジョブを受け取るスプール・ディレクトリの場所を指定します。Sambaは、サーバー上のローカルに構成されたすべてのプリンタを通知します。

    [homes]セクションでは、smbusersグループ内のユーザーごとに個人共有を指定します。browsableおよびwritableの設定によって、他のユーザーがホーム・ディレクトリを参照するのを防ぐ一方、有効なユーザーには完全なアクセスを許可します。

    [apps]セクションでは、appsという共有を指定して、Windowsユーザーに/usr/local/appsディレクトリの参照および読取り専用権限を付与します。

  3. システム・ファイアウォールを構成して、ポート139と445への着信TCP接続、およびポート137と138での着信UDPデータグラムを許可します。

    sudo firewall-cmd --zone=zone --add-port=139/tcp --add-port=445/tcp --add-port=137-138/udp
    sudo firewall-cmd --permanent --zone=zone --add-port=139/tcp --add-port=445/tcp --add-port=137-138/udp

    Sambaクライアントが接続可能な他のネットワークに対して同様のルールを追加します。

    nmdbデーモンは、UDPポート137でNetBIOS名前サービス・リクエスト、およびUDPポート138でNetBIOSデータグラム・サービス・リクエストにサービスを提供します。

    smbdデーモンは、TCPポート139でNetBIOSセッション・サービス・リクエスト、およびTCPポート445でMicrosoftディレクトリ・サービス・リクエストにサービスを提供します。

  4. smbサービスを開始し、システムの再起動後にサービスが開始するように構成します。

    sudo systemctl start smb
    sudo systemctl enable smb

/etc/samba/smb.confファイルと参照先の任意のファイルが変更されると、最大で1分の遅延後、smbサービスはその構成を自動的にリロードします。SIGHUPシグナルをサービス・デーモンに送信することにより、smbに構成のリロードを強制できます。

sudo killall -SIGHUP smbd

smbが構成をリロードしても、確立済の接続には反映されません。smbサービスを再起動するか、サービスの既存のユーザーが接続解除してから再接続する必要があります。

smbサービスを再起動するには、次のコマンドを使用します。

sudo systemctl restart smb

詳細は、smb.conf(5)smbd(8)の各マニュアル・ページ、およびhttps://www.samba.org/samba/docs/を参照してください。

Windowsのワークグループおよびドメインに対するSambaの構成について

エンタープライズ・ネットワーク上のWindowsシステムは、通常、ワークグループまたはドメインに属しています。

通常、ワークグループは少数のコンピュータを接続するネットワークにのみ構成されます。ワークグループ環境とは、システムがサービスに対して相互に依存せず、集中管理が行われないピアツーピア・ネットワークです。ユーザー・アカウント、アクセス制御およびシステム・リソースは、各システムに個別に構成されます。このようなシステムでは、リソースを共有するように構成されている場合のみリソースを共有できます。

Sambaサーバーは、ワークグループ内でスタンドアロン・サーバーとして機能できます。

企業ネットワークでは、ネットワーク化された多数のシステムを集中管理できるようにドメインを構成するのが一般的です。ドメインとは、セキュリティおよびアクセス制御を共有する、信頼できるコンピュータのグループです。ドメイン・コントローラと呼ばれるシステムによって、集中管理およびセキュリティが実行されます。通常、WindowsドメインはActive Directory (AD)を使用するように構成され、ADは、Lightweight Directory Access Protocol (LDAP)を使用してKerberosおよびDNSのバージョンを実装し、認証、ドメイン・リソースへのアクセス制御、および名前サービスを提供します。Windowsドメインの中には、Kerberosを使用せずに認証を実行するWindows NT4セキュリティを使用するドメインもあります。

Sambaサーバーは、ADまたはNT4セキュリティ・ドメインのメンバーであることが可能ですが、ドメイン・コントローラとして動作できません。Sambaサーバーは、ドメイン・コントローラを使用してサーバー自体をドメイン・メンバーとして認証する必要があるため、ドメインのセキュリティ・ルールによって制御されます。ドメイン・コントローラがクライアントを認証し、Sambaサーバーはプリンタおよびネットワーク共有へのアクセスを制御します。

 Sambaをスタンドアロン・サーバーとして構成

スタンドアロンのSambaサーバーは、ワークグループのメンバーであることが可能です。次に示す/etc/samba/smb.conf[global]セクションは、共有レベルのセキュリティを使用したスタンドアロン・サーバーの構成方法の例です。

[global]
security = share
workgroup = workgroup_name
netbios name = netbios_name

クライアントは、サーバーに対してパスワードのみを指定し、ユーザー名は指定しません。一般的に、各共有はvalid usersパラメータに関連付けられ、サーバーは、リストされたユーザーについて、/etc/passwd/etc/shadow、NISまたはLDAPに格納されたハッシュ・パスワードに対してパスワードを検証します。ユーザー・レベルのセキュリティを優先させるため、共有レベルのセキュリティの使用はお薦めできません。たとえば:

[global]
security = user
workgroup = workgroup_name
netbios name = netbios_name

ユーザー・セキュリティ・モデルでは、クライアントは有効なユーザー名とパスワードを指定する必要があります。このモデルは、暗号化されたパスワードをサポートしています。サーバーがクライアントのユーザー名とパスワードを正常に検証できた場合、クライアントはパスワードを指定する必要なしに複数の共有をマウントできます。次の例のように、smbpasswdコマンドを使用して、Sambaパスワード・ファイルにユーザーのエントリを作成します。

# smbpasswd -a guest
New SMB password: password
Retype new SMB password: password
Added user guest.

ユーザーは、システム上にユーザーとしてすでに存在している必要があります。ユーザーがサーバーへのログインを許可されると、そのユーザーはsmbpasswdコマンドを使用して自分のパスワードを変更できます。

Windowsユーザーが自分のユーザー名と異なるユーザー名をSambaサーバーで使用する場合は、/etc/samba/smbusersファイルに名前の間のマッピングを作成します。たとえば:

root = admin administrator root
nobody = guest nobody pcguest smbguest
eddie = ejones
fiona = fchau

各行の最初のエントリは、Sambaサーバーでのユーザー名です。等号記号(=)の後のエントリは、Windowsユーザー名に相当します。

ノート:

Sambaパスワードを使用するのは、ユーザー・セキュリティ・モデルのみです。

Sambaサーバーがユーザー名とパスワードを認証するために別のサーバーに依存するサーバー・セキュリティ・モデルは、セキュリティおよび相互運用性の問題が多数あるため非推奨です。

SambaをADSドメインのメンバーとして構成

Activity Directory Server (ADS)セキュリティ・モデルでは、SambaはADSレルムのドメイン・メンバー・サーバーとして機能し、クライアントはActivity Directory認証にKerberosチケットを使用します。Kerberosを構成してサーバーをドメインに参加させる必要があり、これによって、ドメイン・コントローラでサーバーのマシン・アカウントが作成されます。

SambaサーバーをActive Directoryドメインに追加するには:

  1. /etc/samba/smb.confを編集して、ADSを使用するように[global]セクションを構成します。

    [global]
    security = ADS
    realm = KERBEROS.REALM

    異なるサーバーがADサービスおよびKerberos認証をサポートしているときは、パスワード・サーバーの明示的な指定が必要になる場合があります。

    password server = kerberos_server.your_domain
  2. krb5-serverパッケージをインストールします。

    # yum install krb5-server
  3. Administratorアカウント用のKerberosチケットをKerberosドメインに作成します。たとえば:
    # kinit Administrator@MYDOMAIN.COM

    このコマンドは、サーバーをADドメインに参加させるのに必要なKerberosチケットを作成します。

  4. サーバーをADドメインに参加させます。

    # net ads join -S winads.mydom.com -U Administrator%password
                                  

    この例では、ADサーバーがwinads.mydom.comで、passwordが管理者アカウントのパスワードです。

    このコマンドは、Sambaサーバーに対してActive Directoryにマシン・アカウントを作成し、サーバーがドメインに参加できるようにします。

  5. smbサービスを再起動します。

    # systemctl restart smb
SambaをWindows NT4セキュリティ・ドメインのメンバーとして構成

ノート:

Sambaサーバーがプライマリまたはバックアップ・ドメイン・コントローラとして機能する場合は、ドメイン・セキュリティ・モデルを使用しないでください。かわりに、ユーザー・セキュリティ・モデルを使用するスタンドアロン・サーバーとしてシステムを構成します。Sambaをスタンドアロン・サーバーとして構成を参照してください。

ドメイン・セキュリティ・モデルは、Windows NT4セキュリティを実装するドメインで使用します。Sambaサーバーでは、ドメインにマシン・アカウントが必要です(ドメイン・セキュリティ信頼アカウント)。Sambaでは、プライマリまたはセカンダリ・ドメイン・コントローラのいずれかを使用して、ユーザー名とパスワードを認証します。

SambaサーバーをNT4ドメインに追加するには:

  1. プライマリ・ドメイン・コントローラで、サーバー・マネージャを使用してSambaサーバーのマシン・アカウントを追加します。

  2. /etc/samba/smb.confを編集して、ADSを使用するように[global]セクションを構成します。

    [global]
    security = domain
    workgroup = DOMAIN
    netbios name = SERVERNAME
  3. サーバーをドメインに参加させます。

    # net rpc join -S winpdc.mydom.com -U Administrator%password
                                  

    この例では、プライマリ・ドメイン・コントローラがwinpdc.mydom.comで、passwordが管理者アカウントのパスワードです。

  4. smbサービスを再起動します。

    # systemctl restart smb
  5. 共有またはプリンタへのアクセスが許可されたユーザーごとに、アカウントを作成します。

    # useradd -s /sbin/nologin username
                                  
    # passwd username
                                  

    この例では、アカウントのログイン・シェルを/sbin/nologinに設定して、直接ログインを防いでいます。

WindowsクライアントからのSamba共有へのアクセス

Sambaサーバー上の共有にWindowsからアクセスするには、コンピュータまたはWindowsエクスプローラを開き、次の書式を使用してSambaサーバーのホスト名および共有名を入力します。

\\server_name\share_name

\\server_nameを入力すると、Windowsで、そのサーバーで共有されているディレクトリおよびプリンタが表示されます。また、同じ構文を使用して、ネットワーク・ドライブを共有名にマップできます。

Oracle LinuxクライアントからのSamba共有へのアクセス

ノート:

この項で説明するコマンドを使用するには、yumを使用してsamba-clientおよびcifs-utilsパッケージをインストールします。

findsmbコマンドを使用して、Sambaサーバーのサブネットを問い合せることができます。このコマンドによって、IPアドレス、NetBIOS名、ワークグループ、オペレーティング・システム、および検出された各サーバーのバージョンが表示されます。

または、smbtreeコマンドを使用でき、これは、既知のドメインの階層、それらのドメイン内のサーバー、およびサーバー上の共有を表示するテキストベースのSMBネットワーク・ブラウザです。

GNOMEおよびKDEデスクトップには、ネットワーク上でのWindows共有の表示に使用できる、ブラウザベースのファイル・マネージャが用意されています。ファイル・マネージャのロケーション・バーにsmb:と入力して、ネットワーク共有を参照します。

コマンドラインからWindows共有にアクセスするには、smbclientコマンドを使用します。

smbclient //server_name/share_name [-U username]

ログイン後に、smb:\>プロンプトにhelpと入力して、使用可能なコマンドのリストを表示します。

Samba共有をマウントするには、次のようにコマンドを使用します。

sudo mount -t cifs //server_name/share_name mountpoint -o credentials=credfile

前のコマンドで、資格証明ファイルにはusernamepasswordおよびdomainの設定が含まれます。次に例を示します。

username=eddie
password=clydenw
domain=MYDOMWKG

domainへの引数には、ドメインまたはワークグループの名前を指定できます。

注意:

資格証明ファイルにはプレーン・テキストのパスワードが含まれるため、chmodを使用して自分のみがパスワードを読み取れるようにします。たとえば:

sudo chmod 400 credfile

SambaサーバーがADドメイン内のドメイン・メンバー・サーバーで、現行のログイン・セッションがドメイン内のKerberosサーバーによって認証された場合は、資格証明ファイルのかわりにsec=krb5オプションを指定して、既存のセッション資格証明を使用できます。

sudo mount -t cifs //server_name/share_name mountpoint -o sec=krb5

詳細は、findsmb(1)mount.cifs(8)smbclient(1)およびsmbtree(1)の各マニュアル・ページを参照してください。