「samba」タグアーカイブ

samba設定方法

久しぶりの投稿です。
少し解り難い設定項目があったりしていたので、自分なりのメモ程度になろうかと思いますが、sambaの設定について説明します。

環境

もう少しで使われなくなるであろうCentOS 8を対象としていますが、後継のOSでも基本的に同じだと思っています。

CentOS 8.3.2011

メモリとかストレージのサイズとかあまり気にしていません。

インストール

sambaのインストールは至って簡単です。

# dnf install samba

CentOS 6やCentOS 7の初期ではsamba-swatを使えましたが、現在は廃止されていて使うことが出来ません。
GUIでの設定方法は別の方法があるらしいのですが、あまり推奨しない方が良さそうなので、CUIで全て設定します。

この後の流れ

取り敢えず、インターネットなどに公開されておらず、クローズドな環境下で実装検証を行います。
インストールや設定の最中には、セキュリティ機能が邪魔をして何が原因か解らなくなることがありますよね。
今回は、そんな面倒なことを無視して、取り敢えずインストールして機能の確認が出来た後に、セキュリティ機能を復活させてセキュアな環境に戻してあげることとします。

今後の流れを以下に記します。
1)セキュリティ関連機能の停止
2)sambaの設定
3)動作確認
4)セキュリティ機能の復旧
この流れで作業を進めます。

1)セキュリティ関連機能の停止

sambaで実現することは、サーバ内部の一部ストレージを共有フォルダーとして使えるようにすることです。
つまりネットワーク関係のアクセスを変更しますので、firewallが影響します。
また、ファイルの書き込み時には、SELinuxも影響する可能性があります。
それでは、これらの機能を一時的に停止します。

まず、firewalldを停止させます。

# systemctl stop firewalld

これでネットワークのセキュリティが解除されます。
強引ですが、設定だけだとこれが一番楽なんですよね(^^ゞ

次に、SELinuxも一時的に停止します。

# setenforce 0

これで準備はOKです。
これらの設定は、OSを再起動すると復活します。
また、この設定をすることで、セキュリティが低下していますので、必ずセキュアなネットワーク空間で作業を行うことをお勧めします。

2)sambaの設定

sambaの設定は、以下の流れになります。

  • /etc/samba/smb.confの編集
  • デーモンの登録(サービスの登録)

ここで、今回は非常に簡単な設定を行います。
ネットワーク上の端末から誰でもID/パスワードなしでアクセス可能な共有NASの様な状態です。

それでは見て行きましょう。

# cp /etc/samba/smb.conf /etc/samba/smb.conf_org
# vi /etc/samba/smb.conf

最初に設定ファイルをバックアップしています。
特に必要なければ除外してください。
次にviで開きます。
smb.confの先頭あたりにある[global]セクションを最初に編集します。
下記にサンプルを記します。

# 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]
        unix charset = UTF-8
        security = user
        map to guest = Bad User

        passdb backend = tdbsam

        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw

        log level = 2
        log file = /var/log/samba/log.%m
        max log size = 1024

今回追加した項目は、以下の項目です。

        unix charset = UTF-8
        security = user
        map to guest = Bad User
        ・
        ・
        ・
        log level = 2
        log file = /var/log/samba/log.%m
        max log size = 1024

unix charset = UTF-8
 unix(Linux含む)で使用するエンコードを指定しています。
 デフォルトで設定されているので、特に設定する必要は無い様です。
 設定内容は以下のコマンドで確認することが可能です。
 実際に指定していないデフォルト設定の内容も全て表示されるので、多くの内容が記されています。
testparm -v
testparmコマンドは、編集内容のチェックを行ってくれる機能でもあります。

security = user
map to guest = Bad User

security = user と map to guest = Bad Userの組み合わせで、ログイン認証が不要になります。

log level = 2
log file = /var/log/samba/%m.log
max log size = 1024

 ログ出力の設定になります。

次に、[Share]セクションを追加します。

[Share]
        comment = Sample Share
        path = /Share/Disk1
        writable = yes
        guest ok = yes
        guest only = yes

path
 共有フォルダーとして使用する領域を指定しています。
 対象はシンボリックリンクでも大丈夫でした。
 対象ディレクトリを/Share/Disk1としていますが、後でも先でも良いので作成します。
 パミッションは777にしておく必要があります。

writable
 書き込み許可

その他は適当に。。。

こんな感じで設定したら、デーモンを立ち上げる前に、記述内容のチェックをします。

# testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

この後、Enterを入力すると設定内容が表示されます。
この上記に記した内容が表示されていればOKですが、間違っているとその内容が表示されます。

3)動作確認

ここまででsambaの設定は完了しています。
デーモンを起動します。

# systemctl start smb.service

OS起動時に自動起動設定する場合は以下のコマンドを入力します。

# systemctl enable smb.service

同一ネットワークに接続されているWindows PCなどからアクセスします。

Windowsの場合は、Exploreを開いて、アドレス入力欄に以下を入力します。

\\IPアドレス <==最初の\\は¥を2つです。

無事に接続出来たら、ファイルを追加したり削除して動作を確認してください。

4)セキュリティ機能の復旧

ファイアウォールを復旧します。

# systemctl start firewalld

次に、ポートを開放します。

# firewall-cmd --permanent --add-port=445/tcp

