高校のパソコン部で作っていたインフラを振り返る

[母校のアドベントカレンダ](https://qiita.com/advent-calendar/2019/tkg-ac2019)があったので，昔を振り返りながら書いてみることにします．

[ブログ](https://blog.koyama.me/archives/720)に書いた記事を具体的に書きます．

# 母校TKG

[都立多摩科学技術高校](http://www.tama-st-h.metro.tokyo.jp/)という学校の4期生(2013年度入学)でした．

# 何やっていた

クラブ活動で低スペックマシンを使ったサーバーを構築していました．具体的には，ファイルサーバやWiki，SSH環境を構築して運用していました．

# 当時のマシン

熱がひどいのでケースなしで動かしていました．写真は2014年当時に撮影したものです．

当時は，パソコンが家電扱いされて購入できなかった為，使い古しのマシンを使っていました．

## 1号機

- CPU: Intel Celeron
- Memory: 1GB
- HDD: 160GB, 1TB

![2014-04-07 12.25.40.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/2564ddb8-52a4-f346-c3af-4e6e9f92b5cd.jpeg)

## 2号機

- CPU: Intel Celeron
- Memory: 512MB
- HDD: 160GB

![2014-10-30 17.02.07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/2648cc93-7f11-93d8-9281-a3e3e097febf.jpeg)

# 構築したもの

## OpenLDAP

クラブのメンバーごとにアカウントを発行して，LDAPで管理していました．

ソースコードからビルドして構築しました．当時の構成は使われていないようなのでDNも書いておきます．

```
管理者DN: cn=Manager,dc=pc-club,dc=jp
グループDN: ou=Groups,dc=pc-club,dc=jp
ユーザDN: ou=Users,dc=pc-club,dc=jp
```

当時作成したマニュアルを見ると以下が書かれていました．たしか，これで1ヶ月くらいハマった記憶があります．

> LDAPの設定(config)を変更した場合は slap.dの中身を移動して，slaptest コマンドでslap.dディレクトリの中身を再生成してください。

## Samba

Samba 4.0が出たばかりでLDAP連携が怪しかったので，Samba 3.6をソースから入れました．LDAP連携にはsmbldap-toolsを使いました．

クラブ内部用の共有ドライブです．ユーザごとに所属組織には読み書きの権限を付与して，それ以外は読み取り専用に設定していました．
これはファイルシステムのACLによって実現していました．

![smb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/434b8478-5ca1-5a19-462a-cd4fb54e2026.png)

個人用ドライブです．SSH経由でも同一のコンテンツにアクセスできます．

![smb2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/28bc0338-913a-e016-28b0-7963ee2f6f68.png)

当時の設定ファイルが残っていたので貼っておきます．

```
# ======================= NOTE =======================
#
# +++ Create utmp log +++
# $ touch /var/log/samba/utmpx 
# 
# +++ Change logrotate settings (utmp) +++
# $ vi /etc/logrotate.conf
# -----------------------------------
# /var/log/samba/utmpx {   <-ADD
#     missingok
#     weekly
#     create 0600 root utmp
#     rotate 10
# }
# -----------------------------------
#
# +++ Show utmp log +++
# $ last -f /var/log/samba/utmpx
#
# +++ Change logrotate settings (audit) +++
# $ vi /etc/logrotate.d/syslog
# -----------------------------------
# /var/log/spooler
# /var/log/samba/audit.log   <-ADD
# { 
# sharedscripts 
# -----------------------------------
#
# +++ Change log settings (audit) +++
# $ vi /etc/rsyslog.conf
# -----------------------------------
# *.info;mail.none;authpriv.none;cron.none;user.none      /var/log/messages   <-CHANGE
# user.*     -/var/log/samba/audit.log   <-ADD
# -----------------------------------
#

[global]
#CHARSET
  unix charset = UTF-8
  dos charset = CP932
  display charset = UTF-8
#WORKGROUP
  workgroup = TK
  server string = PC-Club Server
  netbios name = PCC
  wins support = no
  dns proxy = no
#AUTH
  security = user
  admin users = Administrator
  invalid users = @wheel
  map to guest = Bad User
  guest account = nobody
#LDAP
  passdb backend = ldapsam:ldap://10.5.25.242
  ldap suffix = dc=pc-club,dc=jp
  ldap admin dn = cn=Manager,dc=pc-club,dc=jp
  ldap user suffix = ou=Users
  ldap group suffix = ou=Groups
  ldap machine suffix = ou=Computers
  ldap ssl = off
#SYNC PASSWORD
  ldap passwd sync = yes
  unix password sync = yes
  passwd program = /usr/bin/passwd %u
#CFS OPTION
  vfs objects = full_audit
#CONNECTION
  max protocol = SMB2
  socket options = TCP_NODELAY SO_RCVBUF=16384 SO_SNDBUF=16384
  deadtime = 15
#DISK(MB)
  max disk size = 50000
#LOG
  utmp = yes
  utmp directory = /var/log/samba/
  syslog = 1
  log level = 1
  log file = /var/log/samba/log.%m
  max log size = 50
#FILE ACCESS
  inherit owner = yes
  hide dot files = yes
  dos filetime resolution = yes
  fake directory create times = yes
  hide dot files = yes
  hide unreadable = yes
  hide special files = yes
  hide files = /.*/bin/
  create mask = 0775
  directory mask = 0775
#ACL
  acl map full control = false
  acl group control = no
  inherit acls = yes

[netlogon]
  comment = Logon Drive
  path = /samba/netlogon
  browsable = no
  writable = no
  guest ok = yes
  hide dot files = no
  valid user = Administrator

[groups]
  comment = Groups Drive
  path = /samba/groups
  browsable = yes
  writeable = yes
  guest ok = no
  # LOG
  full_audit:success = mkdir rmdir open rename unlink

[pcc_homes]
  comment = Users Drive
  path = /home/%U
  browsable = yes
  writable = yes
  guest ok = no

[%U]
  comment = Users Drive
  path = /home/%U
  browsable = no
  writeable = yes
  guest ok = no
```

## Apache

Dokuwikiをインストールして，LDAP連携して情報共有していました．

![wiki.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/1d800a2c-9ff4-25e1-22c3-305c3e605491.png)

## SSH

bashの制限ができる機能rbashを使ってリモートログイン用シェルを構築しました．

![ssh.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/02511697-4530-ad61-2993-a3dc149fbbb6.png)

## ログインスクリプト

Windowsのネットワークドライブをマウントするために，Batchを書いていました．

```
@echo off
rem 背景色・文字色
color 1F
rem タイトル
title [ログイン]パソコン部ファイル共有サーバー
rem 接続先
set SRV_IP=10.5.25.248
rem 切断
net use X: /delete
net use Y: /delete

cls

rem サーバーの動作確認
echo [サーバー接続中]
echo サーバの動作を確認しています。
ping %SRV_IP% -n 1 -w 1000 > nul
cls
	if errorlevel 1 goto ERROR

rem お知らせ取得
call \\%SRV_IP%\netlogon\info.bat

rem ユーザー認証
echo ――――――――― [ パソコン部ファイルサーバー ] ―――――――――
echo.
echo ・パスワード変更や使い方はFirefoxで「http://pcc2.tama-st-h.local/」へアクセス。
echo ・パスワードとユーザー名の入力後は[Enterキー]を押下を忘れずに。
echo.
:START
echo 〇ユーザー名
set /p ACCOUNT=""
  if "%ACCOUNT%" == "" (goto START)
echo 〇パスワード(非表示)
net use X: \\%SRV_IP%\groups * /user:%ACCOUNT% /persistent:no > nul
  if errorlevel 1 goto START

rem メッセージ
echo [接続成功]
echo.

rem pcc_homesマウント
start /b cmd /c net use Y: \\%SRV_IP%\pcc_homes /persistent:no > nul

rem 遅延処理
ping localhost -n 3 > nul

rem お知らせ取得
call \\%SRV_IP%\netlogon\success.bat
exit /b

rem エラー発生時
:ERROR
echo [接続失敗]
echo サーバーが動作しているか確認してください。
echo 動作の時間は15:00～18:00です。
rem 遅延処理
ping localhost -n 3 > nul
exit /b
```

## パスワード変更フォーム

Webからパスワード変更できるようLDAP連携したApache Basic認証 + PHPでフォームを作っていました．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103672/1b5a25ad-6c27-50a5-9b35-661ce9369eda.png)

https://github.com/tomoyk/php-smbldap-passwd

## 監視

NagiosとMuninを導入してグラフを眺める程度のことをやっていました．

今ならログやプロセス，リソースを監視することを当たり前のようにやっていますが．．

# 運用してみて

HDDが故障したり，データを間違って吹き飛ばすなど学びがありました．
低スペックなマシンでもシステムが作れること，それによって役立つものを作れることに当時は感動しました．

# 終わりに

高校生活を通じてシステムの構築や運用を体験できたことは貴重な経験でした．特にユーザーからフィードバックがあるとモチベーションにつながります．こんなことを高3の6月くらいまでやっていたら，大学に落ちて浪人したので，ハマりすぎは注意が必要です．

好きなことを見つけて，寝食を忘れるほど熱中できたことは幸運だったと思います．パソコンが校内に200台以上ある環境，詳しい先生など良い環境も影響したと思います．大学に入ってからは，経験を活かしてIT系の企業でアルバイトやインターンシップに参加しています．

@現役生 たまにクラブに顔を出すので，先生に聞いてみてください．

_いかがでしたか？_  遅刻してすみません :pray: