samba
update 2020-10-30


要約
fedora SPIN Xfce33 での samba 利用メモである。


sambaを使用してwindowsからfedoraの共有フォルダにアクセス する。



ホスト名: xfce33 とする。(名前は任意)
ホスト名はファイルサーバー名として sambaへのアクセスに使用する。
# nmcli general hostname xfce33

hostnameコマンドでhostnameの確認 ( /etc/hostname ファイルを照会)
# hostname

Sambaに必要なパッケージは samba と samba-common
samba と samba-commonをインストールする。
# dnf -y install samba samba-common

Sambaがインストールされたことを確認する。
インストールされているパッケージは"dnf list"コマンドで確認できる。(ワイルドカード「*」を付けて確認)
# dnf list installed samba*

Sambaのプログラム本体は「smbd」「nmbd」
どこにインストールされているのか確認する。
# which smbd nmbd
「/usr/sbin」以下にインストールされていることが確認できる。

Samba起動
smb および nmb の開始
# systemctl start smb nmb

サービスの状態を確認 (起動したサービスの状態について、詳細な情報を取得することができる)
# systemctl status smb nmb

Samba自動起動の設定
# systemctl enable smb nmb

自動起動が設定されたことを確認する
# systemctl is-enabled smb nmb

ファイアウォール設定 (firewalldを利用した場合)
デフォルトの設定ではSambaサービスへの接続許可が設定されていないため、Windows PCからのアクセスができない。
そこで、"firewall-cmd"コマンドを使用してSambaサービスへの接続許可を追加する。
Samba接続は、全てのユーザーに開放するため、インターフェイスに適用されているゾーンである「public」ゾーンの設定をおこなう。
# firewall-cmd --list-all
「services:」の項目に接続が許可されているサービス名が表示される。
 
「public」ゾーンの接続許可サービスにsambaを追加する。
# firewall-cmd --add-service=samba --permanent
「success」と表示されれば許可の追加は完了。

設定を反映するためにファイアウォールの設定を読み込む。
# firewall-cmd --reload
「success」と表示されれば設定の読み込みは完了。

設定した内容が正常に反映されているかを確認する。
# firewall-cmd --list-all
「services:」の項目に「samba」が追加されていれば確認は完了。
以上でファイアウォールの接続許可は完了。

Sambaの基本的な設定
Sambaを設定する要点は下記の通りとする。
1)WORKGROUPで動作させる(ワークグループ名:WORKGROUP)
2)各ユーザー毎の共有[homes]と、全てのユーザーがアクセスできる[share]共有を設定
3)プリンタは利用しない
4)ファイルサーバー名は"xfce33"
5)パスワード形式はtdbsamとしサーバーに情報を保存。(TDB(Trivial DataBase)を使用する)
※パスワードは/var/lib/samba/private/passdb.tdbに保存される。
6)Sambaサーバー上に作成したユーザーのみ共有へアクセスできる(ゲスト接続NG)

Sambaの設定は/etc/samba/以下にあるsmb.confで行なう。
smb.confは設定項目が複数のセクションに分割されている。

各セクションの設定内容の要点は以下の通り。
[global]    Sambaの挙動に関する基本的なパラメーター設定
globalセクションに設定した内容はファイル共有を含むSamba全体に適用される。

[Share] セクションで共有フォルダの設定を行なう。

ファイル共有セクションに設定した内容は、設定したファイル共有のみに適用される。
[homes]    ユーザ個別のホームディレクトリ共有設定
[printers]    Sambaをプリンタサーバーとして利用するための設定
[共有フォルダ名]    共有フォルダ毎の設定

デフォルトのsmb.conf を smb.conf.org という名前でバックアップしておく。
# cd /etc/samba  (samba フォルダに移動)
# ls (ファイルを確認)
lmhosts smb.conf smb.conf.example
# cp -p smb.conf smb.conf.org  (smb.conf を smb.conf.org としてコピー。-p はパーミッションと所有者とタイムスタンプを保持する)

全てのセクションを変更した後のsmb.confは以下のようになっている。
workgroup = WORKGROUP    Windowsで利用するワークグループ名
server string = SAMBA SERVER Version %v    ネットワークコンピュータ一に表示される情報
netbios name = xfce33    ファイルサーバー名の設定
dos charset = CP932    WINDOWS側の文字コード設定
wins support = yes    WINSサポート用パラメータ、WINS利用時に有効
load printers = no    プリンタ共有機能の設定パラメータ、noで無効
disable spoolss = yes    プリンタ共有機能の設定パラメータ、yesで無効

[Share]は共有フォルダの設定
comment = Share Folder for All Users    共有フォルダに設定する任意のコメント
path = /home/share/    共有フォルダとして設定するディレクトリのパス
browsable = yes    共有フォルダを見えるようにする
read only = no    共有フォルダを読み取り専用にしない

-----ここからsmb.conf
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.
 
[global]
workgroup = WORKGROUP
server string = SAMBA SERVER Version %v
netbios name = xfce33
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
 
[Share]
comment = Share Folder for All Users
path = /home/share/
browsable = yes
read only = no
 
[homes]
comment = Home Directories
valid users = %S, %D%w%S
browseable = No
read only = No
inherit acls = Yes
 
