# LAN内から認証なしでアクセスできるsambaサーバの構築

2017/07/09

20180729 Sambaのセキュア化設定(SMBv1無効化、ディジタル署名有効化)とプリンタ関連のログ抑制設定を追加

LPIC 202の勉強がてらSambaサーバ構築してみました。Sambaとは簡単に言うとWindowsからアクセスできるファイルサーバです。Active Directoryのドメインコントローラにもなれたりするらしいですが難しそうなのでいったん置いておきます。

# LAN内から認証なしでsambaへアクセスするための肝

  • security = userモードを利用するが、samba用のUNIXアカウントを作成しないこと
  • LAN内からのみアクセスを許可すること
  • ゲスト認証のみ許可すること
  • 共有ディレクトリの所有者・所有グループは共にnobodyとし、パーミッションは777とすること
  • 新規にディレクトリやファイルを作成した際に、その所有者・所有グループは共にnobodyになるようにすること

これらの設定で、セキュリティを保ちつつ、認証不要なゲストアカウントがフルアクセス権を持った状態でログインできます。security = shareというモードだと上記の面倒な設定が不要なのですが、最近のセキュリティが厳しくなったWindowsとの連携がうまくいかないらしく、そのうちモード自体を消すよみたいなことが言われています。

# 要件

  • CentOS Linux release 7.3.1611 (Core)
  • 3.10.0-514.26.1.el7.x86_64

# 構築手順

必要なものをインストール

sudo yum install samba
1

バージョンを確認

$ smbd -V
Version 4.4.4
1
2

設定ファイルを編集

20180729 Sambaのセキュア化設定(SMBv1無効化、ディジタル署名有効化)とプリンタ関連のログ抑制設定を追加

$ sudo vim /etc/samba/smb/conf
[global]
#文字コードの指定
dos charset = CP932
unix charset = UTF-8
#ワークグループの指定
workgroup = SEROTONINWG
#エクスプローラとかでフォルダの横に表示されるコメント。%vはsambaのバージョン、%hはホスト名を示すsmb.confの変数
server string = Samba %v on %h Linux
#アクセス制限。これ以外はdenyされる。EXCEPTでルータを除外
hosts allow = 192.168.100. localhost EXCEPT 192.168.100.1
#net bios名の指定。ホスト名と一緒にしておく
netbios name = srtppc02
#net bios名をdnsサーバに解決してもらうかどうか
dns proxy = no
#ログレベルの指定
log level = 3
#sambaが稼働しているホストのUNIXユーザを用いて認証を行う。ほかにもLDAPサーバやADサーバを用いて認証を行うようにもできる
security = user
#sambaユーザとして認証できなかった場合にどうするか。bad userの場合、存在しないユーザでログインしようとした時にゲスト認証だとみなす
map to guest = bad user

#SMBディジタル署名有効化(サーバ側とクライアント側)
server signing = mandatory
client signing = mandatory
#SMB暗号化を有効(任意とする)
smb encrypt = auto
#SMBv1を無効化
min protocol = SMB2

#プリンタ関連のログを抑制する
load printers = no
printing = bsd
printcap name = /dev/null

[Share]
#共有させるフォルダ
path = /samba/share/
#ブラウジング機能を有効とするかどうか
browsable =yes
#書き込み可能かどうか
writable = yes
#ゲストユーザのログインが可能かどうか
guest ok = yes
#全てのユーザをゲストとするかどうか
guest only = yes
#読込みのみとするか
read only = no
#フルアクセスでファイル作成
create mode = 0777
#フルアクセスでディレクトリ作成
directory mode = 0777
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

共有ディレクトリの作成。nobodyにフルアクセス権を持たせる

sudo mkdir -p /samba/share
sudo chmod -R 0777 /samba/share
sudo chown -R nobody:nobody /samba/share
1
2
3

sambaの自動起動設定と再起動

sudo systemctl enable smb
sudo systemctl enable nmb
sudo systemctl restart smb
sudo systemctl restart nmb
1
2
3
4

firewalldの現在のzone確認

$ sudo firewall-cmd --list-all
 myfirewall (active)
 target: default
 icmp-block-inversion: no
 interfaces: enp0s31f6
 sources:
 services: ssh
 ports:
 protocols:
 masquerade: no
 forward-ports:
 sourceports:
 icmp-blocks:
 rich rules:
1
2
3
4
5
6
7
8
9
10
11
12
13
14

firewalldのゾーンmyfirewallにsambaが使うポートを穴空け

sudo firewall-cmd --permanent --zone=myfirewall --add-service=samba
sudo firewall-cmd --reload
1
2

SELinuxにsambaの利用を許可させる

sudo chcon -t samba_share_t /samba/share
1

# Windows側からの疎通確認

まずはWindowsのネットワーク探索とファイルとプリンターの共有を許可してやる必要があります。スタートボタン右クリック→ネットワーク接続→共有オプションからいけます。

WS000003.jpg

ネットワーク探索とはブラウジング機能のこと。定期的にpingのようなものを飛ばしてLAN内にほかのWindows機がいるか確認する機能。これを有効にしておく(browsable =yes)と、エクスプローラの「ネットワーク」欄にLAN内のWindows機やsambaサーバが表示されます。なお、有効にしてから実際にエクスプローラで他のPCが見えるようになるまでは多少時間がかかります。

続いてwin+Rで\<sambaサーバのIPアドレス>と入力。ネットワーク探索が完了していればnet bios名でもOKです。どうでもいいですがこのウィンドウの背後では偽物語が流れていました。

WS000004.jpg

無事アクセスできるとこんな画面になっているはず。

WS000005.jpg

shareをダブルクリックして共有ディレクトリを開く。テストとして以下のようにファイルを作成してみる。

WS000006.jpg

中身は適当に。

WS000007.jpg

保存してLinux側からも見れてるか確認。

$ cat /samba/share/sambatest.txt
 test
1
2

大丈夫そうですね。将来的にはHDD3台増設し、そこをsambaでエクスポートして、音楽を置いておいてどこからでも聞けるみたいな感じにしたいです。ただしバカでかいPCなので電気代などが心配。ミュージックサーバ用途ならラズパイ買ってきたほうがいいんだろうなぁ。

話変わりますけど最近ずっとこころがしんどい。

# 参考