Sambaは、LinuxマシンとWindowsマシン間でファイルを共有できるようにするサーバーおよびクライアントソフトウェアを提供します。 RHEL 8 /CentOS8へのインストールと構成は非常に簡単です。ディレクトリをsambaと共有する方法と、適切なSELinuxコンテキストをそのディレクトリに適用する方法を学ぶために読み続けてください。
このチュートリアルでは、次のことを学びます。
- RHEL8にsambaをインストールする方法
- smbデーモンとnmbデーモンを有効にして起動する方法
- Samba共有を作成する方法
- Samba共有にアクセスできるようにファイアウォールを設定する方法
- sambaが正しく機能するように正しいSELinuxコンテキストを設定する方法
使用されるソフトウェア要件と規則
カテゴリ | 使用する要件、規則、またはソフトウェアバージョン |
---|---|
Red Hat Enterprise Linux 8 | |
Samba、coreutils、policycoreutils-python-utilsパッケージ | |
root権限でコマンドを実行する権限。 | |
# –指定されたLinuxコマンドは、rootユーザーとして直接、またはsudo を使用して、root権限で実行する必要があります。 コマンド$ –特定のLinuxコマンドを通常の非特権ユーザーとして実行する必要があります |
Sambaの紹介
プロジェクトのホームページに記載されているように、Sambaはオープンソースソフトウェアであり、GPL
の下でリリースされています。 SMB/CIFS
を使用してファイルと印刷サービスを共有できるようにするライセンス プロトコル。
このプロジェクトは、Windowsマシンとの相互運用を可能にするサーバーとクライアントの両方のソフトウェアを提供し、混合環境での理想的なソリューションを表しています。このチュートリアルでは、Red Hat Enterprise Linux 8にSambaをインストールする方法、Samba共有をセットアップする方法、共有リソースへのアクセスを許可するファイアウォールをセットアップする方法、および適切なSELinuxコンテキストを適用する方法を説明します。
インストール
最初に行う必要があるのは、マシンにsambaをインストールすることです。パッケージと必要なライブラリは、公式のRHEL 8 / CentOS 8リポジトリで入手できるため、yumまたはdnfを使用するだけでインストールできます。このバージョンのRHEL/CentOSでは、最初のコマンドは2番目のコマンドへの単なる「リンク」です:
$ sudo dnf install samba samba-client
samba-clientパッケージは厳密には必要ありませんが、それによって提供されるユーティリティは便利です。パッケージがインストールされたら、smb
を起動して有効にする必要があります およびnmb
起動時のデーモン。 1つ目は実際の転送と共有操作の実行を処理するデーモンで、2つ目はNetBIOS
を実行します。 名前の解決。Windowsでネットワークを閲覧するときにリソースを表示できるようにします。これで、1つのコマンドで両方のsystemdサービスを有効にして開始できます:
$ sudo systemctl enable --now {smb,nmb}
ファイアウォールの構成
次のステップはファイアウォールの構成です。他のマシンからsamba共有リソースにアクセスできるように、適切なポートを開く必要があります。 RHEL 8 /CentOS8のデフォルトのファイアウォール管理ソフトウェアはfirewalldです。
幸いなことに、手動でポートを開く必要はありません。必要なのは、ゾーンに「samba」サービスを追加することだけです。 「サービス」は、サービスが使用する各ポートを設定(および記憶)する代わりに、サービス名を参照することにより、サービスに必要なすべてのポートを通過するトラフィックを許可する単なる抽象概念です。 「サービス」に関する情報を収集したい場合は、次のコマンドを実行できます。
$ sudo firewall-cmd --info-service samba samba ports: 137/udp 138/udp 139/tcp 445/tcp protocols: source-ports: modules: netbios-ns destination:
コマンドの出力から、サービスがポート173 / udp、138 / udp、139 / tcp、および445/tcpを介したトラフィックを許可することがわかります。サービスをデフォルトゾーンに永続的に追加するには、次のコマンドを実行します。
$ sudo firewall-cmd --permanent --add-service=samba
コマンドを実行するときに、--permanent
を使用しました 変更を永続化するために切り替えます。また、default
を想定しました 使用するゾーン。適用するアクションに別のゾーンを指定する場合は、--zone
を使用します。 オプションで、引数としてゾーン名を指定しました(例:–zone =external)。変更は永続的に設定されているため、変更を有効にするには、ファイアウォール構成を再読み込みする必要があります。
$ sudo firewall-cmd --reload
次のコマンドを実行することで、「samba」サービスがゾーンの一部になったことを確認できます。
$ sudo firewall-cmd --list-services cockpit dhcpv6-client http samba ssh
ここでも、ゾーンが指定されていない場合、コマンドはデフォルトのゾーンに適用されます。
ゲストがアクセスできる共有ディレクトリの構成
sambaを介してディレクトリを共有し、ゲストユーザーがパスワードを入力しなくても、このディレクトリに無料でアクセスできるようにしたいとします。目的の結果を得るには、/etc/samba/smb.conf
にいくつかの変更を加える必要があります。 ファイルを作成し、共有用の「スタンザ」を追加します。お気に入りのエディタで、[global]
でファイルを開きます セクションで、強調表示されたテキストを追加します:
[global] workgroup = SAMBA security = user passdb backend = tdbsam printing = cups printcap name = cups load printers = yes cups options = raw map to guest = bad user
map to guest = bad user
命令は、不正なユーザー名でのログイン試行をデフォルトのゲストユーザー(デフォルトではnobody
)にマップします 。これは、パスワードを入力せずに匿名アクセスを許可するために必要です。
この変更後、ファイルの最後に共有専用の新しいスタンザを追加する必要があります。共有リソースに「linuxconfig」という名前を付けます:
[linuxconfig] path = /mnt/shared guest only = yes
上記の設定で、/mnt/shared
のコンテンツを共有することを宣言しました ディレクトリ、ユーザー認証の必要なし。この設定は明らかに危険であり、ここでは例としてのみ報告されています。実際のシナリオでは、少なくともゲストへの書き込みアクセスを拒否したい場合があります(writeable = no
を追加することで可能です)。 命令)。変更を有効にするには、デーモンを再起動する必要があります:
$ sudo systemctl restart {smb,nmb}
登録ユーザーのみがアクセスできる共有を構成する
ログインプロンプトでリソースへのアクセスを保護するには、sambaがスタンドアロンサーバーとして実行されている場合、既存のユーザーをsambaデータベースに追加する必要があります。このユーザーの資格情報は、共有ディレクトリにアクセスするために必要になります。セキュリティ上の理由から、タスク専用のユーザーを作成し、ホームディレクトリの作成を省略して、偽のシェルを割り当てることをお勧めします。
$ sudo adduser -M sambauser -s /sbin/nologin
-M
コマンドに渡されるオプションは、--no-create-home
の短縮形です。 、これは非常に自明です。 -s
オプションではなく、シェルを指定します。この場合は、意図的に無効なシェルを指定します:/sbin/nologin
。この時点で、ユーザーはシステムにパスワードを設定する必要さえありません。
ユーザーを作成したら、それをsambaデータベースに追加する必要があります。smbpasswd
を使用して操作を実行できます。 コマンド:
$ sudo smbpasswd -a sambauser New SMB password: Retype new SMB password: Added user sambauser.
コマンドを実行すると、ユーザーにパスワードを割り当て、確認するよう求められます。このパスワードはSambaコンテキストでのみ有効であり、システムのユーザーアカウントとは関係ありません。以前に作成した共有を制限するには、専用セクションに少し変更を加える必要があります:
[linuxconfig] path = /mnt/shared guest ok = no
testparm
を使用して、セットアップが有効であることを確認できます。 コマンド:
$ testparm Load smb config files from /etc/samba/smb.conf rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) Processing section "[homes]" Processing section "[printers]" Processing section "[print$]" Processing section "[linuxconfig]" Loaded services file OK. Server role: ROLE_STANDALONE
ここでも、smb
を再起動する必要があります およびnmb
変更を有効にするためのデーモン。共有ディレクトリには、正しい資格情報を入力した後にのみアクセスできるようになります。
Samba用のSELinuxのセットアップ
SELinuxはしばしば合併症のように見られ、すぐに無効になります。これは必須ではありません。構成方法を学び、それが提供するセキュリティの強化を利用するだけです。 SELinuxが「強制」モードのときにsamba共有が機能するためには、共有ディレクトリとファイルに適切なコンテキストを割り当てる必要があります。
$ sudo chcon -R -t samba_share_t /mnt/shared
上記の例では、chcon
を使用しました -t
を使用したコマンド オプション、TYPE
を変更します SELinuxコンテキストのセクションからsamba_share_t
。 -R
も使用しました コマンドを再帰的にするために切り替えます。この変更は再起動後も存続しますが、ディレクトリとファイルにデフォルトのポリシーが存在する場合は、デフォルトの設定が再適用されるため、システムのラベルを変更することはできません。
変更をラベル変更イベント後も存続させたい場合は、ポリシーにルールを追加する必要があります。これは、semanage
を使用して行うことができます コマンド:
$ sudo semanage fcontext -a -t samba_share_t "/mnt/shared(/.*)?"
(/.*)?
を使用したので 正規表現では、ルールは「共有」ディレクトリのすべてのコンテンツとディレクトリ自体に適用されます。システムで使用されているラベルを一覧表示することで、ルールがポリシーに追加されたことを確認できます。
$ sudo semanage fcontext -l | grep /mnt/shared /mnt/shared(/.*)? all files system_u:object_r:samba_share_t:s0
これで、Sambaのセットアップが機能するはずです。 samba構成をさらに微調整するには、SELinuxブール値も操作する必要がある場合があります。たとえば、既存のユーザーをsambaに追加する場合、ホームディレクトリを共有できるようにするには、専用のSELinuxブール値を有効にする必要があります。 sambaに関連するすべてのブール値を一覧表示するには、次のコマンドを実行できます。
$ sudo semanage boolean -l|grep samba samba_create_home_dirs (off , off) Allow samba to create home dirs samba_domain_controller (off , off) Allow samba to domain controller samba_enable_home_dirs (off , off) Allow samba to enable home dirs samba_export_all_ro (off , off) Allow samba to export all ro samba_export_all_rw (off , off) Allow samba to export all rw samba_load_libgfapi (off , off) Allow samba to load libgfapi samba_portmapper (off , off) Allow samba to portmapper samba_run_unconfined (off , off) Allow samba to run unconfined samba_share_fusefs (off , off) Allow samba to share fusefs samba_share_nfs (off , off) Allow samba to share nfs sanlock_use_samba (off , off) Allow sanlock to use samba tmpreaper_use_samba (off , off) Allow tmpreaper to use samba use_samba_home_dirs (off , off) Allow use to samba home dirs virt_use_samba (off , off) Allow virt to use samba
上記の出力では、2番目の列はブール値の現在の値を示し、3番目の列はデフォルトの値を示しています(この場合、両方ともオフです)。ホームディレクトリの共有を有効にするためにアクティブ化するブール値は、samba_enable_home_dirs
です。 。 setsebool
を使用して操作を実行できます コマンド:
$ sudo setsebool samba_enable_home_dirs=1
結論
このチュートリアルでは、RHEL 8 /CentOS8システムにsambaをインストールする方法を説明しました。また、ディレクトリを共有する方法、ゲストへのアクセスを許可する方法、または認証されたユーザーにディレクトリを制限する方法についても説明しました。また、ネットワーク上の他のマシンから共有にアクセスできるようにするためにファイアウォールを構成する方法も確認しました。
最後に、SELinuxを「強制」モードでSambaをセットアップするために、必要な変更を実行する方法を確認しました。 SELinuxに興味がある場合は、このテーマに関する記事も読むことができます。