「インストール - Samba」の版間の差分
| 158行目: | 158行目: | ||
inherit acls = Yes | inherit acls = Yes | ||
guest ok = No | guest ok = No | ||
[profiles] | [profiles] | ||
comment = Network Profiles Service | comment = Network Profiles Service | ||
| 166行目: | 167行目: | ||
directory mask = 0700 | directory mask = 0700 | ||
guest ok = No | guest ok = No | ||
[users] | [users] | ||
comment = All users | comment = All users | ||
| 172行目: | 174行目: | ||
inherit acls = Yes | inherit acls = Yes | ||
veto files = /aquota.user/groups/shares/ | veto files = /aquota.user/groups/shares/ | ||
[groups] | [groups] | ||
comment = All groups | comment = All groups | ||
| 178行目: | 181行目: | ||
inherit acls = Yes | inherit acls = Yes | ||
guest ok = No | guest ok = No | ||
# 共有名が存在するプリンタ (ユーザ名はprintcap) | |||
# サービスにゲストのアクセス許可が無く、クライアントからユーザ名が与えられていない場合は、ユーザ名はプリンタの名前に設定される | |||
[printers] | [printers] | ||
comment = All Printers | comment = All Printers | ||
path = /var/ | path = /var/spool/lpdz | ||
printable = Yes | printable = Yes # プリンタ共有として利用する | ||
print ok = No # プリンタ共有として利用する | |||
create mask = 0600 | create mask = 0600 | ||
browseable = No | browseable = No | ||
# Windowsがプリンタドライバの自動ダウンロードを行う際の共有名を指定する特殊なセクション | # Windowsがプリンタドライバの自動ダウンロードを行う際の共有名を指定する特殊なセクション | ||
2022年11月5日 (土) 06:03時点における版
概要
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の設定ファイルを作成する。
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アドレスまたはドメイン名 例. 192.168.1. 127.0. 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/spool/lpdz
printable = Yes # プリンタ共有として利用する
print ok = No # プリンタ共有として利用する
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のSystemdサービスファイルを、/etc/systemd/systemディレクトリにコピーする。
sudo cp /<Sambaのインストールディレクトリ>/lib/systemd/system/* /etc/systemd/system
SambaのSystemdサービスファイルを読み込む。
sudo systemctl daemon-reload
Sambaを起動する。
sudo systemctl start smb nmb
もし、Sambaが起動しない場合、/<Sambaのインストールディレクトリ>/var/run/ncalrpcディレクトリを削除する。
sudo rm -r /<Sambaのインストールディレクトリ>/var/run/ncalrpc
Sambaの設定
ホームディレクトリにSambaで使用する共有ディレクトリを作成する。
mkdir ~/Common
Samba の設定ファイルであるsmb.confを編集する。
sudo vi /etc/samba/smb.conf
smb.confの末尾に以下の記述を追加して保存する。
# [global]セクションの直下に、以下の2行を追記する unix charset = UTF-8 dos charset = CP932 # [global]セクションのworkgroupキー # ドメインを設定している場合は変更する workgroup = WORKGROUP # [global]セクションのhosts allowキーおよび各共有設定のセクションに追記 # アクセス制限を行う場合は、アクセスを許可するIPアドレスを指定する hosts allow = 192.168.2. 192.168.1.20/24 # 126行目あたり : 認証なしでアクセスする場合は追記する security = <ユーザ名> passdb backend = tdbsam map to guest = Bad User # 末尾に以下を追記する [Common] comment = Shared Directory on Samba path = /home/<ユーザ名>/Common read only = no browsable = yes public = no guest ok = no available = yes valid users = <Sambaに登録したユーザ名1> <Sambaに登録したユーザ名2> <Sambaに登録したユーザ名3> ... #force user = <サーバのユーザ名>
設定項目の意味を、以下に示す。
- available, valid users
- 以下の2つをセットで設定する時、hogeユーザ以外はログインできない。
- available = yes
- valid users = hoge
- force user
- どのユーザでログインしても、内部的にhogeでログインして接続する。この時、そのユーザ名とパスワードが求められる。
- force user = hoge
- public, guest ok
- パスワードなしでアクセスするためguestを許可する。publicキーとguest okキーは同じ意味のキーである。
- public = yes
- guest ok = yes
- 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.x系では、Bad Uidがデフォルトとして設定されている。
Sambaを再起動する。
sudo systemctl restart smbd sudo systemctl restart nmbd
ファイアーウォールを有効にしている場合は、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 /home/<ユーザ名>/Common
動作の確認
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に登録をする。
暗号化方式を統一することもできるが、セキュリティ面から標準の設定の方がよい。