投稿

ラベル(bash)が付いた投稿を表示しています

メールサーバの移行

イメージ
 自前のメールサーバを停止 これまで、自ドメインのメールサーバはVPS上に構築していた。 ・Ubuntu Server ・Postfix ・Dovecot ・spamAssassinと、BlackListの利用 Spam対策を行ってきたし、サーバ上でメールをトリガーにして各種プログラムを動かしたりしてきた。 メールサーバのメンテナンスは結構面倒くさくて、  ・Disk容量のチェック  ・不正アクセスのチェック  ・各種セキュリティパッチの適用 など、手間がかかる。 そこで、外部のサーバを利用することに…。 結構安くて使い勝手の良さそうなのが、「さくらのメールボックス」 3年契約で、3070円とな…。  メールアドレスは自分のだけなので、20GBまで利用可能!  (Gmailより大きいねぇ) ということで、早速契約。 アカウント設定を行って、既存のDNSを書き換える。WHOISも書き換えて完了。 SMTPとIMAPが利用できればOK。 ちょうど、GoogleがSPF設定していないと受信しないし、DKIMおよびDMARCに対応していないメールを弾くようになったので、対応しているのを確認。 さくらサーバ自体は、これまでお客さんのサーバとして何件も利用しているので、利用方法も難しくはない。  Webメールにも対応しているので、いざという場合にもありがたい。 ということで、各メールソフトの設定を変更。  PC(常時使用する3台)とタブレット、スマートフォンと台数は多いがそれ程手間はかからない。 問題は、旧サーバで送受信したメールの履歴だけれど、これはThunderbrdを使ってローカルに保存することで回避。  本当は、サーバtoサーバでMailboxに残そうとも考えたんだけど、古いメールはそれ程必要ないし、ローカルにバックアップしてあれば凌げるので、良しとする。 移行時にDNSの反映で若干時間がかかったものの、問題なく送受信できるのを確認して、作業完了。  これでメンテナンスの手間が減るので、安いもんです。

ソースコードのチェック

プログラマに求められることは何か… 毎年、非常勤として言語や環境設定、アルゴリズムなどを少し教えている。 ここ数年気になっていることがある。  自分のコードを書かない、書けない人の割合が増えているような気がしている。 確かに、Google先生に聞けば、いくらでもサンプルコードは入手できるし、解説も読める。以前に比べ格段に、ソースコードや開発に関わる情報を入手しやすくなっているとは思う。  そして、自分が作成しようとするプログラムで行き詰まって、検索したサンプルコードを参考に動くようにする。  これは、問題ないと思っている。  人のコードを読む→理解する→自分のプログラムで使えるように修正する(または利用する)→動かす→デバッグする…。  プログラマなら多分、普通の行動でしょう。  ところが、最近、Webに紹介されているコードをそのまま利用して、動く・動かないだけを確認する学生を目にするようになった。 課題を課す→同じ内容の問題と解答を探す→そのまま持ってきて提出する 他人のプログラムを入手→改行やコメントを付け加える→提出する これは、自分の考え・思考をコードに落としたことになるのか? 練習にもなっていないし、何も理解度が上がっていない…。 実力・経験値は一切向上していない…。 対策することに 他人のプログラムを、提出されて「はいOK」という訳にはいかない。 将来ソフトウェア関係の仕事をするのであれば、なおさらそんなことは許されない。  これまでは、各ファイルのmd5sumを取って、同一かどうか(不正しているかどうか)の判定を最初に行っていた。  ところが、最近は、コメントを書き加えるとか、無駄に改行やスペースを入れるという、Cheatまがいの手法を使うケースが目立ってきた。  仕方なく、コメントを無視し、スペースや改行を無視した上で、同一かどうかを判定することにした。 md5.sh 手軽に処理するためにシェルスクリプトで作成してみた。 md5.shで保存して、実行権限を付加してパスの通ったところに置けばOK。 findと併用するのを前提にしている。 #!/bin/bash # 元ファイルから改行・スペースを除去したハッシュ値を出力する # 結果は カレントディレクトリの$re

大量のパスワード生成

