VirtualBoxを使ってDebianのセットアップをするメモ
全部まとまってるわあ
VirtualBox, Debianのインストール!
これの半分より下の部分を見てやろう
先駆者に感謝
Virtualbox入れる→落としてきたDebianのisoファイル指定する→起動する
Debianのisoファイルについて
素直にDownloadを押してページの一番上にあるやつを落とせばよい
netinstと書かれているのは必要最小限な構成で無駄がないらしい。
VirtualBoxのマネージャーで新しいの作るときの設定画面でUnattended installationがあったら切る
OSの自動インストール機能なので,多分LVM設定するときに不便だとおもう(試してない)
ともあれ切ることで上のサイトとほぼ同じように進められる
Windows勢「なんかエラー出てできん;;」
コントロールパネル>プログラム>有効化無効化云々から仮想マシンプラットフォームのチェック外す→再起動
VirtualBox開けたはいいけどパスワード入力しても何も反応しないんですけど
セキュリティ的に文字数さえわからないようにパスワードの入力中はechoを止めるのが一般的らしい
つまり普通に入力されているのでおk
言語日本語にしないほうがいいらしい
文字化けする
校舎PCでやってる人向け情報
自分のログインid直下にgoinfreというフォルダがある。これはその校舎PCのローカルに繋がっていて、42で与えられているデフォルト容量5GBじゃ足りない場合でも平気。活用しよう
ちなみにintranetからWalletで5GB追加購入することもできる
LVMのパーティションづくりはこの時にやったらいい ちゃんとEncryptedで作ろう
LVMはロジカル・ボリューム・マネージャーの頭字語
複数のハードディスクやパーティションにまたがった記憶領域を単一の論理ボリュームとして扱えるらしい
一回設定してしまえばあとは自動で管理してくれて、実際使う時に意識する必要はない ハイテク!
全体に言えるが、ミスったらVirtualBoxから全部吹っ飛ばしてやり直せばいいだけなのでまずは気楽にやってみよう
画面小せえ
開いたVirtualBoxの下端にアイコンが並んでいる。このうち四角が二重のやつを選んでVirtual ScreenからScaleを選択
パーティションのチェック
PDFとlsblkコマンドで出したやつを見比べる
rootでログインしよう
本当はなるべくrootでログインすべきではない(システムを破壊するような危険な設定も警告なしでできてしまうから)
ユーザー名はroot、パスワードはインストールの時に設定したやつ
忘れた?Virtual Boxから全部ふっとばしてインストールからやり直せばおk
ログアウトしたくなった
logoutとうつ
sudoコマンドをインストールしよう
これを入れないといじりたいファイルをいじれなくて困る
apt -y install sudo
aptとapt-get, apt-cacheの違いについてもまとまっている
aptとaptitudeの違い
aptitudeはなんかaptでインストールしないと使えなかった。aptより目に優しいらしい。両方使ってみたが大して変わらん。Aptitudeの方が文章っぽくはあるのかも
いろんなコマンドがあるね!インストールしてみよう
蒸気機関車が走るね!
名言が読めるね!
インストールした後実際に使うにはパスを通す必要があるみたい
Guest Additionsもインストールする
いれてもいいのかな?経験者求む
クリップボード共有したりできるようになる
やるべきことを確認しよう
何やればいいんだ?
ユーザをグループに追加する(コマンド集)
ユーザーを追加する
useradd (なまえ)
どこのグループに追加されているか確認する
groups (ユーザー名)
グループを作成する(ルート権限がいる)
groupadd (グループ名)
グループ削除
groupdel (グループ名)
ユーザーのグループを変更する
usermod -G (グループ名) (ユーザー名)
グループが複数ある場合は,で区切る
-Gでセカンダリグループ、-gでプライマリグループの変更
セカンダリとかプライマリってなに・そもそもグループを設定すると何が嬉しいの
変更ではなく追加したい場合は、さらに-aオプションを使う
グループの情報は/etc/groupに保存されている
sudoの設定をする
/etc/sudoersに色々書き込もう!
これはvisudoコマンドを使って開かないといけないみたい。
Debianのvisudoはデフォルトでnanoが開く(viなのに!?)らしく、viと操作が違う
nanoの操作まとめ。知らないと保存も抜けもできず立ち往生する
sudoersの設定についてめちゃくちゃ細かく載っているサイト群
パスワードが間違っている場合の試行回数
passwd_tries(整数で指定)
不正なパスワードを入れた時のメッセージ
badpass_message(文字列で指定、insultが有効になっているとどうなの?)
インプット、アウトプットのログを記録する(これ自体は目にやさしくない)
log_input, log_output(bool値)
ログファイルを置く場所を指定する
iolog_dir(文字列で指定)
↑を出したうえでさらに目にやさしいログファイルも出す
logfile=(path)
TTYモードを有効にする
requiretty(true)
sudoが利用できるパスを制限する
secure_path
などなど・・・
Defaults オプション=なにがし みたいな感じでかく。
目にやさしいログファイルをだしわすれた;;
journalctl sudoreplay などのコマンドでログを出せる
jounalctl -u (特定サービス名)
journalctl _COMM=(コマンド名) とかでフィルタリング
sudoreplay -l (検索したい単語)
ファイアウォール(UFW)の設定をする
まずUFWをインストール
apt -y install ufw
ufw statusでアクティブか否か、ポートも確認できる。ufw enableでアクティブにできる
一回enableにすると再起動した時も自動で起動する
disableで止める 再起動しても起動しないようになる
全てのポートをデフォルトで閉じる
ufw default deny
特定のポートを開く
ufw allow (番号)
とじる
ufw deny (ばんご)
ルールを削除する
ufw delete (ルール)
ufw delete allow 20 みたいなかんじ
ufw reload で適用
パスワードポリシーの設定をする
/etc/login.defsを開く
このファイルは名前が示す通り、「システムへのログインにまつわる設定を行うファイル」です。
このファイルで設定できることは色々ありますが、たとえば「パスワードの文字数の最大値・最小値」(PASS_MIN_LEN・PASS_MAX_LENで設定します)であるとか、「一般ユーザのUID/GIDの範囲」(UID_MIN・UID_MAXで設定します)などが設定できます。特にパスワードの文字数の最小値などは大きく設定することで、(ユーザには嫌がられるかもしれませんが)パスワードを長く設定しなくてはいけなくなるため、セキュリティを厳しくすることができます。
パスワードの有効期限、最短期限を設定
これらの設定はアカウント新規作成時のみ有効で、既存のユーザーには適用されない
160行目あたりのPASS_XXX_DAYSを書き換える
この設定がされていない既存ユーザに設定を適用する場合はchage -m (日数) (ユーザー名)
MINが-m, MAXが-M
chageコマンドは、ユーザーのパスワード有効期限を表示・変更するコマンド
Viで行数を表示するには:set number nanoではAlt+n
パスワードの期限が切れる何日前に警告を表示する
163行目、PASS_WARN_AGE
上と同様に、既存ユーザはchage -W (日数) (ユーザ名)で設定
この辺で設定したことはchage -l (ユーザー名)で確認できる
PAMについて
PAM ではパスワードの文字数やパスワードに含める文字の種類などいわゆる複雑さ(要件)について設定する箇所となります。 パスワードは最低12文字以上で、数字・英大文字・英小文字・記号をすべて含めるようにしたい というような場合は PAM を設定します。
pam_pwquality.so がパスワードの複雑さを検証するためのモジュールとなっていてそれを読み込んでいます。 パスワードの複雑さを設定する場合はこの pam_pwquality.so の設定を変更する必要があります。
まずPAMのパスワードの複雑さをみるライブラリ、libpam-pwqualityをインストールする
apt -y install libpam-pwquality
Pwquality.so、どこでロードしよう問題
一般的にはsystem-auth、password-authなどでロードするようだ
オプションは/etc/security/pwquality.confでも設定できるみたい
今回はここに書き込んでみる
コメントを解除して数値を設定する
以前のパスワードに含まれている文字が何文字以上含まれていてはいけない
defok=n
パスワードの最低文字数
minlen
何文字以上同じ文字を連続で含んではいけない
maxrepeat
パスワードに含むべき文字種(大文字、小文字、数字、記号のうち何種類か)
minclass
パスワード内に必要とする大文字・小文字・数字・記号の数(正の値で設定すると含んでいい最大の文字数,負の値で設定すると最低含まなければならない文字数)
ucredit, lcredit, dcredit, ocredit
チェックして引っかかったらリジェクトする(強制させる)
enforcing
パスワードにユーザ名を含んではいけない
user_check
他のファイルから.soよんで引数でかくときはenforcingなしでreject_usernameとかくだけでいいぽい
rootもこれに従わせる
enforce_for_root
パスワードの変更
パスワードポリシー変えたし!全部のユーザのパスワードを変更しよう!
passwd
自分のパスワードを入力→新しいパスワードを入力
引数にユーザー名を入れると他のユーザーのパスワードも変更できる
passwd -S (ユーザー名)で現在のパスワードのステータスを表示できる
ユーザーのログイン名
ユーザアカウントにロックされたパスワードがあるか (L) 、パスワードがないか (NP) 、または使用可能なパスワードがあるか (P)
パスワードが最後に変更された日付
パスワードの最小有効期間
最大有効期間
警告期間
非アクティブ期間
ホスト名の変更
システムのホスト名を確認しよう
hostname/ hostnamectl どっちかうつ
ホスト名を変更しよう
一時的変更(再起動すると元に戻る)
hostname (設定したい名前)
恒久的変更
hostnamectl set-hostname (設定したい名前)
SSHの設定をする
SSHを使ってRootにログインできないようにする
/etc/ssh/sshd_configを設定する
34行目 PermitRootLoginをNoに変更
ポートを好きな数に変更
コマンド sshd -tを実行して設定ファイルが正しいかチェック
何もエラーが表示されなければOK
/etc/ssh/ssh_configも設定する
ポートを変更
SSHとSSHDって何
ssh(クライアント) : 他のサーバにsshで接続する設定
sshd(デーモン) : 他のサーバからsshで接続されるときの設定
デーモンって何
デーモンとは、UNIX系OSでメインメモリ上に常駐して特定の機能を提供するプログラム。利用者の操作とは無関係に処理を行うバックグラウンドプロセスの一種で、別のプログラムや機器、通信相手など外部からの要求を受け付けて処理を実行したり、あらかじめ設定されたタイミングで自律的に特定の処理を実行したりする。
コマンドservice ssh statusでSSHがちゃんと働いてるかチェックできる
設定したらrebootしよう
自分のローカルからVirtualBoxのやつに接続してみよう
VirtualBoxの設定>ネットワーク>高度>ポートフォワーディングで4242から4242に設定
VirtualBox開いてる自分のPCのターミナルで
ssh -p 4242 (ユーザー名)@localhost
する
繋がったらOK
切りたくなったら exit ってうつ
スクリプトを作る
Cronを使って定期的に自動で実行してくれるスクリプトを作るよ
Cronで実行されるコマンドは実行ユーザーのホームディレクトリで実行される。(嫌なら実行するコマンド内でcdする)
コマンドの出力を文字列として扱いたい!
$(date), dateというようにする
echo "今日は$(date)です"
今日はSun Nov 18 12:51:28 JST 2018です
ログインしている全ての他のユーザーにメッセージを送信する
wall "なにがし"
OSやCPUのアーキテクチャ、ホスト名、カーネルのバージョンなどのマシンの情報を表示する
uname -a
物理プロセッサの数を表示する
grep physical.id /proc/cpuinfo | sort -u | wc -l
cpuinfoの中に書かれている。
grep ~: cpuinfoの中からphysical.idを含む行を検索する
sort -u: sortはテキストファイルを行単位でソートする -uは同一行は一つだけ表示するオプション
wc -l: WCはテキストファイルの文字数や行数を数える -lで改行の数を表示する
つまりファイルを開いてPhysical.idを含む行がCPU何個分表示されたかを見てる。
仮想プロセッサの数を表示する
仮想プロセッサって何よ
grep processor /proc/cpuinfo | wc -l
RAMの使用量を表示する
free -m | awk 'NR == 2 {used = $3; all = $2} END{printf "%u/%uMB (%.2f%%)", used, all, used/all*100}'
free -m: RAM容量をMB単位で表示
awk以下
NR==2
今までに処理してきた行数の合計。つまり今2行目を見ているということ
used = $3; all = $2
受け取った2行目の欄から変数を宣言
END
入力ファイルを読み終わった後にここの処理を行うよ
printf
値をフォーマットして出力
"%u/%uMB(%.2f%%)"
本文。%uは符号なし十進整数、%.2fでひとかたまりで、小数点以下二桁の小数表記、%%で%記号
used, all, used/all*100
入れる値
メモリの使用量と使用率を出力する
力尽きた。頑張れ dfで拾ってawkするだけ
lsblkで,rootとhomeとか自分が扱える場所をしらべ,そのサイズをきちんと丁寧に足し上げて算出しよう
CPUの使用率
top -d 1.0 -bn2 | grep 'Cpu' | awk ''NR == 2{print $7} | cut -c 4- | awk '{idle == $0}END{printf"%.1f", 100.0-idle}'
あんまりうまくでない.sedとかで一旦数字だけの列とかに置き換えてからawkしたほうがよさそう
具体的にはアイドル値が100だと直前のコンマとの間に空白ができずawkで指定する場所がズレこむ
えっ,そうだったの
前回起動した日時
uptime -s
LVMを使っているか
二つ変数を用意して,
$numoflvm=$(lvdisplay | grep "LV Path" | wc -l)
$lvmuse=$(if { $numoflvm -ne 0 ] ; then echo "yes" ; else echo "no" ; fi)
みたいにする
TCPの接続を確認
ss -t | wc -l | awk '{print $0-1}'
サーバーを利用しているユーザ数
who | awk '{print $1}'| sort | uniq |wc -l
uniqがほしい理由.同一ユーザでもTTYがちがうとwhoで二行分表示されるのでユーザ名で数える.
サーバーのIPv4アドレスとMACアドレス
hostname -I
ip address show して link/etherとかでgrep
Sudoが使われた回数
journalctl _COMM=sudo
スクリプトを定期的に自動で実行してくれるようにしよう
cronをつかってみよう
crontab -eして,エディタをえらんでそこに記入
(分) (時) (日) (月) (曜日) を数字で指定して,*が入っていると"any"の意味.
*/10 * * * * (実行したいコマンド)
これで10分ごとに指定したコマンドを実行する
スラッシュを入れると繰り返したい間隔を指定できる
とめる
systemctl disable cron (rebootしたときにとめる)
systemctl stop cron (即止める)
うごかす
上と同様に,enable, startでよさそう
ハッシュ値をとってみよう
Windows: certutil -hashfile xxx.vdi SHA1
おわり
以下、Q&A編
command not foundと表示される!!!
とりあえずsudo使ってもう一回試してみる
whereis (コマンド名) で場所を表示できる
環境変数を確認する
sudoersを確認する
cronって?
指定したプログラムの動作を予約できる
実行する頻度を細かく調整できるので、自動的に繰り返すことができる
以上によりサーバー管理者の負担とミスは減り、より効率良くサーバーの管理業務ができる
TTYって?
「標準出力のデバイスの接続先」らしい
RockyとDebianのちがい
Rocky→CentOSの後継 RedHat系
Debian→UbuntuがDebian系 シェアがでかい!
AptとAptitudeのちがい
AptitudeはGUIをもっているらしい?外部プロジェクト.派生apt.
Aptはapt-getの不具合を直したもの
ggr
Apparmor
プログラムにセキュリティプロファイルを結び付け,できることに制限をかける
ggr