CentOS stream8へのsambaのインストールと設定

今更ながらSambaをセットアップする

以前の記事でRaspberryPi-OSにsambaをインストールしましたが、今回はCentOS stream8に入れてみます。

RaspberryPi-OSと違う点

大きく違うのは、firewalldの設定方法とselinuxの対応です。

dnfでインストール

色々設定するのでrootでやります。まずはインストール。

[root@hogeServer ~]# dnf -y install samba

smb.confの設定

[root@hogeServer ~]# cd /etc/samba
[root@hogeServer ~]# rename -v conf conf.org smb.conf
[root@hogeServer ~]# cp -R smb.conf.sample smb.conf
[root@hogeServer ~]# vim smb.conf

smb.confの設定は使い方次第ですが、今回は下記のような設定を行います。

  • workgroup名は"WORKGROUP"
  • LAN内とVPNアクセスのみ許可
  • ゲストログイン禁止
  • プリンタ共有無し
  • homeディレクトリの共有無し

以下、Sampleファイルから設定変更した分のみ抜粋

~説明等~
#
#======================= Global Settings =====================================

[global]

# ----------------------- Network-Related Options -------------------------
#
~説明等~
#
        unix charset = UTF8 #追加:samba側の文字コード設定
        dos charset = CP932 #W追加:indowsの文字化け防止
        workgroup = WORKGROUP #変更
        server string = Samba Server Version %v

        netbios name = hogeServer #変更:任意に設定

;       interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
        hosts allow = 192.168.***.0/24 10.8.*.0/24 #任意設定(LANとVPNのアクセス許可)

# --------------------------- Logging Options -----------------------------
#
~説明等~
#

        # log files split per-machine:
        log file = /var/log/samba/log.%m
        # maximum size of 50KB per log file, then rotate:
        max log size = 50

# ----------------------- Standalone Server Options ------------------------
#
~説明等~
#

        security = user
        passdb backend = tdbsam
        map to guest = Never #追加:ゲストログイン禁止

# ----------------------- Domain Members Options ------------------------
#
# security = must be set to domain or ads.
#
~説明等~
;       security = domain
;       passdb backend = tdbsam
;       realm = MY_REALM

;       password server = <NT-Server-Name>

# ----------------------- Domain Controller Options ------------------------
#
# security = must be set to user for domain controllers.
~説明等~
#
;       security = user
;       passdb backend = tdbsam

;       domain master = yes
;       domain logons = yes

        # the following login script name is determined by the machine name
        # (%m):
;       logon script = %m.bat
        # the following login script name is determined by the UNIX user used:
;       logon script = %u.bat
;       logon path = \\%L\Profiles\%u
        # use an empty path to disable profile support:
;       logon path =

        # various scripts can be used on a domain controller or a stand-alone
        # machine to add or delete corresponding UNIX accounts:

;       add user script = /usr/sbin/useradd "%u" -n -g users
;       add group script = /usr/sbin/groupadd "%g"
;       add machine script = /usr/sbin/useradd -n -c "Workstation (%u)" -M -d /nohome -s /bin/false "%u"
;       delete user script = /usr/sbin/userdel "%u"
;       delete user from group script = /usr/sbin/userdel "%u" "%g"
;       delete group script = /usr/sbin/groupdel "%g"


# ----------------------- Browser Control Options ----------------------------
#
~説明等~
#
;       local master = no
;       os level = 33
;       preferred master = yes

#----------------------------- Name Resolution -------------------------------
#
~説明等~

;       wins support = yes
;       wins server = w.x.y.z
;       wins proxy = yes

;       dns proxy = yes

# --------------------------- Printing Options -----------------------------
#
~説明等~

        load printers = yes
        cups options = raw

;       printcap name = /etc/printcap
        # obtain a list of printers automatically on UNIX System V systems:
;       printcap name = lpstat
;       printing = cups

# --------------------------- File System Options ---------------------------
#
~説明等~

;       map archive = no
;       map hidden = no
;       map read only = no
;       map system = no
;       store dos attributes = yes


#============================ Share Definitions ==============================
#↓[home],[printers]の設定は無効化している
#[homes]
        #comment = Home Directories
        #browseable = no
        #writable = yes
;       valid users = %S
;       valid users = MYDOMAIN\%S

#[printers]
        #comment = All Printers
        #path = /var/spool/samba
        #browseable = no
        #guest ok = no
        #writable = no
        #printable = yes

#↓[hoge_USBflash]を新規作成
[hoge_USBflash]
        path = /mnt/usb_flash/share
        writable = yes
        guest ok = no
        guest only = no
        create mode = 777
        directory mode = 777
        share modes = yes