イメージ
良くあるんだけど… 客先のサーバの管理をしていると、アカウントの作成依頼が時々くる。 どうやって管理するかと言うとExcelやGoogle Spreadsheetに ユーザ名・パスワード、氏名、作成日などを記録しておく。 ユーザ名は、氏名から作成するので問題ないがパスワードはあらかじめ余分に生成して記録しておく。 使っていないパスワードが、あと1〜2個になったら、さらに生成して追記している。 ところが、パスワードをまとめて作れば作るほど、間隔が伸びるので作り方を忘れてしまう。 以前は、PHPで書いて、WEBアクセスで指定個数分出力させる方法も取っていたが、ブラウザを起動するのが面倒だ。 たまには、Commandの使い方の解説も含めて、記録しておこうと思う。 パスワードの作成 $ pwgen これで、160個のパスワードを生成してくれる。(図) ただしオプション無しだと本当にランダムに生成するので、たまたま強度の弱いパスワードが生成される。 そこで、通常は次のようなオプションを付加する。 $ pwgen -Ccns とか $ pwgen -CcnsB とか・・・ 使い方は以下の通り Usage: pwgen [ OPTIONS ] [ pw_length ] [ num_pw ] Options supported by pwgen:   -c or --capitalize Include at least one capital letter in the password   -A or --no-capitalize Don't include capital letters in the password   -n or --numerals Include at least one number in the password   -0 or --no-numerals Don't include numbers in the password   -y or --symbols Include at least one special symbol in the pa

ユーザーみて処理

bash使っていて 主にメモなんだけど…。 コンソール叩いていて、sshでリモート接続する場合が多い。 でもって、パスフレーズを60桁程度入力するのは面倒なので、keychainを利用している。 こいつを使えば、1度パスフレーズを入力すれば、バックグラウンドでssh-agent動かしてくれて、再入力の手間が省ける。 そこで、.bashrcの最後に #ssh keychain /usr/bin/keychain ~/.ssh/id_rsa source $HOME /.keychain/ $HOSTNAME -sh と書いていた。 ところが、管理者権限で作業しようとすると、 再度、パスフレーズを聞いて来る。 当然、rootではsshはしないので、ENTERでキャンセルしているのだけれど、これに気づかずコマンド入力し始めて、パスフレーズの入力を行っていることが多々有って…。 ということで、rootのときは、keychainを回避することにした。 if [ " ${USER} " != "root" ]; then #ssh keychain /usr/bin/keychain ~/.ssh/id_rsa source $HOME /.keychain/ $HOSTNAME -sh fi これで、OK。 作業中に、sudo -sしてrootになっても、パスフレーズの確認はされない。 シェルスクリプトをちょこっと書くだけで、精神衛生上非常に良いのでお勧め…。 逆に、rootのときだけ実行したい処理なんかも、同様に書いておけばお手軽ですな。 sudo コマンド で実行すれば良いのだろうけど、毎回sudo書くの面倒だし…。

Bash on Ubuntu on Windows

イメージ
WindowsなのかUbuntuなのか Anniversary Updateをインストールすると、bashが使えるようになる。 bashって何?って人は、使わなくても良いと思う。 LinuxやMac使う人は、端末(Terminal)を開いた時に動作しているShellの名称ですね。 色々なShellがあるのだけれど、bashはほぼ標準の地位にあるプログラム。 Ubuntuでは、標準になってます。 (Windowsでいうコマンドプロンプトと考えればよろしいかと。) で、これがWindowsでも使えるようになるという。 もちろん、cygwinのような形ではなく、Windowsのsubsystemとして動作するというではないか。 今回のUpdateを苦労してやったのは、この機能が使いたかったからなのですよ!! 導入してみる まずは、「設定」→「更新とセキュリティ」→「開発者向け」で「開発者モード」を選択。 続いて、「コントロールパネル」→「プログラム」→「プログラムと機能」→「Windowsの機能の有効化または無効化」を選択する。 すると、図のように「Windows subsystem for Linux(Beta)」があるので、チェックを入れて、OK。 少し待てば、完了する。 今度は、コマンドプロンプトを開く。 bash[enter] と入力すると、実際のインストールが開始される。 これは、結構時間がかかるはず。 各種バイナリを持ってきてインストールされます。 完了すると、ユーザ登録へと進みます。 要は、Windowsの中にUbuntuをインストールし、そこにユーザを作成するということですね。 この時、仮想マシンではないということですょ。 ユーザ名とパスワードを入力すれば準備完了。 実際に、ホームに移動し、lsを叩いた所です。 (ちゃんと、alias でllが登録されているところがUbuntuっぽいですゎ) ちゃんとインストールが完了すると、スタートメニューに登録されます。 Bash on Ubuntu on Windowsと表示されております。 ちなみに、裏に見えているのはt