インストール - Samba
概要
Sambaは、Linux上でWindowsのネットワーク機能を実現するソフトウェアである。
Sambaを導入すると、Windowsのファイルサーバと同じ役割を果たす、または、WindowsファイルサーバをLinuxから利用することもできる。
つまり、Windowsファイルサーバのクライアント機能も持っている。
その他、プリンタサーバの機能や、企業で使用されるWindowsドメイン(Active Directory)のサーバになる機能も持つ。
Samba 4以降において、Windowsのドメインコントローラとなることができるため、既存のWindowsサーバを丸ごと置き換えることも可能である。
Sambaを使用してファイルサーバを構築するには、クライアント端末からアクセスができるようにするため、既存のネットワークに接続する必要がある。
また、サーバを静的IPアドレスに設定することが必要である。
| サーバプロセス | 説明 | 
|---|---|
| smbd | ファイル共有、認証等 | 
| nmbd | ブラウジング機能、NetBIOS名前解決、WINSサーバ等 | 
| winbindd | Winbind機能 | 
| ポート番号 | 説明 | 
|---|---|
| 137 / UDP | NetBIOS名前解決やブラウジング | 
| 138 / UDP | NetBIOS名前解決やドメインログオン | 
| 139 / TCP | ファイル共有 | 
| 445 / TCP | ファイル共有 | 
| 参考書 | 
|---|
|  サーバ構築の実例がわかる | 
Sambaのインストール
パッケージ管理システムからインストール
最新パッケージリストを取得する。
# RHEL sudo dnf update # SUSE sudo zypper update # Raspberry Pi sudo apt update
Sambaをインストールする。
# RHEL sudo dnf install samba samba-client # SUSE sudo zypper install samba samba-client # Raspberry Pi sudo apt install samba
ソースコードからインストール
Sambaのビルドに必要なライブラリをインストールする。
Kerberos 1.15.1以降が必要となることに注意する。
# RHEL
sudo dnf install tar gcc gdb rpcgen docbook-style-xsl dbus-devel readline-devel zlib-devel gnutls-devel systemd-devel \
                 gpgme-devel keyutils-libs-devel krb5-workstation jansson-devel libacl-devel libaio-devel cups-devel \
                 libarchive-devel libattr-devel libblkid-devel libtasn1 libtasn1-tools libxml2-devel libxslt \
                 lmdb-devel openldap-devel pam-devel perl perl-ExtUtils-MakeMaker perl-Parse-Yapp popt-devel \
                 python36-devel python3-cryptography python3-dns python3-gpg python3-markdown
# SUSE
sudo zypper install tar acl attr autoconf bison flex ccache hostname gawk sed rsync pkgconfig htop lcov intltool rpcgen rpcsvc-proto-devel \
                    tree patch procps psmisc rng-tools gcc gdb glib2-devel glibc-locale ncurses-devel readline-devel zlib-devel dbus-1-devel \
                    libicu-devel libcap-devel libpcap-devel libtevent-devel liburing2-devel \
                    libjansson-devel keyutils-devel krb5-server krb5-client krb5-devel \
                    libacl-devel libaio-devel libarchive-devel libattr-devel libblkid-devel libtasn1-devel systemd-devel \
                    libxml2-devel libxslt libxslt-devel docbook_4 docbook5-xsl-stylesheets lmdb lmdb-devel openldap2-devel pam-devel \
                    gnutls-devel gpgme-devel popt-devel cups-devel libbsd-devel libnsl-devel liburing2-devel libbd_dm-devel \
                    perl perl-ExtUtils-MakeMaker perl-Parse-Yapp perl-Archive-Tar-Wrapper perl-JSON perl-JSON-XS perl-Test-Base \
                    python3-devel python3-cryptography python3-dnspython python3-gpg python3-Markdown python3-semanage \
                    python3-talloc-devel python3-iso8601 python3-pyasn1 python3-setproctitle policycoreutils-python \
                    libtalloc-devel libcmocka-devel libtdb-devel tracker-devel libnscd-devel libuuid-devel libunwind-devel \
                    xfsprogs-devel glusterfs-devel libtirpc-devel libntirpc-devel libavahi-devel chrpath libcephfs-devel \
                    lsb-release system-user-nobody dnf-utils \
                    bind-utils  # 内部DNSサーバを使用する場合
# Raspberry Pi
# インストールには、BIND DNSサーバを含んでいる
# もし、Sambaにおいて、内部DNSサーバを使用する場合、BINDパッケージは省略できる
# ただし、ダイナミックDNSのサポートを有効にするため、nsupdateを含むパッケージが必要となる
sudo apt install acl attr autoconf bison flex pkg-config \
                 build-essential gdb libncurses5-dev libreadline-dev \
                 debhelper dnsutils docbook-xml docbook-xsl xsltproc krb5-user \
                 libacl1-dev libaio-dev libarchive-dev libattr1-dev libblkid-dev libbsd-dev \
                 libcap-dev libcups2-dev libgnutls28-dev nettle-dev libgpgme-dev libjansson-dev \
                 libldap2-dev libpam0g-dev libpopt-dev \
                 perl perl-modules libparse-yapp-perl libjson-perl \
                 python-all-dev python-dev python3-dev python-crypto python-dbg python-dnspython \
                 python3-dnspython python-gpgme python3-gpgme python-markdown python3-markdown \
                 zlib1g-dev liblmdb-dev lmdb-utilsa \
                 bind9utils  # 内部DNSサーバを使用する場合
Sambaの公式WebサイトまたはSambaのGithubにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。
tar xf samba-<バージョン>.tar.gz cd samba-<バージョン>
Sambaをビルドおよびインストールする。
ビルドディレクトリを作成する場合、Sambaのビルドに失敗することに注意する。
./configure --prefix=<Sambaのインストールディレクトリ> --enable-cups --with-systemd \
            --systemd-install-services  # Sambaの管理向けデーモンをインストールする場合
