母校のアドベントカレンダがあったので,昔を振り返りながら書いてみることにします.
ブログに書いた記事を具体的に書きます.
母校TKG
都立多摩科学技術高校という学校の4期生(2013年度入学)でした.
何やっていた
クラブ活動で低スペックマシンを使ったサーバーを構築していました.具体的には,ファイルサーバやWiki,SSH環境を構築して運用していました.
当時のマシン
熱がひどいのでケースなしで動かしていました.写真は2014年当時に撮影したものです.
当時は,パソコンが家電扱いされて購入できなかった為,使い古しのマシンを使っていました.
1号機
- CPU: Intel Celeron
- Memory: 1GB
- HDD: 160GB, 1TB
2号機
- CPU: Intel Celeron
- Memory: 512MB
- HDD: 160GB
構築したもの
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によって実現していました.
個人用ドライブです.SSH経由でも同一のコンテンツにアクセスできます.
当時の設定ファイルが残っていたので貼っておきます.
# ======================= 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連携して情報共有していました.
SSH
bashの制限ができる機能rbashを使ってリモートログイン用シェルを構築しました.
ログインスクリプト
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でフォームを作っていました.
監視
NagiosとMuninを導入してグラフを眺める程度のことをやっていました.
今ならログやプロセス,リソースを監視することを当たり前のようにやっていますが..
運用してみて
HDDが故障したり,データを間違って吹き飛ばすなど学びがありました.
低スペックなマシンでもシステムが作れること,それによって役立つものを作れることに当時は感動しました.
終わりに
高校生活を通じてシステムの構築や運用を体験できたことは貴重な経験でした.特にユーザーからフィードバックがあるとモチベーションにつながります.こんなことを高3の6月くらいまでやっていたら,大学に落ちて浪人したので,ハマりすぎは注意が必要です.
好きなことを見つけて,寝食を忘れるほど熱中できたことは幸運だったと思います.パソコンが校内に200台以上ある環境,詳しい先生など良い環境も影響したと思います.大学に入ってからは,経験を活かしてIT系の企業でアルバイトやインターンシップに参加しています.
@現役生 たまにクラブに顔を出すので,先生に聞いてみてください.
いかがでしたか? 遅刻してすみません