15.4. 設定例

SELinux でどのように Samba サーバーを補完するのか、Samba サーバーの全機能をどのように管理するのかなど、実践的な例を以下に示します。

15.4.1. 作成したディレクトリーを共有する

新規のディレクトリーを作成し、そのディレクトリーを Samba で共有します。
  1. sambasamba-commonsamba-client の各パッケージがインストールされていることを確認します。
    ~]$ rpm -q samba samba-common samba-client
    package samba is not installed
    package samba-common is not installed
    package samba-client is not installed
    上記のパッケージがインストールされていない場合は、root で yum ユーティリティーを使用して、これらをインストールします。
    ~]# yum install package-name
  2. root で mkdir を使用して、Samba 経由でファイルを共有するための最上位の新規ディレクトリーを作成します。
    ~]# mkdir /myshare
  3. root で touch ユーティリティーを使用して空のファイルを作成します。このファイルは後で Samba 共有が正しくマウントされたかを確認する際に使用します。
    ~]# touch /myshare/file1
  4. SELinux では、/etc/samba/smb.conf ファイルおよび Linux パーミッションが適切に設定されていれば、Samba は samba_share_t タイプのラベルが付いたファイルの読み取りおよび書き込みが可能になります。root で以下のコマンドを実行し、ファイルコンテキストの設定にラベルの変更を追加します。
    ~]# semanage fcontext -a -t samba_share_t "/myshare(/.*)?"
  5. root で restorecon ユーティリティーを使用してラベル変更を適用します。
    ~]# restorecon -R -v /myshare
    restorecon reset /myshare context unconfined_u:object_r:default_t:s0->system_u:object_r:samba_share_t:s0
    restorecon reset /myshare/file1 context unconfined_u:object_r:default_t:s0->system_u:object_r:samba_share_t:s0
  6. root で /etc/samba/smb.conf ファイルを編集します。Samba で /myshare/ ディレクトリーを共有するために、以下をこのファイルの末尾に追加します。
    [myshare]
    comment = My share
    path = /myshare
    public = yes
    writable = no
  7. Samba ファイルシステムのマウントには Samba アカウントが必要になります。root で以下のコマンドを実行し、Samba アカウントを作成します。username は既存の Linux ユーザーにします。たとえば、smbpasswd -a testuser を実行すると、Linux の testuser ユーザー用の Samba アカウントが作成されます。
    ~]# smbpasswd -a testuser
    New SMB password: Enter a password
    Retype new SMB password: Enter the same password again
    Added user testuser.
    上記のコマンドを実行する際に、システムに存在しないアカウントのユーザー名を指定すると、Cannot locate Unix account for 'username'! エラーが発生します。
  8. Samba サービスを開始します。
    ~]# systemctl start smb.service
  9. 以下のコマンドを実行し、利用可能な共有を表示します。username はステップ 7 で追加した Samba アカウントにします。パスワードの入力を求められたら、ステップ 7 で Samba アカウントに割り当てたパスワードを入力します (バージョン番号は使用しているバージョンによって異なります)。
    ~]$ smbclient -U username -L localhost
    Enter username's password:
    Domain=[HOSTNAME] OS=[Unix] Server=[Samba 3.4.0-0.41.el6]
    
    Sharename       Type      Comment
    ---------       ----      -------
    myshare         Disk      My share
    IPC$            IPC       IPC Service (Samba Server Version 3.4.0-0.41.el6)
    username        Disk      Home Directories
    Domain=[HOSTNAME] OS=[Unix] Server=[Samba 3.4.0-0.41.el6]
    
    Server               Comment
    ---------            -------
    
    Workgroup            Master
    ---------            -------
  10. root で mkdir ユーティリティーを使って新規ディレクトリーを作成します。このディレクトリーは Samba 共有の myshare をマウントする際に使用します。
    ~]# mkdir /test/
  11. root で以下のコマンドを実行して、Samba 共有の myshare/test/ にマウントします。username はステップ 7 のユーザー名にしてください。
    ~]# mount //localhost/myshare /test/ -o user=username
    ステップ 7 で設定した username のパスワードを入力します。
  12. 以下のコマンドを実行して、ステップ 3 で作成した file1 を表示します。
    ~]$ ls /test/
    file1

15.4.2. web サイトを共有する

/var/www/html/ ディレクトリーで web サイトを共有したい場合などは、ファイルに samba_share_t タイプのラベルが付けられないことがあります。このような場合には、samba_export_all_ro ブール値を使用して読み取り専用パーミッションを付与して (現在のラベルに関係なく) すべてのファイルやディレクトリーを共有するか、samba_export_all_rw を使用して読み取りおよび書き込みパーミッションを付与して (現在のラベルに関係なく) すべてのファイルやディレクトリーを共有します。
以下の例では、/var/www/html/ 内に web サイトのファイルを作成してから、そのファイルに読み取りおよび書き込みパーミッションを与えて Samba で共有します。ここでは、httpdsambasamba-commonsamba-clientwget のパッケージがインストールされていることを前提としています。
  1. root ユーザーで /var/www/html/file1.html ファイルを作成します。以下のコンテンツをコピーしてこのファイルに貼り付けます。
    <html>
    <h2>File being shared through the Apache HTTP Server and Samba.</h2>
    </html>
  2. 以下のコマンドを実行して、file1.html の SELinux コンテキストを表示します。
    ~]$ ls -Z /var/www/html/file1.html
    -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1.html
    このファイルには httpd_sys_content_t タイプのラベルが付けられています。デフォルトでは、Apache HTTP Server はこのタイプにアクセスできますが、Samba はアクセスできません。
  3. Apache HTTP Server を起動します。
    ~]# systemctl start httpd.service
  4. ユーザーでの書き込みアクセスがあるディレクトリーに切り替え、以下のコマンドを実行します。デフォルト設定に変更がなければ、このコマンドは成功します。
    ~]$ wget http://localhost/file1.html
    Resolving localhost... 127.0.0.1
    Connecting to localhost|127.0.0.1|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 84 [text/html]
    Saving to: `file1.html.1'
    
    100%[=======================>] 84          --.-K/s   in 0s      
    
    `file1.html.1' saved [84/84]
  5. root で /etc/samba/smb.conf ファイルを編集します。Samba で /var/www/html/ ディレクトリーを共有するために、以下をこのファイルの末尾に追加します。
    [website]
    comment = Sharing a website
    path = /var/www/html/
    public = no
    writable = no
  6. /var/www/html/ ディレクトリーには httpd_sys_content_t タイプのラベルが付けられています。Samba はデフォルトでは、このタイプのラベルが付いたファイルやディレクトリーには、Linux パーミッションで許可されていてもアクセスできません。Samba のアクセスを許可するには、samba_export_all_ro ブール値を有効にします。
    ~]# setsebool -P samba_export_all_ro on
    再起動後に変更を維持したくない場合は、-P を使用しないでください。samba_export_all_ro ブール値を有効にすると、Samba からいずれのタイプにもアクセスもできるようになることに注意してください。
  7. Samba サービスを開始します。
    ~]# systemctl start smb.service

このページには機械翻訳が使用されている場合があります (詳細はこちら)。