
Ubuntu serverで家庭内サーバを爆誕
今回やったこと&目次
注意
この記事の内容で起こった不具合などは責任を取れませんのでご注意ください。
古いデスクトップのセットアップ
まずはサーバー用のpcが必要なのですが、ちょうど貰い物の古いデスクトップがあったので、それをパーツ交換して使って行くことにしました。
貰い物のデスクトップは自作pcでだいたいこんなスペックです。
phenom ii x6 1050t
RAM 4GB
HDD 75GB / 500GB
空冷クーラー
GIGABYTEのマザボ
GPUはGT720?(*GPUに関してはよく知らないのと今回使うubuntu serverはCUI環境なので基本無視です)
マザボの型番は忘れましたが、当然積んでるCPUなどに合わせた物でした。今回はメモリの増設とSSDへの換装、HDDの増設をします。細かくは
OSを以前富士通のノートのために購入&使用していた2.5インチ256GB SSDに
HDD 500GB / 1000GBを増設
メモリを4GBから14GBに増設
掃除
このくらいです。どのみちwin11などは入りませんし、今後10年使う予定もないので、CPUなどはそのままでいいと判断しました。ただOSを入れるのにHDDだと不便なのでSSDに、HDDは家に転がっていたものをいくつか増設しました。
メモリは現在、4GB 2GB 4GB 4GBで配置しています。メーカーも割と適当ですし、チャネルに関してもテキトウです。とりあえず動けばいいので…
掃除に関しては分解ついでにしました。ファンに割と埃がこびりつくんですよね…
Ubuntu serverのセットアップ
デスクトップの準備ができたので、Ubuntu serverのインストールをします。特別変更したことはないですが、最近のlinuxのようにGUIのインストーラがあるわけではないのと日本語がないので若干注意。
詳細なインストール方法については調べれば出てくるので割愛。sshは今回よく話からなったので後から環境構築してます。
インストールが完了して再起動したら、設定したユーザ名とパスワードでサーバーにログインしておきます。
Cockpitのセットアップ
Cockpitとはwebブラウザからサーバの管理ができるツールでGUI環境でストレージのマウントができたのでおすすめです。インストールはaptで。
//install
sudo apt install cockpit
//自動起動設定
sudo systemctl enable cockpit.socket
起動できたら他のpcのブラウザからサーバーのIPの9090ポート(例: 192.168.1.100:9090)へアクセスします。ipアドレスはサーバーのディスプレイに表示されているはず。あとブラウザによっては警告が出るかも。
アクセスできるとこんな画面になるのでユーザとパスワードを入力。

ログインできるとこんな画面になり、左のメニューから様々な操作ができます。再起動とかするにはもう一回認証が必要。(右上あたりに黄色の文字で管理者権限持ってます?的なことを聞かれる)。
↓の画面ではシステム情報や資源の使用率などが見られます。

個人的に役立った機能を
ストレージ
GUIでマウントやマウントポイントを設定できるので便利。
各ドライブの右の3点ボタンからフォーマットやマウントポイントの設定ができる。

