インストール - Samba

提供:MochiuWiki : SUSE, EC, PCB
2022年11月5日 (土) 09:28時点におけるWiki (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

概要

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のインストール

パッケージ管理システムからインストール

最新パッケージリストを取得する。

# CentOS
sudo yum update

# SUSE
sudo zypper update

# Raspberry Pi
sudo apt-get update


Sambaをインストールする。

# CentOS
sudo yum install samba samba-client

# SUSE
sudo zypper install samba samba-client

# Raspberry Pi
sudo apt-get install samba


ソースコードからインストール

Sambaのビルドに必要なライブラリをインストールする。
Kerberos 1.15.1以降が必要となることに注意する。

# CentOS
sudo yum 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 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 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-get 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サイトにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf samba-<バージョン>.tar.gz
cd samba-<バージョン>


Sambaをビルドおよびインストールする。
ビルドディレクトリを作成する場合、Sambaのビルドに失敗することに注意する。

./configure --prefix=<Sambaのインストールディレクトリ> --enable-cups --with-systemd --systemd-install-services
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
   read only = No
   inherit acls = Yes
   veto files = /aquota.user/groups/shares/

[groups]
   comment = All groups
   path = /home/groups
   read only = No
   inherit acls = Yes
   guest ok = No

# 共有名が存在するプリンタ (ユーザ名はprintcap)
# サービスにゲストのアクセス許可が無く、クライアントからユーザ名が与えられていない場合は、ユーザ名はプリンタの名前に設定される
[printers]
   comment = All Printers
   path = /var/tmp
   printable = Yes # プリンタ共有として利用する
   print ok = Yes  # プリンタ共有として利用する
   create mask = 0600
   browseable = No

# 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 = <グループ名> # 共有内に作成するファイルおよびディレクトリにおいて、所有グループを強制的に指定したグループにする
  #veto files = <ファイル名およびディレクトリ名>     # 表示およびアクセスさせないファイルやディレクトリを指定する
  #hide dot files = No # 隠し属性を適用するかどうかを指定する
  #hide files = <ファイル名およびディレクトリ名>  # ファイルおよびディレクトリを表示させないファイル名またはディレクトリ名を指定する
                                         # ただし、アクセスは可能である
  #available = Yes
  #valid users = <Sambaのユーザ名1またはグループ名1> <Sambaのユーザ名2またはグループ名2> ...  # アクセス可能なユーザを指定する (グループを指定する時は@<グループ名>を使用する)


Sambaの設定ファイルが正常に設定されているかどうかを確認する。

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



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

ファイアーウォールを有効にしている場合は、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 <共有ディレクトリのパス>



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



動作の確認

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に登録をする。

暗号化方式を統一することもできるが、セキュリティ面から標準の設定の方がよい。