# Un-comment the following and create the netlogon directory for Domain Logons:
;       [netlogon]
;       comment = Network Logon Service
;       path = /var/lib/samba/netlogon
;       guest ok = yes
;       writable = no
;       share modes = no

# Un-comment the following to provide a specific roaming profile share.
# The default is to use the user's home directory:
;       [Profiles]
;       path = /var/lib/samba/profiles
;       browseable = no
;       guest ok = yes

# A publicly accessible directory that is read only, except for users in the
# "staff" group (which have write permissions):
;       [public]
;       comment = Public Stuff
;       path = /home/samba
;       public = yes
;       writable = no
;       printable = no
;       write list = +staff
[root@GitLabServer samba]# systemctl start smbd.service
Failed to start smbd.service: Unit smbd.service not found.

以上で設定ファイルの更新完了です。

ユーザー登録

sambaシステムで使用するユーザーを登録します。クライアントの資格情報もこの設定情報でログインします。

[root@GitLabServer samba]# pdbedit -a hogehoge
new password:
retype new password:
Unix username:        hogehoge
NT username:
Account Flags:        [U          ]
User SID:             ********************************************
Primary Group SID:    ********************************************
Full Name:
Home Directory:       \\GITLABSERVER\hogehoge
HomeDir Drive:
Logon Script:
Profile Path:         \\GITLABSERVER\hogehoge\profile
Domain:               HOGESERVER
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          木, 07  2月 2036 00:06:39 JST
Kickoff time:         木, 07  2月 2036 00:06:39 JST
Password last set:    日, 10  7月 2022 18:18:53 JST
Password can change:  日, 10  7月 2022 18:18:53 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

 

共有フォルダのセットアップ

共有フォルダはUSBメモリやSSD内に作成するため、マウントする前提で作成します。

[root@hogeServer ~]# mkdir /mnt/usb_flash
[root@hogeServer ~]# mkdir /mnt/usb_flash/share
[root@hogeServer ~]# chmod -R 777 /mnt/usb_flash

ユーザーによる編集制限は行わない共有ディレクトリとなります。

sambaの起動

[root@hogeServer samba]# systemctl start smb.service
[root@hogeServer samba]# systemctl enable smb.service

ここまででsamba自体の設定は完了しましたが、接続確認は後述のfirewalld設定の変更を行ってから行います。

firewalldの設定と接続確認

firewalldはサービスを登録するだけでOKです。設定後、リロードして動作確認を行います。

firewall設定の変更

[root@hogeServer samba]# firewall-cmd --add-service=samba --zone=public --permanent
success
[root@hogeServer samba]# firewall-cmd --reload
success

これでWindowsからアクセスしてみると、アクセス拒否されます。原因はSELinuxなので、一時的に機能停止して、接続確認を行います。

SELinuxの一時停止

今の状態はコンテキスト設定がsambaに対応していないため、sambaによるアクセスは拒否されます。そのため、接続確認のために一時的に停止します。

[root@hogeServer samba]# getenforce
Enforcing
[root@hogeServer samba]# setenforce 0
[root@hogeServer samba]# getenforce
Permissive

この後、WindowsPCからアクセスして接続出来ればSELinux以外の設定は完了です。再度、SELinuxを有効化しておきます。

[root@hogeServer samba]# setenforce 1
[root@hogeServer samba]# getenforce
Enforcing

残るはSELinuxの対策のみです。

SELinux環境下のsamba設定

SELinuxへの対応は環境により変わります。通常は使用するディレクトリのコンテキスト設定を変更する対策となりますが、外部ストレージをマウントして使用する場合はマウント時のオプションとしてコンテキストを設定します。

どのようなラベルを付ける?

RedHatのサイトを参考にします。"samba_share_t"のラベルが必要なようです。

コンテキストを変更する方法(マウントしない場合)

外部ストレージをマウントしない場合はこの方法でいけます。ただし、マウントするとコンテキストが上書きされてしまいます。

[root@hogeServer hoge]# semanage fcontext -a -t samba_share_t /mnt/usb_flash/share
[root@hogeServer hoge]# restorecon -v /mnt/usb_flash/share

コンテキストを指定してマウントする場合

コンテキスト指定はmountに-oコマンドを追加して行います。コンテキスト全体は元々付与されていたコンテキストを参考にして"system_u:object_r:samba_share_t:s0"とします。

[root@hogeServer ~]# mount /dev/sdb1 /mnt/usb_flash/share -o context="system_u:object_r:samba_share_t:s0"

"/dev/sdb1"の部分は環境により変わります。また、NTFSシステムのマウントは-tコマンドも必要です。以上の設定で再度アクセス確認を行って、問題無ければ完了です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

20 + 4 =