インストール

  • Linux マシンをホストとして公開する場合
    # yum install samba
  • Windows 上の共有フォルダを Linux マシンにマウントする場合は追加のパッケージが必要
    # yum install samba-client cifs-utils

ユーザ設定

  • Samba用ユーザの確認
    # pdbedit -L
  • 既存のLinuxユーザに対しSambaで接続するためのパスワードを追加する。
    # pdbedit -a -u <ユーザ名>

グループ設定

  • 共有フォルダ管理グループ(SmbAdmin)を作成し、既存ユーザ user1 を SmbAdmin へ追加
    # groupadd SmbAdmin
    # usermod -G SmbAdmin -a user1
  • グループ SmbUsers に属しているユーザすべてに共有フォルダへのアクセスを許可する場合
    # groupadd SmbUsers
    # usermod -G SmbUsers -a <ユーザ名>

共有用フォルダ

  • 共有フォルダ自体はオーナーとなるユーザはなし(nobody)。
  • SmbUsers グループに属するユーザは読み書き可能。
  • 管理グループ(SmbAdmin)に属するユーザがファイル作成/削除できるよう既定の拡張ファイル属性を設定。

    # cd /home
    # mkdir Shared
    # chown nobody:SmbUsers Shared
    # chmod 777 Shared
    # setfacl -m d:g:SmbAdmin:rwx /home/Shared
  • 8.2. Setting Access ACLs

  • 8.3. Setting Default ACLs

設定

  • /etc/samba/smb.conf (抜粋)
    [global]
    	unix charset = UTF-8
    	dos charset = CP932
    ;	display charset = UTF-8
    	wide links = yes
    	follow symlinks = yes
    	unix extensions = no
    	smb ports = 445
    	map to guest = Bad User
    ;	max protocol = SMB3
    
    	workgroup = WORKGROUP
    	hosts allow = 127. 192.168.1. 10.8.1.
    
    	security = user
    
    ;	CUPS を無効化
    	printing = bsd
    
    [homes]
    	browseable = no
    	writable = yes
    	valid users = %U
    
    [Shared]
    	path = /home/Shared
    	read only = no
    	browseable = yes
    	force group = SmbUsers
    	force create mode = 664
    	force directory mode = 775
    	valid users = <ユーザ1>, <ユーザ2>, @SmbUsers
    ;	samba 4.x で share modes は廃止
    ;	share modes = yes
    	dos filetimes = yes
  • Windows 10 1709 は「max protocol = SMB2」を指定しないと接続に失敗する。(CentOS6, samba 3.6.23)

サービス設定

CentOS 6

# chkconfig --list smb
# chkconfig smb on
# chkconfig --list smb
# service smb restart
# chkconfig --list nmb
# chkconfig nmb on
# chkconfig --list nmb
# service nmb restart

CentOS 7

# systemctl enable smb nmb
# systemctl restart smb nmb

ファイアウォール設定

CentOS 6

  1. 「システム/管理/ファイアーウォール」を起動。
    # system-config-firewall
  2. 「カスタマイズ」を選択。
  3. 「Samba」「Sambaクライアント」にチェックを入れる。
  4. 「閉じる」を選択。
  5. 「OK」を選択。
  6. ファイアウォール設定を変更する旨の警告が出るので「はい」を選択。
  7. IPv6 を無効にしていると ip6tables の設定に失敗した旨のエラーメッセージが表示されるが、iptables については設定されている。

CentOS 7

  • OpenVPN 経由でのアクセスを許可
  • /etc/firewalld/services/samba-vpn.xml
    <?xml version="1.0" encoding="utf-8"?>
    <service>
      <short>Samba-VPN</short>
      <description>This option allows you to access and participate in Windows file and printer sharing networks. You need the samba package installed for this option to be useful.</description>
      <port protocol="tcp" port="445"/>
      <destination ipv4="192.168.1.0/24"/>
    </service>
  • サービス登録
    # firewall-cmd --permanent --add-service=samba-vpn
    # firewall-cmd --reload

SELinux設定

CentOS 6

  • ユーザホームディレクトリのアクセスを許可
    Allow Samba to share users home directories.
    # setsebool -P samba_enable_home_dirs 1
  • 共有フォルダの読み書きを許可
    Allow samba to share any file/directory read/write.
    # setsebool -P samba_export_all_rw 1

CentOS 7

# setsebool -P samba_enable_home_dirs 1
# setsebool -P samba_export_all_rw 1
# chcon -t samba_share_t /home/Shared

Windows PC 上の共有フォルダをマウント

  • コマンド
    # mount -t cifs -o username=<Windowsのアカウント名> //<WindowsマシンのIPアドレス>/<フォルダ> <マウントポイント>
  • エラー対応
    • エラーメッセージ
      # mount -f cifs username=user1 //WinPC1/Shared /mnt/WinPC1_Shared/
      mount: 間違ったファイルシステムタイプ、不正なオプション、
             //WinPC1/Shared のスーパーブロックが不正、コードページまたは
             ヘルパープログラムの未指定、或いは他のエラー
             (for several filesystems (e.g. nfs, cifs) you might
             need a /sbin/mount.<type> helper program)
             In some cases useful info is found in syslog - try
             dmesg | tail  or so
      # dmesg | tail
      CIFS VFS: cifs_mount failed w/return code = -22
    • 原因と対策
      cifs-utils パッケージがインストールされていないので、インストールする。
      # yum install cifs-utils
  • リンク

リンク