LinuC 202「2.11.1 Sambaの設定と管理」を見て、Sambaサーバ(CentOS7)-Sambaクライアント(Mac OSX)間でファイル共有をしてみた。
(以降、Microsoftネットワーク云々の話があるけど、全くWindows端末が登場しなかったりする)
この記事のアジェンダ
- Microsoftネットワークの基本概念について
- ファイル共有できるようにsmb.confをカスタマイズ
- Sambaのユーティリティを紹介
Microsoftネットワークの基本概念
図で説明したほうがよさそうだけど、ひとまずテキストで説明。
-
ワークグループ
- コンピュータを一括りにまとめる単位
-
マスターブラウザ
- ワークグループ内のホストを管理するホスト
- セグメント上に1台存在する
-
ドメイン
- NTドメイン
- Windows NTで利用されるユーザ管理の仕組み
- ホストをドメイン単位でグループ化
- DNSのドメインとは別物なので注意
- ADドメイン
- Windows 2000 Server以降で採用されているディレクトリサービス
- NTドメインと異なりツリーで大規模なドメインを管理できる
- NTドメイン
-
ドメインコントローラ (認証サーバ)
- ドメイン内のユーザにログオン認証を提供
- ドメインにログオンすれば共有リソースに認証なしでアクセスできるようになる
-
NetBIOS
- MicrosoftネットワークのAPI
- ホストにNetBIOS名を割り当て、識別する
-
WINS
- NetBIOSをTCP/IP上で使えるようにするためにNetBIOS over TCP/IPという仕組みがある
- NetBIOS over TCP/IPでIPとNetBIOS名の名前解決をする時に使う
- WINS: WIndows Internet Naming Service
ファイル共有できるようにsmb.confをカスタマイズ
Sambaは次の3つのプロセスが連携している。
- smbd ファイル共有、認証
- nmbd ブラウジング、NetBIOS名前解決、WINSサーバ
- winbindd Winbind機能
*windinddは必須ではないっぽい
設定は /etc/samba/smb.conf
ファイルで行う。
smb.confは [global]セクション, [homes]セクション, [printers]セクション, 自作セクションで構成されている。
以下、1つずつ詳細を見ていく。なお、今回はプリンタ共有の話([printers]セクション)は省略。
[global]セクション
Sambaの全体設定を行うパート
ひとまずファイル共有したい場合は次のように設定する。
[global]
workgroup = WORKGROUP
server role = AUTO
server string = SAMBA SERVER Version %v
netbios name = buzz
security = user
passdb backend = tdbsam
dos charset = CP932
wins support = yes
# printing = cups
# printcap name = cups
load printers = no
disable spoolss = yes
# cups options = raw
workgroup = WORKGROUP # Sambaサーバが所属するワークグループ名
server role = AUTO # 動作モード (AUTOでsecurityパラメータに従った動作になる)
server string = SAMBA SERVER Version %v # サーバの説明
netbios name = buzz # NetBIOS名
security = user # 認証方法 (Sambaユーザのアカウントとパスワードで認証)
passdb backend = tdbsam # バイナリ形式のデータベースにユーザ情報を格納
dos charset = CP932
wins support = yes # WINSサーバとして動作させる
load printers = no
disable spoolss = yes
* securityパラメータの補足
ドメインコントローラ認証の場合 security = DOMAIN
と設定する
ADドメインにkerberos認証を行う場合 security = ADS
と設定する
[homes]セクション
UNIXユーザのホームディレクトリ共有設定を行うパート
[homes]
comment = Home Directories
valid users = %S, %D%w%S
browseable = No
read only = No
inherit acls = Yes
comment = Home Directories
valid users = %S, %D%w%S # アクセス可能なユーザを指定
browseable = No # ブラウジングした時に表示されるか? YesでもNoでも共有名を直指定するとアクセスはできる
read only = No # 書き込みを許可するか? (Noなら書き込み許可)
inherit acls = Yes
自作セクション
任意の自作セクションを設定するパート
今回の例では[Share]という自作セクションを設定した
[Share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = no
comment = Share Folder for All Users
path = /home/share/ # 共有ディレクトリパス
browsable = yes # ブラウジングした時に表示されるか?
read only = no # 書き込みを許可するか?
Sambaのユーティリティを紹介
設定チェック、Sambaユーザ管理、Linux用Sambaクライアントなどユーティリティを紹介。
testparm 設定チェック
- オプション
- -s 構文チェック後にEnterを押さずにsmb.confを表示
- -v デフォルトパラメータも表示
# testparm -s
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE
# Global parameters
[global]
disable spoolss = Yes
dos charset = CP932
load printers = No
security = USER
server string = SAMBA SERVER Version %v
wins support = Yes
idmap config * : backend = tdb
[homes]
browseable = No
comment = Home Directories
inherit acls = Yes
read only = No
valid users = %S %D%w%S
[Share]
comment = Share Folder for All Users
path = /home/share/
read only = No
pdbedit Sambaユーザ管理
- Samba 3.0以降で対応している
- オプション
- -L Sambaユーザ一覧表示
- -a Sambaユーザ追加
- -x Sambaユーザ削除
- Sambaユーザ一覧表示 (-Lオプション)
# pdbedit -L
samba-paper:10001:samba paper
・Sambaユーザ追加 (-aオプション)
# pdbedit -a -u samba-paper -f "samba paper"
new password:
retype new password:
Unix username: samba-paper
NT username:
Account Flags: [U ]
User SID: S-1-5-21-3964642020-3879586777-578649929-1001
Primary Group SID: S-1-5-21-3964642020-3879586777-578649929-513
Full Name: samba paper
Home Directory: \\fs\samba-paper
HomeDir Drive:
Logon Script:
Profile Path: \\fs\samba-paper\profile
Domain: FS
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: Thu, 07 Feb 2036 00:06:39 JST
Kickoff time: Thu, 07 Feb 2036 00:06:39 JST
Password last set: Thu, 13 Aug 2020 17:23:43 JST
Password can change: Thu, 13 Aug 2020 17:23:43 JST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
注意点
- 追加しようとしているSambaユーザがUNIXユーザ上に存在していることが前提条件
- Windowsがパスワード暗号化で使用するアルゴリズムとLinuxが使用するアルゴリズムが異なるため、
/etc/passwd, /etc/shadowを利用した認証ができない
# pdbedit -a -u samba-buzz -f "samba buzz"
new password:
retype new password:
Failed to add entry for user samba-buzz.
# grep samba-buzz /etc/passwd
#
UNIXユーザ上にsamba-buzzが存在しないため、pdbeditコマンドで新規ユーザ追加しようとしてもエラーになる
・Sambaユーザの削除
# pdbedit -x samba-buzz
smbpasswd Sambaユーザのパスワード変更
- オプション
- -d Sambaユーザを無効化
- -e Sambaユーザを有効化
- -x Sambaユーザを削除
・Sambaユーザのパスワード変更
# smbpasswd samba-buzz
New SMB password:
Retype new SMB password:
nmblookup NetBIOS名の問い合わせ
-
DNS名前解決で使う dig, nslookup では名前解決のテストができない
-
ホストが存在するかの確認
# nmblookup buzz
xxx.xxx.xxx.xxx buzz<00>
buzzというホストが名前解決できるよう。
- WORKGROUP内のホストを検索
# nmblookup WORKGROUP
xxx.xxx.xxx.xxx WORKGROUP<00>
smbclient Linux用Sambaクライアント
-
LinuxがMicrosoftネットワークの共有リソースにアクセスするためのユーティリティ
-
オプション
- -L リスト表示
- -N 認証を行わない
- -U <ユーザ> 接続するユーザを指定
-
共有リソース//buzz/shareにsamba-paperユーザでアクセス
# smbclient //buzz/share -U samba-paper
Enter WORKGROUP\samba-paper's password:
Try "help" to get a list of possible commands.
smb: \> pwd
Current directory is \\buzz\share\
smb: \> ls
. D 0 Fri Aug 14 11:20:40 2020
.. D 0 Thu Aug 13 17:22:46 2020
hello.txt N 14 Fri Aug 14 11:20:40 2020
21110356 blocks of size 1024. 16698572 blocks available
```
- Anonymousで認証せずリスト表示
```
# smbclient -L buzz -N
Anonymous login successful
Sharename Type Comment
--------- ---- -------
Share Disk Share Folder for All Users
IPC$ IPC IPC Service (SAMBA SERVER Version 4.10.4)
Reconnecting with SMB1 for workgroup listing.
Anonymous login successful
Server Comment
--------- -------
Workgroup Master
--------- -------
WORKGROUP BUZZ
```
### Sambaクライアント(Mac OSX)からSambaサーバへアクセス
[移動] -> [サーバへ接続]して、以下のようにsmbプロトコルを利用してSambaにアクセスする。
smb://xxx.xxx.xxx.xxx