お知らせ
こんにちは、愛知工業大学システム工学研究会です。
この記事は、2021-04-05に書かれた記事です。
間違った内容や古い内容が紛れていますが、過去の記事を残す一環として記事を書きます。
よろしくおねがいします。
Raspberry pi[Ubuntu]でファイル鯖[Samba]を構築
目次
- はじめに
1.1. 対象者
1.2. 目標
1.3. Sambaとは - 構築環境
2.1. ハードウェア
2.2. ソフトウェア - 構築手順
3.1. パッケージのインストール
3.2. zlib のインストール
3.3. Samba のインストール
3.4. 設定ファイルの配置
3.5. ユーザ作成
3.6. グループ作成
3.7. グループにユーザ追加・削除
3.8. Samba用ユーザ追加
3.9. 共有用のフォルダ作成
3.10. 設定ファイルの編集
3.11. Samba の起動
3.12. ポート開放 - ファイル鯖に接続(Mac & Windows10)
- 参考資料
1. はじめに
今回は、ディストリビューションの固定されているパッケージから構築するのではなく、公式より公開されているソースファイルから構築していきます。ディストリビューションからでは、簡単で早く構築できますが、バージョンが古く、セキュリティ面での不安要素があります。対して、ソースファイルからでは少し複雑で時間がかかりますが、最新のバージョンで構築でき、バグの存在が確認された場合はパッチの公開もされます。長期運用や本番環境を検討する場合は、迷うことなく後者を選択するべきです。
1.1. 対象者
今回は以下の項目に心当たりがある方を対象にしています。
また、CUIの操作、vim等のテキストエディタの操作に慣れていることも含みます。テキストエディタについてはvim以外でも構いません。
- Raspberry pi を使って何かしてみたい
- 初めてファイル鯖を構築する
- 自宅でファイル鯖の運用をしてみたい
- ソースファイルからの構築をしてみたい
1.2. 目標
少人数でファイル共有するための環境を構築すること
1.3. Sambaとは
本当に簡単に言うとNASのようなものと認識しても問題ないです。WindowsやMac、Linuxとのファイル共有ができます。今回は記載していませんが、Active Directory と連携し、アクセス管理することもできます。
2. 構築環境
事前に Raspberry pi のセットアップが終了していることが前提です。
2.1. ハードウェア
項目 | 詳細 |
---|---|
Raspberry pi | 3 Model b+ |
micro SD | 32GB |
2.2. ソフトウェア
項目 | バージョン |
---|---|
Ubuntu | 20.04 |
Samba | 4.13.4 |
3. 構築手順
3.1. パッケージのインストール
動作要件に必須であるパッケージのインストールをしていきます。
> apt install -y gcc make acl python3 libpython3-dev pkg-config libgnutls28-dev libjansson-dev libarchive-dev libacl1-dev \ libldap2-dev libldap2-dev libpam0g-dev libgpgme-dev libparse-yapp-perl libdbus-1-dev
3.2. zlib のインストール
Zip や gzip に使われている圧縮アルゴリズムをライブラリ化された zlib のインストールをしていきます。これも動作要件に必須です。
> cd /home/ubuntu > wget http://zlib.net/zlib-1.2.11.tar.gz > tar -zxf zlib-1.2.11.tar.gz -C /usr/local/src > cd /usr/local/src/zlib-1.2.11 > ./configure > make && make install
3.3. Samba のインストール
> cd /home/ubuntu > wget https://download.samba.org/pub/samba/stable/samba-4.13.4.tar.gz > tar -zxf samba-4.13.4.tar.gz > cd samba-4.13.4 > ./configure --without-ad-dc 'configure' finished successfully (5m32.860s) > make && make install Waf: Leaving directory `/home/ubuntu/samba-4.13.4/bin/default' Build commands will be stored in bin/default/compile_commands.json 'install' finished successfully (25m53.303s) > /usr/local/samba/sbin/smbd -V Version 4.13.4
3.4. 設定ファイルの配置
デフォルト設定ファイルを特定のディレクトリに配置する。この設定ファイルを配置しないと起動に失敗します。
> cd /home/ubuntu/samba-4.13.4 > cp examples/smb.conf.default /usr/local/samba/etc/smb.conf
3.5. ユーザ作成
ファイル鯖にアクセスするためのユーザを作成するためには、Linuxユーザの作成が必要です。今回は3ユーザ作成します。
ユーザの作成には、パスワード、名前などの入力項目がありますが、下記の操作例ではすべての項目に情報を入力していますが、必要なのはパスワードと名前だけです。残りの項目は未入力のままでも問題ありません。
> adduser user01 Adding user `user01' ... Adding new group `user01' (1001) ... Adding new user `user01' (1001) with group `user01' ... Creating home directory `/home/user01' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for user01 Enter the new value, or press ENTER for the default Full Name []: hoge Room Number []: 001 Work Phone []: 00012345678 Home Phone []: 01012345678 Other []: none Is the information correct? [Y/n] Y > cat /etc/passwd | grep user01 user01:x:1001:1002:hoge,001,00012345678,01012345678,none:/home/user01:/bin/bash ### 上記と同手順でユーザ"user02"、"user03"を追加
3.6. グループ作成
ファイル鯖へのアクセス権限をグループ単位で管理するためにグループを作成します。
> groupadd group-A > cat /etc/group | grep group-A group-A:x:1004:
3.7. グループにユーザ追加・削除
グループ単位で管理するために、アクセスを許可するユーザをグループに追加していきます。
> gpasswd -a user01 group-A Adding user user01 to group group-A > gpasswd -a user02 group-A Adding user user02 to group group-A > gpasswd -a user03 group-A Adding user user03 to group group-A > getent group group-A group-A:x:1004:user01,user02,user03
グループ単位でのアクセス制御をしているため、アクセス制限をかける場合はグループからユーザを削除します。
> gpasswd -d user02 group-A Removing user user02 from group group-A
3.8. Samba用ユーザ追加
Smaba用のユーザを追加します。入力項目はパスワードのみです。パスワードは必ずしもLinuxユーザを作成した時のパスワードと同じである必要はありません。
> /usr/local/samba/bin/smbpasswd -a user01 New SMB password: ←任意のパスワード入力 Retype new SMB password: ←もう一度パスワード入力 Added user user01. ### 上記と同手順でSambaユーザ"user02"、"user03"を追加
3.9. 共有用のフォルダ作成
フォルダを複数作成し、各フォルダにアクセス権限を付与することも可能ですが、今回は「share01」フォルダでファイルの共有をします。
mkdirコマンドでフォルダを作成後、chmodコマンドでフォルダのアクセス権を変更します。
> mkdir /home/share01 > chmod 770 /home/share01 > chgrp group-A /home/share01
3.10. 設定ファイルの編集
Sambaへのアクセス制限や編集&読み込み権限付与などの設定をしていきます。
不要な設定は削除してもいいですが、今回はコメントアウトしていきます。
記事の冒頭でも書きましたが、ファイルの編集にはvim以外でも構いません。
> vim /usr/local/samba/etc/smb.conf #======================= Global Settings ======================= [global] ## Browsing/Identification ### # Change this to the workgroup/NT-domain name your Samba server will part of # workgroup = MYGROUP ###コメントアウトする workgroup = WORKGROUP ###追記 dos charset = CP932 ###追記 unix charset = UTF-8 ###追記 #======================= Share Definitions ======================= # Un-comment the following (and tweak the other settings below to suit) # to enable the default home directory shares. This will share each # user's home directory as \\server\username ####### コメントアウト ####### #[homes] # comment = Home Directories # browseable = no # writable = yes ########################### ########### 追記 ########### [share01] Comment = share folder path = /home/share01 writable = yes guest ok = no valid users = @group-A ########################### ####### コメントアウト ####### #[printers] # comment = All Printers # path = /usr/spool/samba # browseable = no ## Set public = yes to allow user 'guest account' to print # guest ok = no # writable = no # printable = yes ###########################
設定ファイルに入力ミスや書き方が正しいかの確認をします。「Press enter to see a dump of your service definitions」と表示されれば問題ありません。そして、Enterキーを押すと、設定ファイルに記載されている内容が表示されます。
> /usr/local/samba/bin/testparm /usr/local/samba/etc/smb.conf Press enter to see a dump of your service definitions
3.11. Samba 起動
設定が完了したところで、Sambaを起動していきます。
起動後は実際にプロセスが動いているか、psコマンドで確認していきます。以下のように「smbd」のプロセスが表示されることを確認します。
> /usr/local/samba/sbin/smbd -D > ps -e | grep smbd 77178 ? 00:00:00 smbd
smb.conf の内容を変更した際は以下のコマンドを実行し、設定ファイルを再読み込みします。
> /usr/local/samba/bin/smbcontrol smbd reload-config
Sambaを停止するには以下のコマンドを実行します。
> /usr/local/samba/bin/smbcontrol smbd shutdown
3.12. ポート開放
ファイル鯖に接続するために特定のポート開放をします。
すでにSSH接続するためのTCPの22番ポートの開放をしている場合は「ufw allow proto tcp to 0.0.0.0/0 port 22」の実行は必要ありません。TCPの445番ポートを開放後に、「ufw reload」を実行し、ufwを再読み込みしてください。
> ufw allow proto tcp to 0.0.0.0/0 port 22 Rule added > ufw allow proto tcp to 0.0.0.0/0 port 445 Rule added > ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y <-- Enter"y" Firewall is active and enabled on system startup > ufw status Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 445/tcp ALLOW Anywhere
4. ファイル鯖に接続(Mac & Windows10)
- Mac の場合
- Finderを開く
- ⌘+K を押下
- 接続先を「smb://ファイル鯖のIPアドレス/share01」を入力し、「接続」をクリック
- 以下の項目を入力し、「接続」をクリック
- ユーザの種類:登録ユーザ
- 名前:「user01」or「user02」or「user03」
- パスワード:各Samba用ユーザを追加した際に登録したパスワード
- ネットワークドライブに接続できることを確認
- Windows10 の場合
- 左のサイドメニューから「PC」をクリック
- 上部のメニューから「コンピュータ」をクリック
- 「ネットワークドライブの割り当て」をクリック
- ドライブは未割当のドライブを選択、フォルダ名には「\ipアドレス\share01」を入力し、完了をクリック
- ネットワークドライブに接続できることを確認