#[printers]
# comment = All Printers
# path = /var/tmp
# printable = Yes
# create mask = 0600
# browseable = No
 
#[print$]
# comment = Printer Drivers
# path = /var/lib/samba/drivers
# write list = @printadmin root
# force group = @printadmin
# create mask = 0664
# directory mask = 0775

変更したファイルと比較して間違いがなければ、ファイルを保存する。

設定ファイルの確認
設定ファイル自体に間違いがないかを確認するコマンド"testparm"が用意されている。
変更した設定を反映する前に"testparm"コマンドで設定ファイルをチェックする。
# testparm

エラーが出力されなければ、設定ファイルのテストは完了。

共有用ディレクトリの作成
共有フォルダを指定したパスに実際のディレクトリがないとアクセスできないため、事前に作成しておく。
ここでは「Share」セクションで指定した「path = /home/share/」に共有用のディレクトリを作成する。
# cd /home/
# mkdir share

「share」ディレクトリの作成後に所有者の変更とパーミッションを設定する。
※ -R は recursive の意味。
# chmod -R 0777 share
# chown -R nobody:nobody share

設定変更後に、所有者とパーミッションを"ll"(エルエル)コマンドで確認する。
# ll
drwxrwxrwx  1 nobody nobody   0 10月 30 10:00 share
のように
パーミッションが「drwxrwxrwx」
オーナーとグループとして「nobody」が設定されていれば、共有用ディレクトリの作成は完了。

Sambaアクセス用ユーザー追加
ユーザーはLinux側で作成した後に、Sambaに用意されている"pdbedit"コマンドでSamba用に設定する。
ここでは「user1」というユーザーを作成する。

1)Linux側ユーザーの作成
"useradd"コマンドで作成後に、"passwd"コマンドでパスワードを設定する。
# useradd user1 (ユーザー:user1を作成)
# passwd user1 (作成したユーザー:user1のパスワードを作成)
ユーザー user1 のパスワードを変更。
新しいパスワード: 任意のパスワード pwuser1
新しいパスワードを再入力してください: 同じパスワードを入力 pwuser1
passwd: すべての認証トークンが正しく更新できました。

2)Windows側のユーザー属性追加
作成したLinuxユーザー「user1」に"pdbedit"コマンドでWindows属性を追加する。
pdbeditの"-a"オプションは新規に追加する指定する。
"-u"オプションはユーザー名を指定する。
"-f"はフルネームを指定します。"-f"は任意のオプション。
# pdbedit -a -u user1 -f "test user1"
new password: passwdコマンドで設定したものと同じパスワードを入力 pwuser1
retype new password: 確認用にパスワードを再入力 pwuser1

実行すると、Windowsへアクセスする際の属性が追加される。
エラーの出力がなければ、ユーザーの作成は完了。

作成したユーザーはpdbeditコマンドに-Lオプションを付けることで確認できる。
# pdbedit -L
user1:1001:test user1

pdbeditコマンドに"-L"オプションと"-v"オプションを付けるとユーザーの詳細な情報が表示される。
# pdbedit -L -v user1

ハッシュされたパスワードとユーザー情報を表示するには、"-L"と"-w"オプションを付けてpdbeditコマンドを実行する。
# pdbedit -L -w

作成したユーザーの情報が表示されれば、ユーザーの確認は完了。

Sambaの再起動
変更した設定を反映するためにsmbdとnmbdを再起動する。
"systemctl restart"コマンドを実行する。
# systemctl restart smb nmb

サービスの再起動後にsmbdとnmbdのstatusを確認する。
# systemctl status smb nmb

以上で設定の反映は完了。

接続確認
WindowsのPCから接続テストを行なう。
1)コンピューター名へのpingテスト
ファイルサーバーのコンピューター名である「xfce33」に対してpingを実行し、応答があることを確認する。
> ping xfce33
pingの応答があれば確認は完了。

2)コンピューター名での接続テスト
「ファイル名を指定して実行」にて \\xfce33 と入力して[OK]をクリックする。

「ネットワーク資格情報の入力」ダイアログが表示される。
ユーザー名:Sambaサーバー上で作成したユーザー名(user1)
パスワード:作成したユーザーのパスワード (pwuser1)
※Windows にログインしているユーザーが同じユーザー名、パスワードの場合は 「ネットワーク資格情報の入力」ダイアログは表示されずに接続できる。

入力した情報が正しい場合、エクスプローラーに設定した共有フォルダが表示される。
Share共有フォルダにテスト用のフォルダを作成してみる。
ユーザーのホームフォルダ(user1共有)にも同じく書き込みができることを確認する。

以上でWindows PCからの接続確認完了。



Linux から Windowsへのアクセスは CIFSを使用する
cifs-utilsをインストール
# dnf install cifs-utils

マウントするフォルダを作成
# mkdir -p /mnt/windows

マウントする
mount -t cifs -o user=[Windowsユーザー名],password=[Windowsパスワード],uid=[Linuxのユーザー名] //[Windowsサーバー名 or IPアドレス]/[共有フォルダ名] /mnt/windows
実際の例は
# mount -t cifs -o user=user1,password=pwuser1,uid=user1 //192.168.1.2/users /mnt/windows


end of list