make -j $(nproc)
make install
SambaのSystemdサービスファイルを、/etc/systemd/systemディレクトリにコピーする。
sudo cp /<Sambaのインストールディレクトリ>/lib/systemd/system/* /etc/systemd/system
SambaのSystemdサービスファイルを読み込む。
sudo systemctl daemon-reload
Sambaの設定
Sambaの設定ファイルを作成する。
# パッケージ管理システムからSambaをインストールしている場合 sudo vi /etc/samba/smb.conf # ソースコードからSambaをインストールしている場合 vi /<Sambaのインストールディレクトリ>/etc/smb.conf
 # /<Sambaのインストールディレクトリ>/etc/smb.confファイル
 
 # smb.conf is the main Samba configuration file.
 
 # Samba全体の設定例
 [global]
    unix charset = UTF-8
    dos charset = CP932
    server string = Samba Server %v
    workgroup = <Windowsネットワーク名またはドメイン名)  例. WORKGROUP>
    passdb backend = tdbsam
    printing = cups
    printcap name = cups
    printcap cache time = 750
    cups options = raw
    map to guest = Bad User
    logon path = \\%L\profiles\.msprofile
    logon home = \\%L\%U\.9xprofile
    logon drive = P:
    usershare allow guests = Yes
    security = USER
    smb passwd file = <Sambaのユーザパスワードファイルのパス(smbpasswdコマンドを使用する場合)  例. /<Sambaのインストールディレクトリ>/etc/samba/smbpasswd>
    guest account = nobody
    unix password sync = no
    log file = <Sambaのログファイルのパス  例. /var/log/samba/log.%m>
    max log size = 50
    socket options = <ソケットプオプション  例. TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192>
    dns proxy = No
    # アクセス制限(許可する範囲)
    hosts allow = <許可するIPアドレスまたはドメイン名>
                  # 例1. 192.168.1. 127.0.
                  # 例2. 192.168.1.20/24 192.168.1.30/255.255.255.0
                  # 例3. myhost.mynet.edu.au
 
 # Linuxユーザの各ホームディレクトリを一括して共有するためのセクションの設定例
 # 各ユーザごとにホームディレクトリの共有を定義する必要がない
 [homes]
    comment = Home Directories
    valid users = %S, %D%w%S
    browseable = No
    read only = No
    inherit acls = Yes
    guest ok = No
 
 # 特定のロービングプロファイルシェアを提供する
 # デフォルトでは、ユーザのホームディレクトリを使用する
 [profiles]
    comment = Network Profiles Service
    path = %H
    read only = No
    store dos attributes = Yes
    create mask = 0600
    directory mask = 0700
    guest ok = No
 
 # ファイルに記述されたプリンタに接続できる (ユーザ名はprintcap)
 # 共有名が存在するプリンタ名に設定される
 # サービスにゲストのアクセス許可が無く、クライアントからユーザ名が与えられていない場合は、ユーザ名はプリンタの名前に設定される
 [printers]
    comment = All Printers
    path = /var/tmp
    printable = Yes # プリンタ共有として利用する
    print ok = Yes  # プリンタ共有として利用する
    browseable = No
    writeable = No
    guest ok = No
    create mask = 0600
 
 # Windowsがプリンタドライバの自動ダウンロードを行う際の共有名を指定する特殊なセクション
 # Windows側でプリンタドライバが無い場合、[print$]セクションからドライバを検索する
 [print$]
    comment = Printer Drivers
    path = /var/lib/samba/drivers
    write list = @ntadmin root
    force group = ntadmin
    create mask = 0664
    directory mask = 0775
 
 # 任意の共有ディレクトリ 1
 # 個々のユーザごとのホームディレクトリを共有するための設定を定義する
 # ユーザ名ごとに適用するプロファイルや追加の設定を指定できる
 # 各ユーザは自分のホームディレクトリにアクセスでき、他のユーザのホームディレクトリにはアクセスできない
 [users]
    comment = All users
    path = /home/%U
    read only = No
    create mask = 0700     # 新しいファイルが作成された時のデフォルトのアクセス許可を指定する
    directory mask = 0700  # 新しいディレクトリが作成された時のデフォルトのアクセス許可を指定する
    inherit acls = Yes
    veto files = /aquota.user/groups/shares/
    browseable = no        # 共有フォルダがネットワーク上で見えるかどうかを指定します。
    valid users = %U       # この共有フォルダにアクセスできるユーザ名を指定する
                           # 例えば、%Uは現在のユーザ名に置き換えられる
 
 # 任意の共有ディレクトリ 2
 # グループ単位で共有フォルダを設定する
 # 特定のグループに属するユーザがアクセスできる共有フォルダを定義する
 [groups]
    comment = All groups
    path = /srv/samba/groups/%G  # 共有フォルダのパスを指定する
                                 # 例えば、%Gは現在のグループ名に置き換えられる
    read only = No
    create mask = 0770           # 新しいファイルが作成されたときのデフォルトのアクセス許可を指定する
    directory mask = 0770        # 新しいディレクトリが作成されたときのデフォルトのアクセス許可を指定する
    guest ok = No
 
 # 任意の共有ディレクトリ 3
 [<共有ディレクトリ名  例. Share>]
   comment = Samba on Linux
   path = <共有ディレクトリのパス  例. /home/<ユーザ名>/Public>  # 共有ディレクトリのパスを指定する
   read only = No                         # 読み込みのみにするかどうかを指定する
   writable = Yes                         # 書き込みを許可するかどうかを指定する
   #read list = <ユーザ名またはグループ名>     # 読み込みが例外的に許可されるユーザを指定する (グループを指定する時は@<グループ名>を使用する)
   #write list = <ユーザ名またはグループ名>    # 書き込みが例外的に許可されるユーザを指定する (グループを指定する時は@<グループ名>を使用する)
   browsable = Yes                        # ブラウジングした時に表示されるかどうかを指定する
                                          # ただし、共有名を直接指定する場合もアクセスすることができる
   public = Yes                           # ゲストログインを許可するかどうかを指定する (publicキーとguest okキーは同じ意味)
   guest ok = Yes                         # ゲストログインを許可するかどうかを指定する (publicキーとguest okキーは同じ意味)
   #force user = <ユーザ名>                 # 共有内に作成するファイルおよびディレクトリにおいて、所有者を強制的に指定したユーザにする
   #force group = <グループ名>              # 共有内に作成するファイルおよびディレクトリにおいて、所有グループを強制的に指定したグループにする
   #inherit acls = Yes                    # 新しく作成されたファイルが、親ディレクトリのACL (アクセス制御リスト) を継承するかどうかを制御する
   #veto files = <ファイル名およびディレクトリ名>  # 表示およびアクセスさせないファイルやディレクトリを指定する
   #hide dot files = No                   # 隠し属性を適用するかどうかを指定する
   #hide files = <ファイル名およびディレクトリ名>  # ファイルおよびディレクトリを表示させないファイル名またはディレクトリ名を指定する
                                          # ただし、アクセスは可能である
   #available = Yes
   #valid users = <Sambaのユーザ名1またはグループ名1> <Sambaのユーザ名2またはグループ名2> ...  # アクセス可能なユーザを指定する (グループを指定する時は@<グループ名>を使用する)
設定ファイルの確認
Sambaの設定ファイルが正常に設定されているかどうかを確認する。
testparm または sudo testparm # 設定ファイルのパスを指定する場合 testparm <smb.confファイルのパス> または sudo testparm <smb.confファイルのパス>
testparmのオプションを以下に示す。
- -sオプション
- 設定ファイルにおいて、有効な設定のみを表示する。
 
- -vオプション
- 詳細な出力を表示する。
 
- --show-all-parametersオプション
- 全てのパラメータとその値を表示する。
 
- --suppress-promptオプション
- プロンプトを表示せずに実行する。
 
Sambaの設定項目
Sambaの設定ファイル (smb.confファイル) では、各セクション ([global]セクションを除く) は、共有リソースを記述する。
設定ファイルには、[global]セクション、[homes]セクション、[printers]セクションの3つの特別なセクションがある。
それ以外のセクションは、ユーザ定義のセクションである。
Sambaの設定ファイルのセクション名において、大文字・小文字は区別されない。
そのため、以下に示すような記述は同じように認識される。
ただし、一般的な慣習としては、小文字のセクション名が最も広く使われており、設定ファイルの可読性や保守性の観点からも、小文字で統一することを推奨する。
 # [global]セクションの記述例
 
 [global]
 [GLOBAL]
 [Global]
[global]セクション
Sambaサーバ全体に適用される設定を記述する特殊なセクションである。
| キー | 意味 | 
|---|---|
| server string | サーバ名等の説明を記述する。 ブラウズリストでコンピュータ名の隣、および、プリンタマネージャにおけるプリンタのコメント欄等に表示される。 デフォルト値は、 Samba %v%vは、Sambaのバージョンを表すマクロである。 | 
| netbios name | SambaサーバのNetBIOS名を指定する。 デフォルト値は、システムのホスト名である。 明示的なデフォルト値は無く、システムのホスト名が使用される。 | 
| workgroup | Sambaサーバが、所属するワークグループ名もしくはドメイン名を指定する。 デフォルト値は、 WORKGROUP | 
| server role | Sambaサーバーの動作モードを指定する。 デフォルト値は、 auto | 
| hosts allow | 接続を許可するIPアドレスまたはホスト名を指定する。(未指定のIPアドレスまたはホスト名は拒否される) デフォルト値は無く、デフォルトで全てのホストからのアクセスを許可する。 
 | 
| guest account | アカウントが存在しないユーザはゲストとしてアクセスできる。 nobody以外を使用する場合は、予め、/etc/passwdファイルに該当ユーザを作成する必要がある。 デフォルト値は、 nobody | 
| Bad User | 存在しないユーザがアクセスする場合は、ゲスト認証であるとみなして、 guest accountキーで定義されたユーザでログインする。 | 
| Bad Password | 上記に加えて、パスワード入力ミスの場合もゲスト認証であるとみなす。 | 
| Never | ゲスト認証を許可しない。 | 
| map to guest | Sambaユーザとして認証できない場合の動作を指定する。 デフォルト値は、 Never設定値 
 | 
| log file | ログファイルのパスを指定する。 接続元ホストを示す変数 %mを使用する場合、接続元ホストごとにログファイルを分けることができる。デフォルト値は、 /var/log/samba/log.%m%mはクライアントのNetBIOS名を表すマクロである。 | 
| max log size | ログファイルの最大サイズを指定する。 値が0の場合は、サイズは無制限となる。 デフォルト値は、 1000[kB] | 
| passdb backend | ユーザアカウント情報を格納するバックエンドを指定する。 デフォルト値は、 tdbsamであり、TDB (Trivial Database) ファイルを使用する。
 
  [global]
 passdb backend = tdbsam guest
 | 
| usershare allow guests | ゲストアクセスを持つユーザがユーザ共有を作成することを許可するかどうかを指定する。 デフォルト値は、 no"no"は、セキュリティ上の理由からゲストユーザによる共有作成を禁止する。 | 
| logon path | ユーザのローミングプロファイルの場所を指定する。 デフォルト値は相対パスを使用しており、実際の場所はサーバ設定に依存する。 デフォルト値は、 \%N%U\profile%Nは、このパラメータが使用されるサーバ名 %Uは、現在のUNIXユーザ名 | 
| logon home | ユーザのホームディレクトリの場所を指定する。 これもデフォルトでは相対パスを使用している。 デフォルト値は、 \%N%U%Nは、このパラメータが使用されるサーバ名 %Uは、現在のUNIXユーザ名 | 
| logon drive | Windowsクライアントでホームディレクトリをマップするドライブ文字を指定する。 デフォルトでは設定されていない。 | 
| logon script | ユーザがログインする時に実行するスクリプトを指定する。 デフォルトでは設定されていない。 | 
| smb passwd file | smbpasswd方式でパスワード認証を行う場合のパスワードファイルのパスを指定する。 | 
| unix password sync | SambaのパスワードとLinuxのパスワードを同期させるかどうかを指定する。 この設定を有効にする場合、Sambaのパスワードを変更した後、Linuxユーザのパスワードも変更する必要がある。 デフォルト値は、 noyesを指定する場合、Sambaを通じてシステムのパスワードが変更されるため、セキュリティリスクが高まる可能性がある。 そのため、システムのセキュリティポリシーと整合性があることを確認することが必要となる。 | 
| passwd program | unix password syncキーを有効にした場合、Unixパスワードを変更するために使用するプログラムを指定する。 デフォルト値は、 /usr/bin/passwd %u"%uは、変更対象のユーザ名を表す。 | 
| passwd chat | unix password syncキーを有効にした場合、パスワード変更プログラムとの対話を定義する。 デフォルト値は、一般的なパスワード変更プロンプトに対応している。 | 
| username map | Linuxユーザを別のユーザとマッピングさせて、複数のユーザで共有する。 デフォルトでは設定されていない。 | 
| wins support | nmbdのWINSサーバとして動作させるかどうかを設定する。 | 
| wins server | WINSサーバのIPアドレスを指定する。 | 
| mangled names | Sambaサーバ上のDOS非互換のファイル名を、DOS互換の名前に置き換えてアクセス可能にする、または、無視するかどうかを制御する。 Windowsクライアントで作成したファイルにおいて、大文字 / 小文字の区別や日本語を正しく表示させる。 | 
| mangle case | Windowsクライアントにおいて、長いファイル名に対応する短縮名を作る。 よほど古いWindows OSでない限り、この値は Noにする。 | 
| short preserve case | DOS 8.3形式のファイル名を、そのまま使用する( Yes)、または、デフォルトの設定に従う(no)かを設定する。 | 
| case sensitive | ファイル名の大文字と小文字を異なる文字として認識するかどうかを設定する。 | 
| default case | 新規ファイルを作成する場合、デフォルトファイル名を大文字(upper)にする、または、小文字(lower)にするかどうかを設定する。 デフォルトの値は、 lowerである。 | 
| username level | 大文字および小文字が混在したユーザ名の扱いを設定する。 | 
| password level | このパラメータの値を大きくするほど、大文字と小文字の混在したパスワードが大文字、または、小文字のみのパスワードと一致するようになる。 | 
| security | Sambaサーバと同じユーザ名を使用する場合は、パラメータ値を Userに設定する。 | 
| local master | Sambaをネットワークにおけるマスタブラウザにするかどうかを設定する。 | 
| domain master | Sambaをドメインマスタブラウザにするかどうかを設定する。 これにより、Sambaはサブネット間のブラウズリストの照合を行う。 もし、既にWindows NTドメインコントローラが存在する場合は、このオプションを使用しないこと。 | 
| domain logons | クライアントPCに対するドメインログオンサーバにするかどうかを設定する。 | 
[homes]セクション
[homes]セクションは、ユーザのホームディレクトリを自動的に共有するために使用する特別なセクションである。
[homes]セクションは特別な意味を持つため、一部のキーは、通常のセクションの同名のキーとは異なる振る舞いをすることがある。
例えば、valid users = %Sは現在接続しているユーザーのみがそのホームディレクトリにアクセスできるようにする設定である。
ただし、必ずしも全てのsmb.confファイルに存在するわけではない。
| キー | 意味 | 
|---|---|
| browseable | この共有をネットワーク上で表示するかどうかを制御する。 値: yesまたはno例: browseable = no | 
| read only | 共有を読み取り専用にするかどうかを指定する。 値: yesまたはno例: read only = no | 
| writable | ユーザに書き込み権限を与えるかどうかを指定する。 一般的には read onlyがよく使用されている。 値: yesまたはno例: writable = yes | 
| create mask | 新しく作成されるファイルのパーミッションを指定する。 値: 8進数のパーミッション値 例: create mask = 0700 | 
| directory mask | 新しく作成されるディレクトリのパーミッションを指定する。 値: 8進数のパーミッション値 例: directory mask = 0700 | 
| valid users | この共有にアクセスできるユーザを指定する。 例: valid users = %S | 
| guest ok | ゲストユーザのアクセスを許可するかどうかを指定する。 値: yesまたはno例: guest ok = no | 
| hide dot files | ドットで始まるファイルを隠すかどうかを指定する。 値: yesまたはno例: hide dot files = yes [homes]セクションでも一般的に使用される。 | 
| path | Sambaが自動的にユーザのホームディレクトリの基本パスを指定する。 例: path = /home/%S [homes]セクションでは一般的に使用されない。 他の共有セクションで指定する。 | 
| veto files | アクセスを拒否するファイルパターンを指定する。 例: veto files = /.*/.*/ [homes]セクションでも使用可能であるが、 [global]セクションや他の共有セクションでもよく使用される。 | 
| hide files | 特定のファイルやディレクトリを非表示にする。 例: hide files = /lost+found/*/ [homes]セクションでも使用可能であるが、 [global]セクションや他の共有セクションでもよく使用される。 | 
| follow symlinks | シンボリックリンクをたどるかどうかを指定する。 値: yesまたはno例: follow symlinks = yes [homes]セクションでも使用可能であるが、 [global]セクションでより一般的に指定される。 | 
| strict sync | 同期書き込みを厳密に行うかどうかを指定する。 値: yesまたはno例: strict sync = no [homes]セクションで使用可能であるが、 パフォーマンスに影響を与える可能性があるため、使用を検討する必要がある。 | 
| case sensitive | ファイル名の大文字小文字を区別するかどうかを指定する。 値: yesまたはnoまたはauto例: case sensitive = auto [homes]セクションでも使用可能であるが、 [global]セクションでより一般的に指定される。 | 
| dos filetimes | DOSスタイルのファイルタイムスタンプを使用するかどうかを指定する。 値: yesまたはno例: dos filetimes = yes 例: case sensitive = auto [homes]セクションでも使用可能であるが、 [global]セクションでより一般的に指定される。 | 
[printers]セクション
Sambaで利用可能な全てのプリンタを共有するための特別なセクションである。
このセクションを使用する場合、システムに設定されているプリンタが自動的に共有される。
[printers]セクションは、全てのプリンタに適用される基本的な設定のみを含み、より具体的または高度な設定は別のセクションで行われることが多い。
| キー | 意味 | 
|---|---|
| comment | [printers]セクションの説明文である。 例: comment = All Printers | 
| path | スプールファイルを保存するディレクトリを指定する。 例: path = /var/spool/samba | 
| browseable | プリンタ共有をネットワーク上で表示するかどうかを設定する。 値: yesまたはno例: browseable = yes | 
| guest ok | ゲストユーザのアクセスを許可するかどうかを指定する。 値: yesまたはno例: guest ok = no | 
| print ok | この共有をプリンタ共有として使用可能にするかどうかを指定する。 [printers]セクションでは、一般的に、 yesに設定する。値: yesまたはno例: print ok = yes ※注意 このオプションは、printableキーのエイリアス (別名) である。 どちらを使用しても同じ効果がある。 | 
| printable | この共有をプリンタ共有として使用可能にするかどうかを指定する。 [printers]セクションでは、一般的に、 yesに設定する。値: yesまたはno例: print ok = yes ※注意 このオプションは、print okキーのエイリアス (別名) である。 どちらを使用しても同じ効果がある。 | 
| print command | 印刷ジョブを処理するコマンドを指定する。 例: print command = /usr/bin/lpr -P %p %s | 
| lpq command | プリンタキューの状態を表示するコマンドを指定する。 例: lpq command = /usr/bin/lpq -P %p | 
| lprm command | 印刷ジョブを削除するコマンドを指定する。 例: lprm command = /usr/bin/lprm -P %p %j | 
| load printer | 主に[global]セクションで設定されるため、[printers]セクションでは一般的には使用されない。 システムに設定されている全てのプリンタを自動的に共有するかどうかを指定する。 | 
| printing | 主に[global]セクションで設定されるため、[printers]セクションでは一般的には使用されない。 使用する印刷システムを指定する。 | 
| printer admin | この設定は、古いバージョンのSambaで使用されていたが、現在は非推奨である。 [printers]セクションでの使用は一般的には使用されない。 プリンタ管理者として指定するユーザやグループを設定する。 | 
| min print space | これは個々のプリンタ共有で設定、または、必要な場合は[global]セクションで設定する。 印刷を許可するために必要な最小のディスク空き容量を指定する。 | 
| use client driver | これは個々のプリンタ共有で設定、または、必要な場合は[global]セクションで設定する。 クライアント側のプリンタドライバを使用するかどうかを指定する。 | 
[profiles]セクション
[profiles]セクションは、最初から予約されているわけではない。
これは、Sambaの特定の機能に関連する慣例的なセクション名である。
最初から予約されていないが、Windowsドメイン環境でよく使用される慣例的な名前である。
多くのLinuxディストリビューションでは、ローミングプロファイルを格納するために使用される。
このセクション名は、Sambaの特定の機能と密接に関連しているため、多くの設定例や文書で見かけることがある。
ユーザが別の名前を使用することも可能である。
ただし、これらの慣例的な名前を使用することにより、設定の意図が明確になり、他の管理者も理解しやすくなるというメリットがある。
また、一部のSamba関連ツールやスクリプトが、これらの名前を期待している可能性もある。
これらのキーを使用して、ユーザプロファイルの共有動作をカスタマイズできる。
※注意
- セキュリティ
- プロファイルには個人情報が含まれる可能性があるため、適切なアクセス制御が重要である。
 
- パフォーマンス
- プロファイルが大きくなると、ログオン/ログオフ時間に影響を与える可能性がある。
 
- 互換性
- Windowsのバージョンによっては、プロファイルの扱いが異なる場合がある。
 
| キー | 意味 | 
|---|---|
| comment | [profiles]セクションの説明文である。 例: comment = Network Profiles Service | 
| path | プロファイルの保存場所を指定する。 例: path = %H | 
| read only | 共有を読み取り専用にするかどうかを指定する。 値: yesまたはno例: read only = no | 
| create mask | 新しく作成されるファイルのパーミッションを指定する。 値: 8進数のパーミッション値 例: create mask = 0600 | 
| directory mask | 新しく作成されるディレクトリのパーミッションを指定する。 値: 8進数のパーミッション値 例: directory mask = 0700 | 
| profile acls | プロファイルのACL (アクセス制御リスト) を有効にするかどうかを指定する。 値: yesまたはno例: profile acls = yes | 
| strict sync | 同期書き込みを厳密に行うかどうかを指定する。 yesの場合各書き込み操作後に即座にディスクに同期する。 データの一貫性は高まるが、パフォーマンスが低下する可能性がある。 noの場合即座の同期を行わず、システムの標準的なバッファリングを使用する。 パフォーマンスは向上するが、突然のシャットダウン時にデータが失われるリスクが高まる。 値: yesまたはno例: strict sync = no | 
| store dos attributes | WindowsのDOS属性 (読み取り専用、隠しファイル、システムファイル、アーカイブ)をUNIXファイルシステム上に保存するかどうかを制御する。 値 : yes(または、trueもしくは1) /no(または、falseもしくは0)デフォルト値は、 no有効にする場合、Sambaは、WindowsクライアントがファイルのDOS属性を変更した時に、それをUNIXファイルシステム上に保存する。 これにより、Windows固有の属性情報がUNIXシステム上でも維持される。 属性は、ファイルのEAバック (Extended Attributes) や特別なストリームに保存される。 無効にする場合、DOS属性はUNIXファイルシステム上に直接保存されない。 代わりに、SambaはUNIXのパーミッションを基にしてDOS属性をシミュレートする。 ※注意 全てのUNIXファイルシステムがEAバックをサポートしているわけではない。 Windows統合が重要な環境では、このオプションを有効にすることにより、Windowsライクな動作を実現できる。 この設定は、WindowsとUNIX/Linux間でのファイル属性の一貫性を維持したい場合に特に有効である。 | 
| csc policy | クライアント側のキャッシュポリシーを指定する。 値: manual,documents,programs,disable例: csc policy = disable [profiles]セクションでは使用せず、一般的には、個別の共有セクションで指定する。 | 
| roaming profiles | ローミングプロファイルの動作を制御する。 ローミングプロファイルは、ユーザが異なるPCにログインしても同じ設定やデスクトップ環境を維持できるようにする機能である。 値: yesまたはno例: roaming profiles = yes yesの場合ユーザがログアウトする時にプロファイルがサーバに保存されて、別のPCでログインする時にそのプロファイルがロードされる。 noの場合ローカルプロファイルのみが使用されて、プロファイルはサーバに保存されない。 [profiles]セクションで使用することがあるが、一般的には、[global]セクションで指定する。 | 
[netlogon]セクション
[netlogon]セクションは、最初から予約されているわけではない。
これは、Sambaの特定の機能に関連する慣例的なセクション名である。
最初から予約されていないが、Windowsドメインコントローラの機能を模倣する時によく使用される慣例的な名前である。
多くのLinuxディストリビューションでは、ドメインのログオンスクリプトやポリシーファイルを格納するために使用される。
このセクション名は、Sambaの特定の機能と密接に関連しているため、多くの設定例や文書で見かけることがある。
ユーザが別の名前を使用することも可能である。
ただし、これらの慣例的な名前を使用することにより、設定の意図が明確になり、他の管理者も理解しやすくなるというメリットがある。
また、一部のSamba関連ツールやスクリプトが、これらの名前を期待している可能性もある。
一般的な共有セクションで使用されるような多くのキー (write list、hide files、create mask、directory mask等)は、一般的には[netlogon]セクションでは使用されない。
| キー | 意味 | 
|---|---|
| path | ネットログオンスクリプトを格納するディレクトリのパスを指定する。 例: path = /var/lib/samba/netlogon | 
| read only | ネットログオンディレクトリを読み取り専用にするかどうかを設定する。 値: yesまたはno例: read only = yes | 
| guest ok | ゲストアクセスを許可するかどうかを設定する。 セキュリティ上の理由から、通常は noに設定される。値: yesまたはno例: guest ok = no | 
| browseable | このセクションをネットワーク上で表示するかどうかを制御する。 通常は noに設定される。値: yesまたはno例: browseable = no | 
[print$]セクション
[print$]セクションは、最初から予約されているわけではない。
これは、Sambaの特定の機能に関連する慣例的なセクション名である。
最初から予約されていないが、Sambaがプリンタサーバとして機能する時によく使用される慣例的な名前である。
多くのLinuxディストリビューションでは、Windowsクライアント向けのプリンタドライバを格納するために使用される。
このセクション名は、Sambaの特定の機能と密接に関連しているため、多くの設定例や文書で見かけることがある。
ユーザが別の名前を使用することも可能である。
ただし、これらの慣例的な名前を使用することにより、設定の意図が明確になり、他の管理者も理解しやすくなるというメリットがある。
また、一部のSamba関連ツールやスクリプトが、これらの名前を期待している可能性もある。
| キー | 意味 | 
|---|---|
| comment | 共有の説明を提供する。 例: comment = Printer Drivers | 
| path | プリンタドライバやスプーラファイルを格納されているディレクトリのパスを指定する。 例: path = /var/lib/samba/printers | 
| browseable または browsable | この共有がネットワーク上でブラウズ可能かどうかを制御する。 値: yesまたはno例: browseable = yes | 
| guest ok | ゲストユーザのアクセスを許可するかどうかを指定する。 値: yesまたはno例: guest ok = no | 
| read only | 共有を読み取り専用にするかどうかを指定する。 一般ユーザがプリンタドライバファイルを変更できないようにするため、通常、 yesに設定する。値: yesまたはno例: read only = yes | 
| write list | 共有への書き込み権限を持つユーザやグループを指定する。 例: write list = @printadmin | 
| create mask | 新しく作成されるファイルのパーミッションを指定する。 値: 8進数のパーミッション値 例: create mask = 0644 | 
| directory mask | 新しく作成されるディレクトリのパーミッションを指定する。 値: 8進数のパーミッション値 例: directory mask = 0755 | 
| writable | [print$]セクションでは一般的には使用されない。 代わりに、 read only = yesキーとwrite listキーの組み合わせを使用して、特定のユーザにのみ書き込み権限を与えることが一般的である。 共有への書き込みを許可するかどうかを指定する。(read onlyの逆である) | 
| hide files | プリンタドライバーファイルを隠す必要性は無いため、[print$]セクションでは一般的には使用されない。 特定のファイルやディレクトリを非表示にする。 | 
| veto files | プリンタドライバファイルの中で特定のファイルを拒否する必要性は無いため、[print$]セクションでは一般的には使用されない。 アクセスを拒否するファイルパターンを指定する。 | 
| printer admin | 古いバージョンのSambaで使用されていが、現在は使用されない。 代わりに、 write listキーが推奨される。プリンタ管理者として指定するユーザやグループを設定する。 | 
| valid users | [print$]セクションで使用されることがあるが、一般的ではない。 多くの場合、アクセス制御は read onlyキーとwrite listキーの組み合わせで行う。この共有にアクセスできるユーザを指定する。 | 
独自のセクション
以下の例では、ユーザが任意で作成できるセクションの設定を示している。
 # ユーザが任意で指定するセクションの設定例
 
 ; 以下に示す設定では、ユーザは自分のホームディレクトリと所属するグループの共有ディレクトリにアクセスでき、それぞれの領域で読み書きが可能になる
 ; また、ACLの継承により、適切なアクセス権限の管理が容易になる
 
 ; 全ユーザに関する共有設定を定義する
 [users]
 ; この共有の説明文
 ; クライアントがネットワーク上で共有を参照する時に表示される
 comment = All users
 ; この共有のルートディレクトリを指定する
 ; ここでは全ユーザのホームディレクトリがある/homeを指定する。
 path = /home
 ; この設定により、ユーザは共有内のファイルを編集・削除・作成できる
 ; Noは書き込み可能を意味する
 read only = No
 ; 新しく作成されたファイルやディレクトリが、親ディレクトリのACL (アクセス制御リスト) を継承することを指定する
 inherit acls = Yes
 ; これらのファイルやディレクトリをクライアントから非表示にする
 ; この設定例では、quotaファイル、groupsディレクトリ、sharesディレクトリを非表示にしている
 veto files = /aquota.user/groups/shares/
 
 ; グループに関する共有設定を定義する
 [groups]
 ; この共有の説明文
 ; クライアントがネットワーク上で共有を参照する時に表示される
 comment = All
 ; グループ共有のルートディレクトリを指定する
 groups path = /home/groups
 ; ユーザがこの共有内でファイルの編集・削除・作成を行えるようにする
 read only = No
 ; 新しく作成されたファイルやディレクトリが、親ディレクトリのACLを継承することを指定する
 inherit acls = Yes
下表に、ユーザが任意で作成するセクションにおいて、指定できるキーとその値を示す。
| キー | 意味 | 
|---|---|
| path | 共有ディレクトリのパスを指定する。 | 
| comment | コメントを指定する。 | 
| browseable | ブラウジングする時に表示されるかどうかを指定する。 ただし、設定を無効にした場合でも、共有名を直接指定する場合はアクセスすることができる。 | 
| read only | ファイルおよびディレクトリを読み取り専用にする。 | 
| read list | 読み取りが例外的に許可されるユーザを指定する。 (グループを指定する時は@<グループ名>を使用する) | 
| writable | 書き込みを許可するかどうかを指定する。 一般的には read onlyがよく使用されている。 | 
| write list | 書き込みが例外的に許可されるユーザを指定する。 (グループを指定する時は@<グループ名>を使用する) | 
| hide dot files | 隠しファイルおよび隠しディレクトリを表示するかどうかを指定する。 | 
| hide files | 非表示にするファイル名またはディレクトリ名を指定する。 ただし、アクセスは可能である。 | 
| veto files | 表示およびアクセスさせないファイル名およびディレクトリ名を指定する。 | 
| force user | 共有ディレクトリに作成するファイルやディレクトリの所有者または所有グループを、強制的に指定したユーザにする。 これは、他のSambaユーザでログインした場合でも、内部的に force userキーで指定したユーザ名としてログインする。この時、 force userキーで指定したユーザ名のパスワードが求められる。 | 
| force group | 共有ディレクトリに作成するファイルやディレクトリの所有者または所有グループを、強制的に指定したグループにする。 | 
| available valid users | アクセス可能なユーザを指定する。(グループを指定する時は@<グループ名>を使用する) 以下の2つのキーを指定する場合、hogeユーザ以外はログインできない。 
 | 
| guest ok | ゲストログインを許可するかどうかを指定する。 ( publicキーとguest okキーは同じ意味) | 
| public | ゲストログインを許可するかどうかを指定する。 ( publicキーとguest okキーは同じ意味) | 
| create mask | ファイルに適用可能なパーミッションを指定する。(指定しない場合は、0744) | 
| directory mask | ディレクトリに適用可能なパーミッションを指定する。(指定しない場合は、0755) | 
| force create mask | 強制的にファイルに適用されるパーミッションを指定する。(指定しない場合は、0000) | 
| force directory mask | 強制的にディレクトリに適用されるパーミッションを指定する。(指定しない場合は、0000) | 
変数
設定ファイル中に、下表に示す変数を使用することができる。
例えば、オプション"path = /tmp/%u"は、任意のユーザ(hoge)で接続した場合、"path = /tmp/hoge"として解釈される。
| 変数 | 説明 | 
|---|---|
| %S | 現在のサービス名 | 
| %P | 現在のサービスのルートディレクトリ | 
| %u | 現在のサービスのユーザ名 | 
| %g | %uの本来(primary)のグループ名 | 
| %U | セッションのユーザ名 | 
| %G | %Uの本来(primary)のグループ名 | 
| %H | %uで与えられたユーザのホームディレクトリ | 
| %v | Sambaのバージョン | 
| %h | Sambaが動作しているホストの名前 | 
| %m | クライアントPCのNetBIOS名 | 
| %L | サーバのNetBIOS名 | 
| %M | クライアントPCのネットワーク名 | 
| %N | NISのホームディレクトリサーバ名。 Sambaを --with-automountオプションを付加せずにビルドしている場合、この値は%Lと同じになる。 | 
| %p | サーバのホームディレクトリのパス | 
| %R | プロトコルレベル CORE、COREPLUS、LANMAN1、LANMAN2、NT1のうち、いずれかの値を取る。 | 
| %d | 現在のサーバプロセスのプロセスID | 
| %a | リモートPCのアーキテクチャ名。 現状では、Samba、WfWg、WinNT、Win95のいずれか、または、それら以外の場合はUNKNOWNと識別される。 | 
| %I | クライアントPCのIPアドレス | 
| %T | 現在の日付と時刻 | 
マスターブラウザの設定
マスターブラウザは、ワークグループ単位とドメイン単位で存在する。
どのホストがマスターブラウザになるかは、OSの種類による優先度に基づいて選出される。
Samba自身をドメインコントローラにする場合、33以上にすれば優先的に選出される。
| キー | 意味 | 
|---|---|
| local master | ローカルマスターブラウザのブラウザ選出に参加する。(選出されるかどうかは限らない) | 
| domain master | ドメインマスターブラウザに選出されるようになる。 | 
| preferred master | ブラウザ選定を促す。 | 
| os level | 優先度 | 
認証の設定
クライアントがどのようにSambaに応答するかを指定する。
| キー | 意味 | 
|---|---|
| user | ユーザ名とパスワードでローカル認証を行う。(初期設定) | 
| domain master | ドメインマスターブラウザに選出されるようになる。 | 
| share | パスワードだけで認証を行う。 guest ok = yesの設定と共に使用することにより、全てのユーザがゲストアカウントになり、パスワード無しでプリンタを共有する時に使用される。 | 
| domain | ドメインコントローラにより認証を行う。 | 
| server | 他のSMBサーバにより認証を行う。 | 
| ads | ADドメインのドメインコントーローラで認証を行う。 | 
ファイヤーウォールの設定
ファイアーウォールを有効にしている場合は、Sambaサービスの許可が必要である。
Samba / NMBのデフォルトポートは、TCPとUDPの両方を使用する。
これにより、Sambaの完全な機能 (ファイル共有、名前解決、ブラウジング等) を使用するために必要な全てのポートが開放される。
- TCPポート (SMB)
- 445/TCP: SMB (Server Message Block)
- 139/TCP: NetBIOS over TCP/IP
 
- UDPポート (NMB)
- 137/UDP: NetBIOS Name Service
- 138/UDP: NetBIOS Datagram Service
 
# SMB sudo firewall-cmd --permanent --add-service=samba または sudo firewall-cmd --permanent --add-port=445/tcp # SMB (Server Message Block) sudo firewall-cmd --permanent --add-port=139/tcp # NetBIOS over TCP/IP sudo firewall-cmd --reload
# NMB sudo firewall-cmd --permanent --add-service=nmb または sudo firewall-cmd --permanent --add-port=137/udp # NetBIOS Name Service sudo firewall-cmd --permanent --add-port=138/udp # NetBIOS Datagram Service sudo firewall-cmd --reload
SELinuxを有効にしている場合は、SELinuxコンテキストの変更が必要である。
sudo setsebool -P samba_enable_home_dirs on sudo restorecon -R <共有ディレクトリのパス>
SELinuxを一時的に無効にする場合は、以下に示すコマンドを実行する。
sudo setenforce 0
SELinuxを永続的に無効にする場合は、以下に示すコマンドを実行する。
sudo vi /etc/selinux/config
# /etc/selinux/configファイル SELINUX=enforcing
Sambaの起動および停止
Sambaを起動する。
sudo systemctl start smb nmb
もし、ソースコードからSambaをインストールしている場合において、Sambaが起動しない場合、/<Sambaのインストールディレクトリ>/var/run/ncalrpcディレクトリを削除する。
sudo rm -r /<Sambaのインストールディレクトリ>/var/run/ncalrpc
Sambaを再起動する。
sudo systemctl restart smb nmb
Sambaを停止する。
sudo systemctl stop smb nmb
Sambaの管理コマンド
- smbcontrol
- Sambaサーバを構成する各デーモンにメッセージを送信して制御する。
 
- smbstatus
- Sambaサーバに接続されているクライアント、使用中の共有、ロックされているファイルを共有する。
 
- nbmlookup
- NetBIOS名を問い合わせたり、NetBIOS名からIPアドレスを検索する。
 
動作の確認
Windowsからアクセスする場合、エクスプローラまたは[ファイル名を指定して実行]にて、
以下に示すように、IPアドレスまたはホスト名を入力して、共有ディレクトリが表示できるか確認する。
\\<サーバのIPアドレス> または \\<サーバのホスト名>
Sambaへのユーザ登録
Sambaは独自でユーザの管理をするので、Sambaへのユーザ登録をすることができる。
Sambaと通常サーバは、別々にユーザを管理するが、同一のユーザ名とパスワードで問題ない。
クライアントからSambaにアクセスしたときに、認証画面において、ユーザ名とパスワードを入力することになる。
Sambaのユーザ名とパスワードを登録する方法を、以下に示す。
ただし、登録できるユーザは、既にサーバに存在するユーザのみである。
また、Sambaのユーザ登録のコマンドは、Samba2.xではsmbpasswdコマンド、Samba3.xではpdbeditコマンドとなる。
# Sambaのユーザ名の一覧を表示 sudo pdbedit -L # 詳細なユーザ名の一覧を表示 sudo pdbedit -vL # smbpasswdスタイルでSambaのユーザ名の一覧を表示 sudo pdbedit -wL # ユーザを登録する (パスワードを2回入力して設定する) sudo pdbedit -a <ユーザ名> # Sambaのユーザを削除する sudo pdbedit -x <ユーザ名>
Sambaユーザのパスワードを変更する場合、smbpasswdコマンドを使用する。
sudo smbpasswd <ユーザ名>
次に、/etc/samba/smb.confファイルを以下のように編集する。
sudo vi /etc/samba/smb.conf
# /etc/samba/smb.confファイル public = no # force user = pi # コメントする valid users = <登録するユーザ名>
最後に、Sambaを再起動する。
sudo systemctl restart smbd sudo systemctl restart nmbd
Sambaユーザのパスワードがサーバとは別管理になる理由は、
Linuxのパスワード管理の暗号化方式と、Sambaのパスワード管理の暗号化方式が異なるためである。
Sambaは、Windowsのパスワード管理の暗号化に合わせているため、同一のユーザ名とパスワードであっても、Sambaに登録をする。
暗号化方式を統一することもできるが、セキュリティ面から標準の設定の方がよい。
設定ファイルの確認
Sambaの設定ファイルの構文チェックを行い、エラーや警告を表示する。
testparmコマンドを実行すると、設定ファイルの内容が解析されて、問題がある場合はエラーメッセージが表示される。
正常な場合は、設定の概要が表示される。
testparm # 特定の場所にあるSambaの設定ファイルを確認する場合 testparm /etc/samba/smb.conf