能書き
私的サーバー構築日誌:仕切り直しからの自宅サーバー構築の続きです。
Sambaでファイルサーバーを立てて、Windowsからファイルアクセスできるようにします。環境を汚すのがイヤだったので、SambaサーバーはDockerに閉じ込めます。同じ理由で、LDAPとの連携は諦めました。SambaはLDAPに何やら書き込むらしいので。
パスワードなども平文でdocker-compose.yml
ファイルに格納される手順になります。気になる方は、今回の手順は避けて下さい。
参考文献
- 【2023年06月版】Ubuntu22.04 で Docker + Samba で Windowsとファイル共有、ついでにサービス化 - Qiita … 今回はほとんどこれと同じ手順です。
- Dockerを使ってSambaサーバを立てる - Magnolia Tech
- Samba4を使ったファイルサーバの構築と外部LDAPサーバとの連携 - Qiita
- Ubuntu 22.04 Samba構築 - 手当たり次第に書くんだ … SambaはLDAPに対してSID等の情報を登録する、そうです。
- ユーザー登録 - ユーザー登録 - 私的サーバー構築日誌:LDAPサーバー OpenLDAP・ユーザー登録 - Qiita … 今回はLDAPとの連携はやめましたので、LDAPに登録されているユーザー情報は別途確認する必要があります。
準備
共有ディレクトリ
/srv/samba
を作って共有ディレクトリとします。
cd /srv
sudo mkdir samba
sudo chown $USER: samba
docker-compose.yml
cd
mkdir docker-samba
cd docker-samba
curl -O https://raw.githubusercontent.com/ServerContainers/samba/master/docker-compose.yml
例によってパッチを用意しました。用意すべきアカウントの追加などは適宜対応して下さい。環境変数などの設定に関してはこちらの本家説明を参照して下さい。説明は英語なので自動翻訳でどうぞ。
ACCOUNT=taro
SURNAME=familyname
PASSWORD=Ma9H%6jg
USERID=10000
GROUPID=10000
cat <<___ >samba.patch
9c9
< restart: always
---
> restart: unless-stopped
10,11d9
< # note that this network_mode makes it super easy (especially for zeroconf) but is not as safe as exposing ports directly
< # more about that here: https://book.hacktricks.xyz/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation#hostnetwork
13,15d10
< # uncomment to solve bug: https://github.com/ServerContainers/samba/issues/50 - wsdd2 only - not needed for samba
< #cap_add:
< # - CAP_NET_ADMIN
22,26d16
< # uncomment to disable optional services
< #WSDD2_DISABLE: 1
< #AVAHI_DISABLE: 1
< #NETBIOS_DISABLE: 1
<
29,42c19,21
< ACCOUNT_alice: alipass
< UID_alice: 1000
< GROUPS_alice: family
<
< ACCOUNT_bob: bobpass
< UID_bob: 1001
< GROUPS_bob: family
<
< # example for hashed password (user: foo | password: bar) - generated using create-hash.sh script.
< ACCOUNT_foo: "foo:1000:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:86C156FC198B358CCCF6278D8BD49B6A:[U ]:LCT-61B0859A:"
< UID_foo: 1002
< GROUPS_foo: family
<
< SAMBA_VOLUME_CONFIG_shared_home: "[Home]; path=/shares/homes/%U; valid users = alice, bob, foo; guest ok = no; read only = no; browseable = yes"
---
> ACCOUNT_$ACCOUNT: $PASSWORD
> UID_$ACCOUNT: $USERID
> GROUPS_$ACCOUNT: $SURNAME
44,45c23
< SAMBA_VOLUME_CONFIG_aliceonly: "[Alice Share]; path=/shares/alice; valid users = alice; guest ok = no; read only = no; browseable = yes"
< SAMBA_VOLUME_CONFIG_alicehidden: "[Alice Hidden Share]; path=/shares/alice-hidden; valid users = alice; guest ok = no; read only = no; browseable = no"
---
> SAMBA_VOLUME_CONFIG_${ACCOUNT}only: "[$ACCOUNT]; path=/shares/$ACCOUNT; valid users = $ACCOUNT; guest ok = no; read only = no; browseable = yes"
47,52d24
< SAMBA_VOLUME_CONFIG_bobonly: "[Bob Share]; path=/shares/bob; valid users = bob; guest ok = no; read only = no; browseable = yes"
<
< SAMBA_VOLUME_CONFIG_public: "[Public]; path=/shares/public; valid users = alice, bob, foo; guest ok = no; read only = no; browseable = yes; force group = family"
< SAMBA_VOLUME_CONFIG_public_ro: "[Public ReadOnly]; path=/shares/public; guest ok = yes; read only = yes; browseable = yes; force group = family"
<
< SAMBA_VOLUME_CONFIG_timemachine: "[TimeMachine]; path=/shares/timemachine/%U; valid users = alice, bob, foo; guest ok = no; read only = no; browseable = yes; fruit:time machine = yes; fruit:time machine max size = 500G"
54c26
< - /etc/avahi/services/:/external/avahi
---
> - ./etc_avahi_services/:/external/avahi
57,63c29
< - ./shares/alice:/shares/alice
< - ./shares/alice-hidden:/shares/alice-hidden
< - ./shares/bob:/shares/bob
< - ./shares/public:/shares/public
< - ./shares/homes:/shares/homes
< - ./shares/timemachine:/shares/timemachine
<
---
> - /srv/samba/$ACCOUNT:/shares/$ACCOUNT
___
patch --ignore-whitespace docker-compose.yml <samba.patch
起動と確認
docker compose up -d
共有ディレクトリの所有者をきちんとtaro
にしてやらないと、書き込めないようです。
cd /srv/samba
sudo chown $USERID:$GROUPID $ACCOUNT
同じLAN上にあるWindowsマシンから共有の具合を確認します。primary.home
が家庭内LANに設定しているウチのサーバーの名前です。
start \\primary.home
これでユーザーtaro
としてログインすると、taro
フォルダが表示され、編集可能になります。
仕舞い
成功が確認できたら、設定ファイルのパッチは不要なので削除しておきましょう。
cd
rm docker-samba/samba.patch
以上、sambaサーバーをDockerコンテナで立てました。これだけなら非常に簡単ですね。これだけなら。