ちなみに今回は「/mnt/server_500」みたいな感じで/mntにそれぞれマウントしてます。後からsambaでパスの記述に必要なのでメモしとくといいです。
コンソール
SSHが確立してない時に使える。おそらくhttpsで暗号化はされてると思うけど(sshとは違う話だと思う)普段は使ってないです。というかターミナルから入ったほうが楽。
SSHのセットアップ
sshとはsecure shellのの略で暗号化しながらリモートでpcのターミナルを使用できるツールです。ちなみに手の届かない遠隔地のサーバーをssh接続の際にシャットダウンすると誰かに電源を入れてもらわない限りサーバーを動かせません。
notionのメモ見ながらなんでもしかしたらもっとトラブルあったかも…&今回は宅内のみ
インストール
sudo apt install openssh-server
起動
sudo systemctl start ssh
ステータス確認
sudo systemctl status ssh
自動起動設定
sudo systemctl enable ssh
再起動
設定反映などで。
sudo systemctl restart ssh
設定をいろいろ変更
セキュリティやら何やらで設定をいくつか変更します。設定は /etc/ssh/sshd_config というファイルの中身を編集することで変更します。設定が飛ぶと面倒なので設定ファイルを別名でコピーしておきます。(実は面倒でやってなかったが紹介のため)
設定ファイルのバックアップ(コピー)
cpコマンドでコピーします。cpコマンドは「cp コピー前 コピー後」のように使用します。実際に参照されるのはsshd_configファイルなのでsshd_config_bkは無視されます。
ただ設定ファイルに問題が出てどうしても設定を戻したい時は、問題のファイルを削除し、sshd_config_bkを「mv sshd_config_bk sshd_config」などで名前を変更します。(やったことないけど多分これでできる&またcpでバックアップを作っておく)
//設定ファイルの親ディレクトリへ
cd /etc/ssh/
//ファイルをsshd_configからsshd_config_bkへ
cp sshd_config sshd_config_bk
これ以降はファイルを編集します。これは先ほどのブラウザでのコンソールやローカルのキーボードで操作します。
編集(nano)
個人的に好きなnanoで編集します。ちなみにnanoはctrl+oで保存ctrl+xで編集画面を閉じます。下に表示されていると思いますが…
sudo nano sshd_config
rootログインを禁止に
#PermitRootLogin no //このコメントアウトを外して↓のように
PermitRootLogin no
ポートを22以外に
今日、これが意味ないとかXで見かけましたが、ある程度意味はあるそうです。ただ22ポートだけ触っていく攻撃もあるようですし…あとこれしてないなら他も緩いのでは?と舐められそう…
他のポートを使用する際はウェルノウンポート(主要サービスが使用するポート0~1023)を避けたほうがいいでしょう。あと正式には「システムポート」っていうですね…。ちなみにポートの上限は65535だそう。
#Port 22 //このコメントアウトを外して
Port 50000 //とか適当に
クライアント(macとかサーバに接続する側)で鍵を作成
rsa暗号を利用して接続するそうです。
Macのターミナルで以下のコードを実行し、sshの鍵を作成します。コマンド実行後にいくらか質問があるので答えます。以下に抜粋した内容(ユーザ名とか適当)を
ssh-keygen -t rsa
//↓鍵の保存先を聞いている。基本はそのままエンター
Enter file in which to save the key (/Users/uliboooo/.ssh/id_rsa):
パスフレーズ(パスワード的な?)一応覚えられる文字列を入力。ssh接続時に入力が必要です。
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
//~~~~~~~~~~省略~~~~~~~~~~
公開鍵をmacからサーバへ
scpコマンドというファイルのサーバへのコピー等ができるものを使用。
「scp -P ポート ローカルのファイルパス サーバのユーザ名@サーバーのip:サーバーへのコピー先パス」
の構文で使用。以下のコマンドが例。id_rsa.pubが.pubになっていることを要確認。サーバーのユーザー名はuliboooo、ipは192.168.1.100とする。
scp -P 50000 ~/.ssh/id_rsa.pub uliboooo@192.168.1.100:~/.ssh/authorized_keys
これでエラーになったらおそらくサーバー側に~/.ssh/というディレクトリが存在しない。そのためサーバー側で以下コマンドを使用して作成。sudoするとおそらくファイルのパーミッションの影響で正常にコピーできないのでユーザ権限で行う。もしsudo -sしている場合はexitコマンドでユーザ権限に戻せる。
mkdir ~/.ssh
で再度scpコマンドを実行。
公開鍵の権限
サーバー側で以下のコマンドを使用して鍵のパーミッションを変更
cd ~/.ssh/
chmod 600 authorized_keys
サーバーへsshログイン
scpの-Pとは違い-p。
ssh -p 50000 uliboooo@192.168.1.100
SAMBAのセットアップ
sambaとはファイル共有ツールです。
インストール
sudo apt install samba
共有フォルダを作成
sataなどのHDDは別の操作が必要ですので次の項を参照してください。
//フォルダ作成
mkdir /share
共有フォルダを作成 Sata HDDの場合
マウントポイントの設定が必要なので先ほどのcockpitでブラウザから設定します。コマンドでもできますが結構面倒なのとミスるとubuntu serverが起動しなくなります。(2回やった)
すでに初期化しているので若干画面が違いますが、こんな感じで初期化やマウントをできます。どこかでマウントポイントの入力欄が出るので、そこで「/mnt/フォルダ名」にします。

sambaユーザの設定
sambaを利用してアクセスする際に使用するユーザを設定します。''は実際に入力する必要はないです。
もし linuxのユーザ以外を使う場合は以下で追加。
sudo user add 'new_user_name'
//sambaユーザのリスト表示
sudo pdbedit -L
//ユーザの登録。今回はuliboooo
pdbedit -a 'uliboooo'
//パスワードが求められるので設定。//パスはテキトウ
new password: 'abc'
sambaの設定
共有のための設定をします。設定は「/etc/samba/smb.conf」をいじります。
sudo nano /etc/samba/smb.conf
グローバル内に以下を記述。最後尾に[共有名]から各設定を記述。設定はいろいろやりましたがこのくらいが使いやすくてちゃんとアクセスできました。
[global]
unix charset = UTF-8
dos charset = CP932
workgroup = SAMBA
security = user
.....
# 最終行
[server_500]
path = /mnt/server_500
writable = yes
guest ok = No
read only = no
valid users = uliboooo
force create mode = 770
force directory mode = 770
inherit permissions = yes
設定ファイルのテスト
以下コマンドでファイルが正しいかを確認できます。
testparm
samba再起動 2024/11/07:修正
ssh 👉 samba に
普通にミスってました。すいません。
設定の反映。
sudo systemctl restart smb
macからアクセス
finderでcmd + kかメニューバー>サーバへ接続、からsmb://ipアドレスで接続。ユーザ名とパスワードを求められるので入力。

サイドバーからアクセスできます。

アクセスできない場合
//2024/09/15追記: パーミッションエラーの可能性を追記
Permission
共有出来たけどフォルダでファイルが作成できない場合などはサーバー側で共有してるフォルダへのアクセス権限(permission)が適切に設定されてない可能性があります。
パーミッションの詳細に着いては以下記事など
パーミッションに変更はchmodコマンドで行います。3桁の数字を用いて左から順にフォルダ(ファイル)の所有者、グループ、その他を対象に、数字によって設定します。
sudo chmod 770 共有フォルダのパス
Fire Wall
firewalldで弾かれた可能性があるのでufwコマンドで解除します。これで治らない場合はSElinuxとか…?それの解決は以下記事参考。
ufwコマンドのインストール&実行
sudo apt install ufw
sudo ufw allow samba
//許可リスト
sudo ufw app list
まとめ
急ぎで書いたのでちょっと怪しいともありますが一応共有しておきます。ちょっとサーバーとかsshとかセキュリティ的な話があるのでいつもよりは慎重になったほうがいいかなぁと思ったりしました。
あといつかRustシリーズで紹介しますが、webサーバぽくもできます。