ファイアウォールを再読み込みして、設定を反映します。

# firewall-cmd --reload

この後、SELinuxの設定を行うのですが、一旦ここまでとします。
SELinuxの設定が面倒な場合には、Disableに設定しましょう。
設定方法は一旦割愛します。

以下で対象ディレクトリ以下に対し、SELinuxが有効でもSambaでアクセス出来る設定を行います。

# semanage fcontext -a -t samba_share_t "/Share/Disk1(/.*)?"
# restorecon -R -v /Share/Disk1

と書いたのですが、ダメでした。
auditログから対処します。

# audit2allow -a -l -m mylocal

module mylocal 1.0;

require {
        type httpd_sys_content_t;
        type smbd_t;
        class dir { add_name read write };
        class file { create getattr lock open read setattr write };
}

#============= smbd_t ==============

#!!!! This avc can be allowed using one of the these booleans:
#     samba_export_all_ro, samba_export_all_rw
allow smbd_t httpd_sys_content_t:dir { add_name read write };

#!!!! This avc can be allowed using one of the these booleans:
#     samba_export_all_ro, samba_export_all_rw
allow smbd_t httpd_sys_content_t:file { create getattr lock open read setattr write };
# setsebool -P samba_export_all_ro on
# setsebool -P samba_export_all_rw on
# setenforce 1
#

※赤斜体文字がコマンドになります(#はコマンドプロンプト)

詳細は端折りますが、setseboolで上記2つの設定を行えば動くということですね(^^ゞ

これで動作確認を行って、きちんと見えました。書き込めました。

仮想OSでインストールしたWindows 10がLAN上のNASに繋がらない時の対応

概要

VirtualBoxでWindowsをインストールした時に、LAN上のNASが接続出来ない状況が発生しました。
その対処についてまとめます。

最終的な結果として、プレインストールのWindows PCで同現象が発生していないことから、Windowsをメディア等からインストールした時に発生する現象であると思われます。
私の環境では、Windows 10で現象が確認されましたが、Windows Server 2016でも同現象が発生するもとの思われます。
その他Windowsの各バージョンにおいて発生した場合でも参考になるかも知れません。

Windows からNASに接続出来ない場合の対処法として記録します。

具体的な現象

VirtualBoxでWindows 10の環境を構築しました。
VirtualBoxでLAN上のネットワークに接続する方法は他にもありますが、ブリッジ接続を選択しました。
プライベートネットワークとして接続しています。

この状態で、通常のプレインストールされたWindows PCであれば、特に気にすることなく接続出来ると思うのですが、新規にインストールしたWindowsからは見えませんでした。

対策内容

幾つかの対策を行いました。
それぞれ順を追って説明しますが、以下に一覧を記します。

VirtulaBoxにおけるネットワークの設定

WindowsをVirtualBoxで仮想OSとして構築した場合について記載します。
ホストOS(Physical OS)の場合は、この項目の内容を飛ばして、次の設定に進んでください。

Windows側のネットワークの設定

Windowsのネットワーク設定がパブリックになっている可能性があります。
当初、私の環境ではパブリックになっていたのでプライベートに変更しました。設定は以下の手順です。

「ネットワークとインターネットの設定」を開きます。

画面右下のネットワークアイコンを右クリックすると以下のポップアップが表示されます

「ネットワークとインターネットの設定を開く」を選択します。

赤枠で囲んだイーサネットのアダプタをクリックします。

「パブリック」になっていたら、「プライベート」に変更してください。

ネットワークと共有センターの設定

ネットワークと共有センターの設定は、一つ前の画面にある「ネットワークと共有センター」を選択すると移動が楽です。

左メニューの「共有の詳細設定の変更」を選択します。

「ネットワーク探索を有効にする」を設定してください。

ワークグループの設定

「コントロールパネル」→「システム」を開きます。

「設定の変更」を開きます。

「変更(C)」で開かれるダイアログで、ワークグループを適切に設定してください。

ここまで来ると、エクスプローラで「ネットワーク」を選択すると、対象となるNASの名前が表示されたりします。
表示されない場合もありますので、あまり深く考えないで次へ進みましょう。

レジストリの設定

最大の難関はここでした!

「regedit」を起動します。
次に、以下のレジストリを探します。

コンピューター\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation

「AllowInsecureGuestAuth」の項目を確認し、「1」をセットします。

再起動を行うことをお勧めしますが、私の場合は再起動なしでもNASへアクセス出来る様になりました。

ただ、このレジストリが見つからない場合もあります。
環境に依存している可能性もあり、判断が難しいところですが、新規に作ってしまうという手もあるのか?ご自身の責任で試してください。
レジスタを追加するのは、最後の手段にしておく方が良いでしょう。
保証も何もありません。

最後に

この現象はWindowsのアップデート後に発生している方も多い様です。
SMB絡みの不具合でもあると思いますが、MS社からすれば仕様なのかな?
そもそもWindows自体が安定性に乏しいということなのでしょう。
この問題は、Windows Server 2016でも報告されているので、アップデートの際にきちんとしてくれるとかないのかねぇ?MS社は無駄な労力をこういうところで強いるので、サポートをもっと手厚くしてほしいですね。

これがWindowsカテゴリ最初の投稿になるとは・・・w