Samba 4.2.3をCentOS 7.2にインストールしてファイルサーバとして設定
目次
概要
家庭内や企業内で利用することを想定したファイルサーバを構築します。 ソフトウェアにはCentOS 7.2に同梱されているSamba 4.2.3を利用します。 ファイルサーバとして準備する共有フォルダは以下の3種類とします。
- 登録ユーザ向け共有フォルダ ・・・Sambaにアカウントを持つ人のみが読み書き可能
- 全ユーザ向け共有フォルダ ・・・ファイルサーバと同じネットワーク上の人は誰でも読み書き可能
- 個人向けホームディレクトリ ・・・Sambaにアカウントを持つ人でかつ、本人のみが読み書き可能
構成
サーバ構成
OSバージョン
CentOS 7.2.1511 x86_64
ソフトウェア・パッケージ一覧
- samba-4.2.3-10.el7.x86_64.rpm
- samba-common-4.2.3-10.el7.noarch.rpm
- samba-common-libs-4.2.3-10.el7.x86_64.rpm
- samba-common-tools-4.2.3-10.el7.x86_64.rpm
- samba-libs-4.2.3-10.el7.x86_64.rpm
- samba-client-libs-4.2.3-10.el7.x86_64.rpm
- libwbclient-4.2.3-10.el7.x86_64.rpm
- libtdb-1.3.6-2.el7.x86_64.rpm
- libldb-1.1.20-1.el7.x86_64.rpm
- pytalloc-2.1.2-1.el7.x86_64.rpm
クライアント構成
OSバージョン
Windows 7 Ultimate Service Pack 1 64bit
環境構築
インストール
Sambaに必要なパッケージを依存パッケージ含めてインストールします。 DVDドライブにCentOS 7.2のインストールメディアを挿入した後に、下記コマンドを実行します。
# mount /dev/cdrom /media/cdrom # cd /media/cdrom/Packages/ # rpm -ihv samba-4.2.3-10.el7.x86_64.rpm samba-common-4.2.3-10.el7.noarch.rpm \ > samba-common-libs-4.2.3-10.el7.x86_64.rpm samba-common-tools-4.2.3-10.el7.x86_64.rpm \ > samba-libs-4.2.3-10.el7.x86_64.rpm samba-client-libs-4.2.3-10.el7.x86_64.rpm \ > libwbclient-4.2.3-10.el7.x86_64.rpm libtdb-1.3.6-2.el7.x86_64.rpm \ > libldb-1.1.20-1.el7.x86_64.rpm pytalloc-2.1.2-1.el7.x86_64.rpm 警告: samba-4.2.3-10.el7.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID f4a80eb5: NOKEY 準備しています... ################################# [100%] 更新中 / インストール中... 1:libtdb-1.3.6-2.el7 ################################# [ 10%] 2:libldb-1.1.20-1.el7 ################################# [ 20%] 3:pytalloc-2.1.2-1.el7 ################################# [ 30%] 4:samba-libs-0:4.2.3-10.el7 ################################# [ 40%] 5:samba-common-tools-0:4.2.3-10.el7################################# [ 50%] 6:samba-common-0:4.2.3-10.el7 ################################# [ 60%] 7:libwbclient-0:4.2.3-10.el7 ################################# [ 70%] 8:samba-client-libs-0:4.2.3-10.el7 ################################# [ 80%] 9:samba-common-libs-0:4.2.3-10.el7 ################################# [ 90%] 10:samba-0:4.2.3-10.el7 ################################# [100%] # cd / # umount /media/cdrom
設定
Linuxグループの作成
個人ユーザ用のグループとして samba-grp を、共有のゲストユーザ用のグループとして guest01 を作成します。
# groupadd -g 10001 samba-grp ←個人ユーザ用グループ # groupadd -g 11001 samba-gst ←ゲストユーザ用グループ # tail -n 2 /etc/group samba-grp:x:10001: samba-gst:x:11001:
Linuxユーザの作成
ファイルサーバへアクセスする際のユーザを作成します。 ここでは個人用ユーザとして user01 と user02 を作成し、共有のゲストユーザとして guest01 を作成します。 Linuxユーザは後で作成するSambaユーザとマッピングされて、ファイルを読み書きする際のパーミッション設定などで 使われるだけなので、パスワードは設定する必要ありません。
# useradd -u 10001 -g 10001 user01 ←個人ユーザ # useradd -u 10002 -g 10001 user02 ←個人ユーザ # useradd -u 11001 -g 11001 guest01 ←ゲストユーザ # tail -n 3 /etc/passwd user01:x:10001:10001::/home/user01:/bin/bash user02:x:10002:10001::/home/user02:/bin/bash guest01:x:11001:11001::/home/guest01:/bin/bash
ディレクトリの作成
ファイルサーバとしてファイルを保存するためのディレクトリを作成します。 登録されたユーザが参照、保存可能な /data/samba-private ディレクトリと ゲストユーザ(全ユーザ)が参照、保存可能な /data/samba-public ディレクトリを作成します。 個人専用のホームディレクトリは、Linuxユーザ作成時に自動で作成される /home/ユーザ名 ディレクトリを利用しますので個別には作成しません。
# cd / # mkdir -m 777 data # cd /data/ # mkdir -m 775 samba-private ←登録ユーザ用共有フォルダ(ゲストユーザは不可) # chgrp samba-grp samba-private # mkdir -m 775 samba-pubic ←全ユーザ用共有フォルダ(ゲストユーザも可) # chgrp samba-gst samba-public # ls -ld samba-* drwxrwxr-x 2 root samba-grp 26 3月 28 23:48 samba-private drwxrwxr-x 2 root samba-gst 6 3月 30 23:22 samba-public
Sambaの設定ファイル作成
Sambaの設定ファイルを作成します。 Sambaのパッケージをインストールすると設定ファイルが自動で生成されますが、 コメントや不要な設定が多くて可読性が悪いので、バックアップして新規に作成します。
# cd /etc/samba/ # mv smb.conf samba.conf.bk20160328 ←デフォルトの設定ファイルはバックアップしておく # vi smb.conf ←ファイルを新規作成
※以下の内容でファイルを新規作成※
[global]
dos charset = CP932
unix charset = UTF-8
workgroup = WORKGROUP
netbios name = SAMBA-SERVER
map to guest = bad user
guest account = guest01
interfaces = 192.168.0.104 172.0.0.1
bind interfaces only = yes
socket address = 192.168.0.255
printcap name = /dev/null
log level = 1
[homes]
browseable = no
writeable = yes
valid users = %S
[private]
path = /data/samba-private
hosts allow = 192.168.0.0/255.255.255.0 EXCEPT 192.168.0.1
write list = @samba-grp
valid users = @samba-grp
writeable = yes
force group = samba-grp
force create mode = 664
force directory mode = 775
[public]
path = /data/samba-public
writeable = yes
guest ok = yes
guest only = yes
Sambaの設定ファイルチェック
作成した設定ファイルに構文エラーがないかをチェックします。 testparm コマンドを実行すると、/etc/samba/smb.conf ファイルが自動でチェックされ、 問題があれば表示されます。
※以下では警告が1件表示されていますが、現状対応が分からないのでそのままにしてありますが、 動作上は問題ないように見えています。分かり次第修正します。
# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
WARNING: The "socket address" option is deprecated
Processing section "[homes]"
Processing section "[private]"
Processing section "[public]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions ←[Enter]キーを押す
# Global parameters
[global]
dos charset = CP932
netbios name = SAMBA-SERVER
interfaces = 192.168.0.104 172.0.0.1
bind interfaces only = Yes
map to guest = Bad User
guest account = guest01
printcap name = /dev/null
nbt client socket address = 192.168.0.255
idmap config * : backend = tdb
[homes]
valid users = %S
read only = No
browseable = No
[private]
path = /data/samba-private
valid users = @samba-grp
write list = @samba-grp
force group = samba-grp
read only = No
force create mode = 0664
force directory mode = 0775
hosts allow = 192.168.0.0/255.255.255.0 EXCEPT 192.168.0.1
[public]
path = /data/samba-public
read only = No
guest only = Yes
guest ok = Yes
自動起動設定
Sambaのサービスである smb と nmb を自動起動するように設定します。 前後でステータスを表示して設定が変わったことを確認します。
# systemctl status smb ● smb.service - Samba SMB Daemon Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled) Active: inactive (dead) # systemctl status nmb ● nmb.service - Samba NMB Daemon Loaded: loaded (/usr/lib/systemd/system/nmb.service; disabled; vendor preset: disabled) Active: inactive (dead) # systemctl enable smb ←smbを自動起動に設定する Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service. # systemctl enable nmb ←nmbを自動起動に設定する Created symlink from /etc/systemd/system/multi-user.target.wants/nmb.service to /usr/lib/systemd/system/nmb.service. # systemctl status smb ● smb.service - Samba SMB Daemon Loaded: loaded (/usr/lib/systemd/system/smb.service; enabled; vendor preset: disabled) ←enableになった Active: inactive (dead) # systemctl status nmb ● nmb.service - Samba NMB Daemon Loaded: loaded (/usr/lib/systemd/system/nmb.service; enabled; vendor preset: disabled) ←enableになった Active: inactive (dead)
Sambaデーモン起動
一通り設定が終わったので、Samba(smbとnmbのサービス)を起動します。
# systemctl start smb ←smbを起動 # systemctl start nmb ←nmbを起動 # systemctl status smb ● smb.service - Samba SMB Daemon Loaded: loaded (/usr/lib/systemd/system/smb.service; enabled; vendor preset: disabled) Active: active (running) since 木 2016-03-31 00:11:01 JST; 5s ago Main PID: 2989 (smbd) Status: "smbd: ready to serve connections..." CGroup: /system.slice/smb.service tq2989 /usr/sbin/smbd mq2991 /usr/sbin/smbd 3月 31 00:11:01 rah81s1 systemd[1]: Starting Samba SMB Daemon... 3月 31 00:11:01 rah81s1 systemd[1]: smb.service: Supervising process 2989 which is not our child. We'll most likely not notice ...t exits. 3月 31 00:11:01 rah81s1 smbd[2989]: [2016/03/31 00:11:01.374114, 0] ../lib/util/become_daemon.c:124(daemon_ready) 3月 31 00:11:01 rah81s1 smbd[2989]: STATUS=daemon 'smbd' finished starting up and ready to serve connections 3月 31 00:11:01 rah81s1 systemd[1]: Started Samba SMB Daemon. Hint: Some lines were ellipsized, use -l to show in full. # systemctl status nmb ● nmb.service - Samba NMB Daemon Loaded: loaded (/usr/lib/systemd/system/nmb.service; enabled; vendor preset: disabled) Active: active (running) since 木 2016-03-31 00:11:11 JST; 11s ago Main PID: 3007 (nmbd) Status: "nmbd: ready to serve connections..." CGroup: /system.slice/nmb.service mq3007 /usr/sbin/nmbd 3月 31 00:11:11 rah81s1 systemd[1]: Starting Samba NMB Daemon... 3月 31 00:11:11 rah81s1 systemd[1]: nmb.service: Supervising process 3007 which is not our child. We'll most likely not notice ...t exits. 3月 31 00:11:11 rah81s1 nmbd[3007]: [2016/03/31 00:11:11.731837, 0] ../lib/util/become_daemon.c:124(daemon_ready) 3月 31 00:11:11 rah81s1 nmbd[3007]: STATUS=daemon 'nmbd' finished starting up and ready to serve connections 3月 31 00:11:11 rah81s1 systemd[1]: Started Samba NMB Daemon. Hint: Some lines were ellipsized, use -l to show in full.
Sambaユーザ作成
Sambaを起動したら、Sambaユーザを作成します。 Sambaユーザは先に作成したLinuxユーザと1対1に対応します。
# pdbedit -a user01 new password: ←設定するパスワードを入力する retype new password: ←同じパスワードを再入力する Unix username: user01 NT username: Account Flags: [U ] User SID: S-1-5-21-2341606965-2465339000-2149555108-1001 Primary Group SID: S-1-5-21-2341606965-2465339000-2149555108-513 Full Name: Home Directory: \\samba-server\user01 HomeDir Drive: Logon Script: Profile Path: \\samba-server\user01\profile Domain: SAMBA-SERVER Account desc: Workstations: Munged dial: Logon time: 0 Logoff time: 木, 07 2月 2036 00:06:39 JST Kickoff time: 木, 07 2月 2036 00:06:39 JST Password last set: 月, 28 3月 2016 23:42:09 JST Password can change: 月, 28 3月 2016 23:42:09 JST Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF # pdbedit -a user02 new password: ←設定するパスワードを入力する retype new password: ←同じパスワードを再入力する Unix username: user02 NT username: Account Flags: [U ] User SID: S-1-5-21-2341606965-2465339000-2149555108-1002 Primary Group SID: S-1-5-21-2341606965-2465339000-2149555108-513 Full Name: Home Directory: \\samba-server\user02 HomeDir Drive: Logon Script: Profile Path: \\samba-server\user02\profile Domain: SAMBA-SERVER Account desc: Workstations: Munged dial: Logon time: 0 Logoff time: 木, 07 2月 2036 00:06:39 JST Kickoff time: 木, 07 2月 2036 00:06:39 JST Password last set: 月, 28 3月 2016 23:43:11 JST Password can change: 月, 28 3月 2016 23:43:11 JST Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF # pdbedit -a guest01 new password: ←設定するパスワードを入力する retype new password: ←同じパスワードを再入力する Unix username: guest01 NT username: Account Flags: [U ] User SID: S-1-5-21-2341606965-2465339000-2149555108-501 Primary Group SID: S-1-5-21-2341606965-2465339000-2149555108-513 Full Name: Home Directory: \\samba-server\guest01 HomeDir Drive: Logon Script: Profile Path: \\samba-server\guest01\profile Domain: SAMBA-SERVER Account desc: Workstations: Munged dial: Logon time: 0 Logoff time: 木, 07 2月 2036 00:06:39 JST Kickoff time: 木, 07 2月 2036 00:06:39 JST Password last set: 木, 31 3月 2016 00:14:50 JST Password can change: 木, 31 3月 2016 00:14:50 JST Password must change: never Last bad password : 0 Bad password count : 0 Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF # pdbedit -Lw ←作成したSambaユーザを確認する guest01:11001:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000: user02:10002:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:813D0C2A213CB3D124926B8D9D38E00C:[U ]:LCT-56F942FF: user01:10001:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:58A478135A93AC3BF058A5EA0E8FDB71:[U ]:LCT-56F942C1:
動作テスト
Sambaプロセス確認
Sambaのプロセスが起動していることを確認します。 サービス名は smb と nmb でしたが、プロセス名は smbd と nmbd となっています。
# ps -ef | grep smb root 2542 1 0 3月31 ? 00:00:00 /usr/sbin/smbd root 2544 2542 0 3月31 ? 00:00:00 /usr/sbin/smbd root 2705 2542 0 3月31 ? 00:00:00 /usr/sbin/smbd root 5856 2434 0 00:37 pts/0 00:00:00 grep --color=auto smb # ps -ef | grep nmb root 2551 1 0 3月31 ? 00:00:00 /usr/sbin/nmbd root 5858 2434 0 00:37 pts/0 00:00:00 grep --color=auto nmb
Windowsからの接続確認
構築したSambaサーバと同じサブネット上にあるWindowsパソコンから接続確認、ファイルの作成確認を行います。 Windows 7のネットワークを表示すると構築したSambaサーバが SMABA-SERVER という名前で表示されます。 弧の名前は smb.conf ファイルに設定したとおりの名前です。
SAMBA-SERVERには2つの共有フォルダが存在しています。 全ユーザが利用できる public と、登録ユーザのみが利用できる private です。 この時点ではまだログインを行っていないので、個人フォルダは表示されていません。
共有フォルダ public を開いて、試しにファイルを作成してみます。 問題なく作成できました。
続いて共有フォルダ private を開いてみます。
「Windowsセキュリティ」画面が表示されるので、先ほど作成したSambaユーザの user01 でログインします。
ログインが成功すると、共有フォルダ private の中身が表示されますので、ファイルを作成してみます。 問題なく作成できました。
SAMBA-SERVERに戻ると、先ほどは表示されていなかった user01 という共有フォルダが見えるようになっています。 これは user01 のホームディレクトリで、user01 ユーザからしか読み書きできません。 他のユーザには表示されませんし、パスを直接指定するとログイン画面が表示され、IDとパスワードの入力が求められます。
user01 のホームディレクトリを開いて、試しにファイルを作成してみます。 問題なくファイルを作成できました。
Linuxでのファイル確認
上記でWindows上から作成したファイルをLinux上から確認します。 登録ユーザ向けの private フォルダに作成されたファイルは、作成したユーザ user01 が所有者になっています。 全ユーザ向けの public フォルダに作成されたファイルは、ゲストユーザ guest01 が所有者になっています。 これは smb.conf ファイルで guest ony = yes を設定しているためです。 ホームディレクトリに作成されたファイルは、作成したユーザ user01 が所有者になっています。
# ls -l /data/samba-private/ 合計 0 -rwxrw-r-- 1 user01 samba-grp 0 3月 31 19:24 user01のファイル.txt ←テストで作成したファイル # ls -l /data/samba-public/ 合計 0 -rwxr--r-- 1 guest01 samba-gst 0 3月 31 19:21 ゲストユーザのファイル.txt ←テストで作成したファイル # ls -l /home/user01/ 合計 0 -rwxr--r-- 1 user01 samba-grp 0 3月 31 19:25 user01のファイル2.txt ←テストで作成したファイル