「インストール - Samba」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
380行目: 380行目:
</center>
</center>
<br>
<br>
==== [homes]セクション ====
ユーザのホームディレクトリを自動的に共有するために使用される特別なセクションである。<br>
<br>
[homes]セクションは特別な意味を持つため、一部のオプションは通常のセクションとは異なる振る舞いをすることがある。<br>
例えば、valid users = %S は、現在接続しているユーザのみがそのホームディレクトリにアクセスできるようにする。<br>
<br>
ただし、必ずしも全てのsmb.confファイルに存在するわけではない。<br>
<br>
<center>
{| class="wikitable" | style="background-color:#fefefe;"
|+ [homes]セクションの設定項目
|-
! style="background-color:#66CCFF;" | キー
! style="background-color:#66CCFF;" | 意味
|-
| path || ホームディレクトリの基本パスを指定する。<br><br>例: path = /home/%S
|-
| browseable || この共有をネットワーク上で表示するかどうかを制御する。<br>値: <code>yes</code> または <code>no</code><br><br>例: browseable = no
|-
| read only || 共有を読み取り専用にするかどうかを指定する。<br>値: <code>yes</code> または <code>no</code><br><br>例: read only = no
|-
| create mask || 新しく作成されるファイルのパーミッションを指定する。<br>値: 8進数のパーミッション値<br><br>例: create mask = 0700
|-
| directory mask || 新しく作成されるディレクトリのパーミッションを指定する。<br>値: 8進数のパーミッション値<br><br>例: directory mask = 0700
|-
| valid users || この共有にアクセスできるユーザを指定する。<br><br>例: valid users = %S
|-
| guest ok || ゲストユーザのアクセスを許可するかどうかを指定する。<br>値: <code>yes</code> または <code>no</code><br><br>例: guest ok = no
|-
| writable || ユーザに書き込み権限を与えるかどうかを指定する。<br>値: <code>yes</code> または <code>no</code><br><br>例: writable = yes
|-
| veto files || アクセスを拒否するファイルパターンを指定する。<br><br>例: veto files = /.*/.*/
|-
| hide files || 特定のファイルやディレクトリを非表示にする。<br><br>例: hide files = /lost+found/*/
|-
| follow symlinks || シンボリックリンクをたどるかどうかを指定する。<br>値: <code>yes</code> または <code>no</code><br><br>例: follow symlinks = yes
|-
| strict sync || 同期書き込みを厳密に行うかどうかを指定する。<br>値: <code>yes</code> または <code>no</code><br><br>例: strict sync = no
|-
| case sensitive || ファイル名の大文字小文字を区別するかどうかを指定する。<br>値: <code>yes</code> または <code>no</code> または <code>auto</code><br><br>例: case sensitive = auto
|-
| hide dot files || ドットで始まるファイルを隠すかどうかを指定する。<br>値: <code>yes</code> または <code>no</code><br><br>例: hide dot files = yes
|-
| dos filetimes || DOSスタイルのファイルタイムスタンプを使用するかどうかを指定する。<br>値: <code>yes</code> または <code>no</code><br><br>例: dos filetimes = yes
|}
</center>


==== [printers]セクション ====
==== [printers]セクション ====

2024年9月7日 (土) 17:25時点における版

概要

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 ファイル共有


参考書
81wRPjbdhML._SL1500_.jpg
Samba[実践]入門
サーバ構築の実例がわかる



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
 
 # 個々のユーザごとのホームディレクトリを共有するための設定を定義する
 # ユーザ名ごとに適用するプロファイルや追加の設定を指定できる
 # 各ユーザは自分のホームディレクトリにアクセスでき、他のユーザのホームディレクトリにはアクセスできない
 [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は現在のユーザ名に置き換えられる
 
 # グループ単位で共有フォルダを設定する
 # 特定のグループに属するユーザがアクセスできる共有フォルダを定義する
 [groups]
    comment = All groups
    path = /srv/samba/groups/%G  # 共有フォルダのパスを指定する
                                 # 例えば、%Gは現在のグループ名に置き換えられる
    read only = No
    create mask = 0770           # 新しいファイルが作成されたときのデフォルトのアクセス許可を指定する
    directory mask = 0770        # 新しいディレクトリが作成されたときのデフォルトのアクセス許可を指定する
    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
 
 # 任意の共有ディレクトリ
 [<共有ディレクトリ名  例. 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の設定ファイルが正常に設定されているかどうかを確認する。

cd <Sambaのインストールディレクトリ>
sudo ./testparm



Sambaの設定項目

[global]セクション

Sambaサーバ全体に適用される設定を記述する特殊なセクションである。

[global]セクションの設定項目
キー 意味
server string サーバ名前等の説明を記述する。

ブラウズリストでコンピュータ名の隣、および、プリンタマネージャにおけるプリンタのコメント欄等に表示される。

netbios name SambaサーバのNetBIOS名を指定する。
workgroup Sambaサーバが、所属するワークグループ名もしくはドメイン名を指定する。
server role Sambaサーバーの動作モードを指定します。
hosts allow 接続を許可するIPアドレスまたはホスト名を指定する。(未指定のIPアドレスまたはホスト名は拒否される)

  • 例1. 指定したIPアドレスの範囲内にあるPCからのアクセスを許可する場合
    192.168.1. 127.0.

  • 例2. 指定したIPアドレスとサブネットマスクの組み合わせの範囲内にあるPCからのアクセスを許可する場合
    192.168.1.20/24 192.168.1.30/255.255.255.0

  • 例3. 指定したドメインの範囲内にあるPCからのアクセスを許可する場合
    myhost.mynet.edu.au

  • 例4. 192.168.* 内の全てのIPアドレスを許可、ただし、192.168.1.30は禁止する場合
    192.168.* EXCEPT 192.168.1.30
guest account アカウントが存在しないユーザはゲストとしてアクセスできる。
nobody以外を使用する場合は、予め、/etc/passwdファイルに該当ユーザを作成する必要がある。
Bad User 存在しないユーザがアクセスする場合は、ゲスト認証であるとみなして、guest accountキーで定義されたユーザでログインする。
Bad Password 上記に加えて、パスワード入力ミスの場合もゲスト認証であるとみなす。
Never ゲスト認証を許可しない。
map to guest Sambaユーザとして認証できない場合の動作を指定する。

設定値
  • Never
    不正なパスワードによるユーザのログイン要求を拒否して、ゲスト認証は許可しない。
  • Bad User
    存在するユーザに対する不正なパスワードによるログイン要求は拒否する。
    存在しないユーザを指定された場合は、ゲスト認証であるとみなして、guest accountパラメータに定義されたユーザでログインする。
  • Bad Password
    存在しないユーザを指定された場合に加えて、存在するユーザに対する不正なパスワードによるログイン要求も、ゲスト認証であるとみなして、
    guest accountキーに定義されたユーザでログインする。
  • Bad Uid
    Sambaがドメインモードのセキュリティで構成されている環境において、認証が成功したにも関わらずUnix側のユーザアカウントが存在しない場合、
    guest accountキーで定義されたユーザでログインする。

    ただし、SambaでWinBinddが機能している場合、WindowsユーザがUnixのユーザとして動作できるようになるため、
    認証に成功したにも関わらずUnix側のユーザアカウントが存在しない、ということは発生しない。
    そのため、winbinddが機能するSamba 3以降ではBad Uidはほとんど利用されていない。

    なお、Samab 2では、Bad Uidがデフォルトとして設定されている。
log file ログファイルのパスを指定する。
接続元ホストを示す変数%mを使用する場合、接続元ホストごとにログファイルを分けることができる。
max log size ログファイルの最大サイズを指定する。
値が0の場合は、サイズは無制限となる。
smb passwd file smbpasswd方式でパスワード認証を行う場合のパスワードファイルのパスを指定する。
unix password sync SambaのパスワードとLinuxのパスワードを同期させるかどうかを指定する。
この設定を有効にする場合、Sambaのパスワードを変更した後、Linuxユーザのパスワードも変更する必要がある。
passwd program unix password syncキーを有効にした場合、Samba側でパスワードを変更した後に実行するプログラムを指定する。
passwd chat unix password syncキーを有効にした場合の応答内容を指定する。
username map Linuxユーザを別のユーザとマッピングさせて、複数のユーザで共有する。
logon script ログイン時に実行するスクリプトファイルを指定する。
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]セクションは特別な意味を持つため、一部のオプションは通常のセクションとは異なる振る舞いをすることがある。
例えば、valid users = %S は、現在接続しているユーザのみがそのホームディレクトリにアクセスできるようにする。

ただし、必ずしも全てのsmb.confファイルに存在するわけではない。

[homes]セクションの設定項目
キー 意味
path ホームディレクトリの基本パスを指定する。

例: path = /home/%S
browseable この共有をネットワーク上で表示するかどうかを制御する。
値: yes または no

例: browseable = no
read only 共有を読み取り専用にするかどうかを指定する。
値: yes または no

例: read only = no
create mask 新しく作成されるファイルのパーミッションを指定する。
値: 8進数のパーミッション値

例: create mask = 0700
directory mask 新しく作成されるディレクトリのパーミッションを指定する。
値: 8進数のパーミッション値

例: directory mask = 0700
valid users この共有にアクセスできるユーザを指定する。

例: valid users = %S
guest ok ゲストユーザのアクセスを許可するかどうかを指定する。
値: yes または no

例: guest ok = no
writable ユーザに書き込み権限を与えるかどうかを指定する。
値: yes または no

例: writable = yes
veto files アクセスを拒否するファイルパターンを指定する。

例: veto files = /.*/.*/
hide files 特定のファイルやディレクトリを非表示にする。

例: hide files = /lost+found/*/
follow symlinks シンボリックリンクをたどるかどうかを指定する。
値: yes または no

例: follow symlinks = yes
strict sync 同期書き込みを厳密に行うかどうかを指定する。
値: yes または no

例: strict sync = no
case sensitive ファイル名の大文字小文字を区別するかどうかを指定する。
値: yes または no または auto

例: case sensitive = auto
hide dot files ドットで始まるファイルを隠すかどうかを指定する。
値: yes または no

例: hide dot files = yes
dos filetimes DOSスタイルのファイルタイムスタンプを使用するかどうかを指定する。
値: yes または no

例: dos filetimes = yes

[printers]セクション

Sambaで利用可能な全てのプリンタを共有するための特別なセクションである。
このセクションを使用する場合、システムに設定されているプリンタが自動的に共有される。

[printers]セクションの設定項目
キー 意味
path スプールファイルを保存するディレクトリを指定する。

例: path = /var/spool/samba
browseable プリンタ共有をネットワーク上で表示するかどうかを制御する。

値: yes または no

例: browseable = yes
guest ok ゲストユーザのアクセスを許可するかどうかを指定する。
値: yes または no

例: guest ok = no
create mode 新しく作成されるファイルのパーミッションを指定する。

例: create mode = 0700
force group ファイル作成時に使用するグループを指定する。

例: force group = lp
valid users この共有にアクセスできるユーザを指定する。

例: valid users = @printusers, @staff
write list 共有への書き込み権限を持つユーザやグループを指定する。

例: write list = @printadmin
print ok この共有をプリンタ共有として使用可能にするかどうかを指定する。
[printers]セクションでは、一般的に、yesに設定する。
値: yes または no

例: print ok = yes

※注意
このオプションは、printableキーの別名である。
どちらを使用しても同じ効果がある。
printable この共有をプリンタ共有として使用可能にするかどうかを指定する。
[printers]セクションでは、一般的に、yesに設定する。
値: yes または no

例: print ok = yes

※注意
このオプションは、printableキーの別名である。
どちらを使用しても同じ効果がある。
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 システムに設定されている全てのプリンタを自動的に共有するかどうかを指定する。
値: yes または no

例: load printers = yes
printing 使用する印刷システムを指定する。
値: CUPS, BSD, SYSV, LPRNG, PLP, LPRNT, QNX

例: printing = CUPS
printer admin プリンタ管理者として指定するユーザやグループを設定する。

例: printer admin = @ntadmin
min print space 印刷を許可するために必要な最小のディスク空き容量を指定する。

例: min print space = 2000
use client driver クライアント側のプリンタドライバを使用するかどうかを指定する。
値: yes または no

例: use client driver = no


[print$]セクション

プリンタドライバの格納場所を指定する特別なセクションである。

[print$]セクションの設定項目
キー 意味
path プリンタドライバやスプーラファイルを格納するディレクトリのパスを指定する。

例: path = /var/lib/samba/printers
browseable
または
browsable
この共有がネットワーク上で表示されるかどうかを制御する。
値: yes または no

例: browseable = yes
guest ok ゲストユーザのアクセスを許可するかどうかを指定する。
値: yes または no

例: guest ok = no
read only 共有を読み取り専用にするかどうかを指定する。
値: yes または no

例: read only = yes
writable 共有への書き込みを許可するかどうかを指定する。(read onlyの逆である)
値: yes または no

例: writable = no
create mask 新しく作成されるファイルのパーミッションを指定する。
値: 8進数のパーミッション値

例: create mask = 0644
directory mask 新しく作成されるディレクトリのパーミッションを指定する。
値: 8進数のパーミッション値

例: directory mask = 0755
force user ファイル作成時に使用するユーザを指定する。
値: <ユーザ名>

例: force user = smbuser
force group ファイル作成時に使用するグループを指定する。
値: <グループ名>

例: force group = printadmin
hide files 特定のファイルやディレクトリを非表示にする。
値: 非表示にするファイルやディレクトリのパターン

例: hide files = /tmp*/
veto files アクセスを拒否するファイルパターンを指定する。
値: 拒否するファイルのパターン

例: veto files = /.exe/.com/*.dll/
comment 共有の説明を提供する。

例: comment = Printer Drivers
printer admin プリンタ管理者として指定するユーザやグループを設定する。

例: printer admin = @ntadmin
valid users この共有にアクセスできるユーザを指定する。

例: valid users = @printusers, @staff
write list 共有への書き込み権限を持つユーザやグループを指定する。

例: write list = @printadmin


その他のセクション

その他のセクションの設定項目
キー 意味
path 共有ディレクトリのパスを指定する。
comment コメントを指定する。
browseable ブラウジングする時に表示されるかどうかを指定する。
ただし、設定を無効にした場合でも、共有名を直接指定する場合はアクセスすることができる。
read only ファイルおよびディレクトリを読み取り専用にする。
read list 読み取りが例外的に許可されるユーザを指定する。
(グループを指定する時は@<グループ名>を使用する)
writable 書き込みを許可するかどうかを指定する。
write list 書き込みが例外的に許可されるユーザを指定する。
(グループを指定する時は@<グループ名>を使用する)
hide dot files 隠しファイルおよび隠しディレクトリを表示するかどうかを指定する。
hide files 非表示にするファイル名またはディレクトリ名を指定する。
ただし、アクセスは可能である。
veto files 表示およびアクセスさせないファイル名およびディレクトリ名を指定する。
force user 共有ディレクトリに作成するファイルやディレクトリの所有者または所有グループを、強制的に指定したユーザにする。

これは、他のSambaユーザでログインした場合でも、内部的にforce userキーで指定したユーザ名としてログインする。
この時、force userキーで指定したユーザ名のパスワードが求められる。
force group 共有ディレクトリに作成するファイルやディレクトリの所有者または所有グループを、強制的に指定したグループにする。
available
valid users
アクセス可能なユーザを指定する。(グループを指定する時は@<グループ名>を使用する)

以下の2つのキーを指定する場合、hogeユーザ以外はログインできない。
  • available = yes
  • valid users = 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に応答するかを指定する。

認証の設定 (securityセクション)
キー 意味
user ユーザ名とパスワードでローカル認証を行う。(初期設定)
domain master ドメインマスターブラウザに選出されるようになる。
share パスワードだけで認証を行う。
guest ok = yesの設定と共に使用することにより、全てのユーザがゲストアカウントになり、パスワード無しでプリンタを共有する時に使用される。
domain ドメインコントローラにより認証を行う。
server 他のSMBサーバにより認証を行う。
ads ADドメインのドメインコントーローラで認証を行う。



ファイヤーウォールの設定

ファイアーウォールを有効にしている場合は、Sambaサービスの許可が必要である。

sudo firewall-cmd --permanent --add-service=samba
または
sudp firewall-cmd --permanent --add-port=445/tcp

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