能書き
私的サーバー構築日誌:仕切り直しからの自宅サーバー構築の続きです。
MicroServer N54L に Ubuntu24.04LTS をインストールしてZFSで使うように設定した我が家のファイルサーバですが、今回は Samba でファイル共有します。
と言っても、今回は非常に基本的な設定だけです。ネットを検索すればそこら中に記事が転がっているので、参考文献は示しません。
目標
- Ubuntuサーバーのユーザーに対してアクセス権を付けて、Windowsマシンからのアクセス(読み書き、読み出し専用)を確認
インストール
sudo apt update -y && sudo apt upgrade -y
sudo apt install -y samba
Sambaサービスが起動した事を確認します。
sudo systemctl status smbd
ユーザー追加
Sambaで使用するユーザーはOSの一般ユーザーです。既に用意したユーザーがあればそれで良いです。
新しく追加するなら、例えばtaro
は下記のようにします。
通常はホームディレクトリ内に用意したサブディレクトリをSambaでそのユーザーだけに公開すると思いますが、今回はファイルサーバーのZFSフォーマットしたディレクトリを公開します。その都合でtaro
にはホームディレクトリを作りません。Samba用ユーザーという事でログインも禁止してみます。
sudo useradd -M -s /usr/sbin/nologin taro
そしてSamba用パスワードはsmbpasswd
コマンドを管理者権限で実行して設定します。
sudo smbpasswd -a taro
共有フォルダを作成
共有対象となるフォルダを作成します。何でもいいのですが、先程作成したtaro
ユーザー用にZFSのフォルダを用意してみます。
cd /mnt/tank
sudo mkdir taro
sudo chown taro: taro
sudo chmod 777 taro
設定・読み出し専用
いよいよSambaの設定です。/etc/samba/smb.conf
ファイルを修正します。
まずは読み出し専用で設定してみます。
cat <<___ | sudo tee -a /etc/samba/smb.conf >/dev/null
[taro]
path = /mnt/tank/taro
browsable = yes
guest ok = no
read only = yes
___
色んな記事にはここでsmbd
を再起動して反映と書いてありますが、実際にやってみると再起動不要のようです。/etc/samba/smb.conf
を書くといきなり利用可能になりました。
※後述しますが、smbd
はちゃんと再起動するのが正しいようです。
Windowsマシンからエクスプローラーで\\172.16.1.3
(172.16.1.3は我が家のファイルサーバーのIPアドレス)を開いてみます。
実験で、ファイルを作成してみます。
echo "test" > /mnt/tank/taro/test.txt
sudo chown taro: /mnt/tank/taro/test.txt
クライアント側(Windowsマシン)で表示を更新すると、test.txtが表示されます。が、編集しても保存できません。
新しいテキストドキュメントなどを作成しようとしても権限不足のエラーが表示されます。
これは正しい挙動ですね。
以上で読み出し専用の設定が出来ました。
設定・読み書き可能
先程の/etc/samba/smb.conf
のread only
をno
に変えます。
sudo sed -i -e '/^read only =/c read only = no' /etc/samba/smb.conf
今度は書き換えただけでは反映しませんでした。きちんとsmbd
を再起動しましょう。
sudo systemctl restart smbd
今度はクライアント側(Windowsマシン)でtest.txtも編集できますし、新しいファイルも作成できます。
仕舞い
しまった。Subversion登録を忘れてました。
まずは追加分の確認から。
sudo svn st /etc
予想以上に大量のファイルが追加されてました。参った。
$ sudo svn st /etc
? /etc/alternatives/tdbbackup
? /etc/alternatives/tdbbackup.8.gz
? /etc/apparmor.d/samba
M /etc/group
M /etc/gshadow
? /etc/init.d/nmbd
? /etc/init.d/samba-ad-dc
? /etc/init.d/smbd
M /etc/ld.so.cache
? /etc/pam.d/samba
M /etc/passwd
? /etc/rc0.d/K01nmbd
? /etc/rc0.d/K01samba-ad-dc
? /etc/rc0.d/K01smbd
? /etc/rc1.d/K01nmbd
? /etc/rc1.d/K01samba-ad-dc
? /etc/rc1.d/K01smbd
? /etc/rc2.d/S01nmbd
? /etc/rc2.d/S01samba-ad-dc
? /etc/rc2.d/S01smbd
? /etc/rc3.d/S01nmbd
? /etc/rc3.d/S01samba-ad-dc
? /etc/rc3.d/S01smbd
? /etc/rc4.d/S01nmbd
? /etc/rc4.d/S01samba-ad-dc
? /etc/rc4.d/S01smbd
? /etc/rc5.d/S01nmbd
? /etc/rc5.d/S01samba-ad-dc
? /etc/rc5.d/S01smbd
? /etc/rc6.d/K01nmbd
? /etc/rc6.d/K01samba-ad-dc
? /etc/rc6.d/K01smbd
? /etc/samba
M /etc/shadow
M /etc/subgid
M /etc/subuid
? /etc/systemd/system/multi-user.target.wants/nmbd.service
? /etc/systemd/system/multi-user.target.wants/samba-ad-dc.service
? /etc/systemd/system/multi-user.target.wants/smbd.service
? /etc/systemd/system/nmb.service
? /etc/systemd/system/samba.service
? /etc/systemd/system/smb.service
? /etc/ufw/applications.d/samba
個別に拾い上げるのも面倒なので、全部まとめて(今回のtaro
ユーザーも含めて)追加してしまいましょう。
cd /etc
sudo svn st | grep "^?" | cut -b9- | sudo xargs -I{} find {} -type f -or -type d -or -type l | sudo xargs -rt svn add
コミット。
sudo svn ci -m"added samba and the test user 'taro'"
これで一通り完了です。基本的なディレクトリ公開だけなら簡単でした。