久しぶりの投稿です。
少し解り難い設定項目があったりしていたので、自分なりのメモ程度になろうかと思いますが、sambaの設定について説明します。
環境
もう少しで使われなくなるであろうCentOS 8を対象としていますが、後継のOSでも基本的に同じだと思っています。
CentOS 8.3.2011
メモリとかストレージのサイズとかあまり気にしていません。
インストール
sambaのインストールは至って簡単です。
1 |
# dnf install samba |
CentOS 6やCentOS 7の初期ではsamba-swatを使えましたが、現在は廃止されていて使うことが出来ません。
GUIでの設定方法は別の方法があるらしいのですが、あまり推奨しない方が良さそうなので、CUIで全て設定します。
この後の流れ
取り敢えず、インターネットなどに公開されておらず、クローズドな環境下で実装検証を行います。
インストールや設定の最中には、セキュリティ機能が邪魔をして何が原因か解らなくなることがありますよね。
今回は、そんな面倒なことを無視して、取り敢えずインストールして機能の確認が出来た後に、セキュリティ機能を復活させてセキュアな環境に戻してあげることとします。
今後の流れを以下に記します。
1)セキュリティ関連機能の停止
2)sambaの設定
3)動作確認
4)セキュリティ機能の復旧
この流れで作業を進めます。
1)セキュリティ関連機能の停止
sambaで実現することは、サーバ内部の一部ストレージを共有フォルダーとして使えるようにすることです。
つまりネットワーク関係のアクセスを変更しますので、firewallが影響します。
また、ファイルの書き込み時には、SELinuxも影響する可能性があります。
それでは、これらの機能を一時的に停止します。
まず、firewalldを停止させます。
1 |
# systemctl stop firewalld |
これでネットワークのセキュリティが解除されます。
強引ですが、設定だけだとこれが一番楽なんですよね(^^ゞ
次に、SELinuxも一時的に停止します。
1 |
# setenforce 0 |
これで準備はOKです。
これらの設定は、OSを再起動すると復活します。
また、この設定をすることで、セキュリティが低下していますので、必ずセキュアなネットワーク空間で作業を行うことをお勧めします。
2)sambaの設定
sambaの設定は、以下の流れになります。
- /etc/samba/smb.confの編集
- デーモンの登録(サービスの登録)
ここで、今回は非常に簡単な設定を行います。
ネットワーク上の端末から誰でもID/パスワードなしでアクセス可能な共有NASの様な状態です。
それでは見て行きましょう。
1 2 |
# cp /etc/samba/smb.conf /etc/samba/smb.conf_org # vi /etc/samba/smb.conf |
最初に設定ファイルをバックアップしています。
特に必要なければ除外してください。
次にviで開きます。
smb.confの先頭あたりにある[global]セクションを最初に編集します。
下記にサンプルを記します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# 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 |
今回追加した項目は、以下の項目です。
1 2 3 4 5 6 7 8 9 |
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]セクションを追加します。
1 2 3 4 5 6 |
[Share] comment = Sample Share path = /Share/Disk1 writable = yes guest ok = yes guest only = yes |
path
共有フォルダーとして使用する領域を指定しています。
対象はシンボリックリンクでも大丈夫でした。
対象ディレクトリを/Share/Disk1としていますが、後でも先でも良いので作成します。
パミッションは777にしておく必要があります。
writable
書き込み許可
その他は適当に。。。
こんな感じで設定したら、デーモンを立ち上げる前に、記述内容のチェックをします。
1 2 3 4 5 6 |
# 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の設定は完了しています。
デーモンを起動します。
1 |
# systemctl start smb.service |
OS起動時に自動起動設定する場合は以下のコマンドを入力します。
1 |
# systemctl enable smb.service |
同一ネットワークに接続されているWindows PCなどからアクセスします。
Windowsの場合は、Exploreを開いて、アドレス入力欄に以下を入力します。
\\IPアドレス <==最初の\\は¥を2つです。
無事に接続出来たら、ファイルを追加したり削除して動作を確認してください。
4)セキュリティ機能の復旧
ファイアウォールを復旧します。
1 |
# systemctl start firewalld |
次に、ポートを開放します。
1 |
# firewall-cmd --permanent --add-port=445/tcp |
ファイアウォールを再読み込みして、設定を反映します。
1 |
# firewall-cmd --reload |
この後、SELinuxの設定を行うのですが、一旦ここまでとします。
SELinuxの設定が面倒な場合には、Disableに設定しましょう。
設定方法は一旦割愛します。
以下で対象ディレクトリ以下に対し、SELinuxが有効でもSambaでアクセス出来る設定を行います。
1 2 |
# semanage fcontext -a -t samba_share_t "/Share/Disk1(/.*)?" # restorecon -R -v /Share/Disk1 |
と書いたのですが、ダメでした。
auditログから対処します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<strong><em><span class="has-inline-color has-vivid-red-color"># audit2allow -a -l -m mylocal</span></em></strong> 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 }; <em><strong><span class="has-inline-color has-vivid-red-color"># setsebool -P samba_export_all_ro on # setsebool -P samba_export_all_rw on # setenforce 1 #</span></strong></em> |
※赤斜体文字がコマンドになります(#はコマンドプロンプト)
詳細は端折りますが、setseboolで上記2つの設定を行えば動くということですね(^^ゞ
これで動作確認を行って、きちんと見えました。書き込めました。