Gitlab CI/CDを使って開発・本番環境へのデプロイを自動or手動(Gitlabの画面から)で行えるようにする

諸事情が有り、Gitlabにpushと同時に対象の環境へ自動的にデプロイをさせたり、手動でデプロイさせる際にGitlab上でボタンクリックで行わせたいということがあった。 で、Gitlab CI/CDを用いてブランチごとに各環境へのデプロイを行わせる事にした。Gitlab CI/CDでは実行する処理をそのままbashスクリプトで書けるので、デプロイの方法は一般的であろうgit clone(fetch)後にその内容をrsyncでssh越しに同期させる方式を取る。

今更説明せんでもいいかなと思うのだけど、Gitlab CI/CDを使ってデプロイをする際は以下の役割(機能)を持つノードが必要にな...


ふとしたことで、不特定多数のユーザにssh接続環境を用意してハンズオン環境を作る際、sshログインと同時にdockerのインスタンスにアクセスさせることができれば、各ログインセッションごとに同じ環境を個別に用意できるのではないかと思ったので、やってみることにした。 (といっても、やってることは単純でsshのauthrozied_keysのcommandに docker run -it image /bin/bash を書いといてやることで、指定したイメージから個別にコンテナを起動してログインさせているだけなのだけど…) メリットとしては、例えば

  • 複数名でログインしている場合に、1名が必...

tmuxの恩恵(セッションの保持とか)は受けたいけど、tmuxに慣れておらずうまく使えない。 個人ではなく、チームで使う場合とかだとなおさらそういった事があるので、踏み台サーバでssh接続時にセッションがあったら選択画面を、そうでない場合は新規セッションを開始するようなスクリプトを作ってみる。

鍵認証だと仮定して、以下のようなスクリプトをauthorized_keysのcommandで指定してやることで、接続時にセッションの有無を確認して再接続or新規セッション作成を選択させることができる。 (一応、こっちにも残してる)

#!/bin/bash

function usage {...

UbuntuやCentOSに入ってるwhiptailでTUIっぽいスクリプトを作成する(+注意点とか)

個人的に、数字を入力してリストから選択するとかがあまり好きではなく、コンソール上でもカーソルキーとかで選択したりしたいタイプなのだが、実はUbuntuやCentOSの場合ならインストール時にwhiptailというコマンドがバンドルされている。 これ、なんのコマンドなのかというとOSインストール時とかに表示される疑似GUIみたいなTUIを扱えるようにするコマンドで、まあ↓のようなやつ。多分一回は見たことあると思う。

で、このコマンドでは色々な種類のレイアウト(リストからの選択や入力など)をオプションで指定ができる。 ncursesとか使って別途プログラムを書くという方法もあるけど、そこま...


だいぶ前に、CentOS 7にKeycloakをインストールして触ってみるということをしていたが、今回はちゃんとsystemdで管理できるようにインストールをしてみる。 基本的なインストール方法は変わらないが、一応事前準備から進めていく。

1.事前準備

前回と変わらず、以下のコマンドを実行して実行ユーザの作成や必要となるパッケージを導入しておく。

useradd keycloak
yum install -y git wget

動作にMavenが必要になるので、それらをインストールする。 まずはOracle JDKのインストールを行う。

wget --no-check-...

sshというと22番ポートを利用するものだが、環境によっては利用できない事がある。 で、そういった場合だと443番ポート(SSL)を利用する場合が多いのだが、Webサーバなんかの場合だとすでにhttpsで使用している場合が多い。 そんなとき、sshとsslを443番ポートで同居させて、それぞれのパケットのときは適切に割り振りをしてくれるリバースプロキシのような動作をしてくれるのが『SSLH』になる。

1. インストール

CentOSやDebian系のOSを使っている場合は簡単で、yum(epelが必要)やaptからインストールが可能だ。

Debian/Ubuntu系の場合

s...

コンソール上でリストから選択してsystemdの管理が行える『Chkservice』

調べ物をしていたところ、コンソール上でsystemdの内容をリスト表示し、そこから選択して管理が行えるTUIのツール『Chkservice』なるツールを見かけたので、試しに入れてみることにした。

1. インストール

Ubuntuの場合はリポジトリが用意されているようなので、そちらからインストールができる。

Ubuntuの場合

sudo add-apt-repository ppa:linuxenko/chkservice
sudo apt-get update
sudo apt-get install chkservice

CentOSの場合

CentOSなどにイン...


あまり写真とか撮らないのだけど、ふとLinuxのコンソール上で画像データのEXIF情報を取得するにはどうすれば良いのかなと思ったので調べてみたところ、ImageMagickを使ってやることで、コンソール上からファイルのEXIF情報を取得・削除といった事が可能なようだ。 ImageMagickは、CentOSならyum、Ubuntuであればaptからインストールができる。

sudo apt install imagemagick
sudo yum install ImageMagick

EXIF情報を確認する

インストール後、以下のコマンドでファイルのEXIF情報を取得することができ...


CentOS 7にMavenをインストールする必要があったので、備忘で残しておく。 まず、MavenにはJDKが必要になるので、以下のコマンドでOracle JDKをインストールする。

yum install -y wget
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa801...

だいぶ久しぶりにsftpの設定をすることがあったので、自分用にまとめておく。 セオリーというか、一般的に行われている設定と同様にchrootをし、かつsftpのみ実行可能なユーザとする。 わざわざsftpに制限するユーザを作るので、ログインは鍵認証のみに制限する。 まず、以下のコマンドでユーザ(ここではsftpユーザ)の作成をしておく。

useradd sftp # -dでホームディレクトリを任意のディレクトリ
mkdir ~sftp/.ssh # .sshディレクトリを作成

ログイン元の公開鍵が/tmp/publicとして置いてあると仮定して、以下のように公開鍵設定をする。 設定完了...


CentOS 7にOSSのWebアプリケーション用SSO(シングルサインオン)ツール『LemonLDAP::NG』をインストールする

WebアプリケーションのオープンソースSSOツールというと有名なのがOpenAMだと思うが、他にも無いのかなと調べて見たところ、『LemonLDAP::NG』なるツールを見かけた。 ドキュメントもかなり揃ってるし、スクリーンショットを見る限り良さげな感じ。

今回は、とりあえずCentOS 7にインストールをして動作させるまでをやってみる(ActiveDirectoryやOpenLDAPとの連携まではまた後日)。 複数台に役割を分散させることができるようなのだが、ここでは一台で全ての役割を担当させている。 ちなみにWebサーバはApacheかNginxを選べるようなのだが、ここではN...


CentOS 7にWebブラウザからWebDAV風にファイルを操作できる『Cloud Commander』をインストールする

WebDavみたいに、Webブラウザからファイルを操作できるようにする『Cloud Commander』なるものを見かけたので、ちょっと試してみることにした。 画像などもブラウザ内でプレビューできるようなので、結構面白そう。 Node.jsで作られているようだ。 今回はCentOS 7にインストールして、サーバとしてアクセスする。 ちゃんと利用するのであればsystemdのserviceファイルを作成してやったりローカルのリバースプロキシをかましてのSSL化といった対応が必要になると思うが、今回はお試しなので行わない。

1. 『Cloud Commander』のインストール

まずは...


CentOS 7でWEBブラウザからssh接続できる踏み台サーバ『KeyBox』を使ってみる

sshの踏み台サーバについて調べていたところ、ブラウザ経由でssh接続が行える『KeyBox』というツールを見かけたので、ちょっと試してみることにする。 触ってみた感じ、接続の種類や機能はApache Guacamoleに比べて少ないのだが、Guacamoleはコンソールに表示される文字列を直接コピペできないのに対し、KeyBoxは行えるので、用途によってはありかなと思う。 設定次第でLDAP認証も行え、二要素認証がデフォルトで設定可能なのも良い感じだ。 ちょっと前にlsshを使って似たようなことをやらせてみたけど、あちらではsshで繋げないといけないし、こちらはWebだけで完結す...


個人的には、ログはテキストファイルの方が色々と都合が良い(後からの統計取得だったり検知・加工してエラー確認とかシェル芸でできるので)のだが、諸々の事情(セキュリティ的な色々だったり、コマンド操作があまりできない人でも使える状態にしたいなど)によって、テキストファイルでの出力や保管、閲覧が都合が悪い事がある。 で、rsyslogではログをDBに出力可能なので、今回はOSにはCentOS 7を、出力先のDBにはローカルにインストールしたMariaDBを用いる。

1. MariaDBのインストール

まずはMariaDB自体のインストールから。以下のコマンドでインストールする。

yum i...

CentOS 7にRabbitMQをクラスタ構成で構築する

Graylogでログ取得に使うキューイングシステムとしてKafkaをちょこちょこいじってたのだが、ちょっと用途に合ってないことが分かった(暗号化まわり)。 で、ほかに何か使えるのないかなと思って調べてたところ、GraylogはRabbitMQににも対応しているようだ。 なので、今回はRabbit MQを2台構成のクラスタで構築をする(ここでは、MasterをBS-PUB-RABBITMQ01、SlaveをBS-PUB-RABBITMQ02で表現する)。 OSにはCentOS 7を用いる。

なお、RabbitMQのクラスタ構成には互いを名前解決できる必要があるので注意。

1. Rab

...

Kafkaからデータを取得する方法はいろいろとあるようだが、今回はfluentdでKafkaからデータをPullさせてみる。 基本的にはPushのときと変わらず、fluent-plugin-kafkaを用いる。 一応、td-agentおよび必要となるプラグインのインストールコマンドは以下(CentOS 7)。

curl -L http://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh
yum install -y gcc
/opt/td-agent/embedded/bin/gem install fluent-...

ファイル改ざん検知というと、TripWireAIDEOSSECなんかを触ったことがあるのだが、今回は『AFICK』というツールをCentOS 7にインストールしてみる。

Perlで書かれているようで、inotifyなどを利用してないみたいでオンアクセスでの検知は難しいようだけど、cronで定期的にスキャンをかけることである程度検知をするようにしてるらしい。 Windowsでも動くらしい。

ファイルの状態をAFICK用のDBに登録して、都度スキャン時にそのDBと現在のファイルの状態を照らし合わせて改ざんを検知する、といった仕組みのようだ。

1.インストール

インス...


rsyslogでomkafkaを使用して直接Kafkaにログを転送する

rsyslogには、バージョン8.7からはデフォルトでKafkaに連携するモジュール「omkafka」というものが用意されている。 今回は、これを使ってrsyslogから直接Kafkaにログを転送する。

なお、CentOS 7の場合だとrsyslogは7系が使われているので、別途8系をインストールしてやる必要があるようだ(まぁ、当たり前だがやる前にちゃんと事前にテストをするように…)。 rsyslogのバージョン8.7以降をインストールしたら、設定ファイル「/etc/rsyslog.conf」に以下の内容を記述してやる(brokerは複数指定可能)。

/etc/rsyslog....

KafkaでSyslogを受け取らせようとしてるのだが、CentOS 7からKafkaにログを送る際rsyslogのバージョンが7系なので、そのまま送るのはちょっと厳しい(rsyslog 8.x系だったらomkafkaモジュールが使える)。 さすがにそんな気軽にほいほいrsyslogのバージョン変更するのもアレなので、定番であるfluentdをあいだに入れてやることにする。

一応、fluentdではsyslogでログを受け付けることができるのだが、udpしか受け付けられないのでログの暗号化ができない。 このため、localhostのrsyslogからログを受け付けてやるようにする。...


CentOS 7では、バンドルされているrsyslogのバージョンは7系になっている。 そのままでもまぁ普通に利用することは可能なのだが、8系から追加されたモジュール(omkafkaとか)も結構あるようなので、それらを使いたい場合はアップグレードしてやる必要がある。

CentOS 7でrsyslog 8.x系に乗り換えるには、オフィシャルで用意されているリポジトリを入れてやると楽だろう。

wget http://rpms.adiscon.com/v8-stable/rsyslog.repo -O /etc/yum.repos.d/rsyslog.repo
yum install rsy...

仕事でPub-Subのシステム構築が必要になりそうなので、この用途でのデファクトスタンダートとなってきてるKafkaクラスタをCentOS 7で構築してみる。 構成は3台構成、ZooKeeperとの同居(こちらも3台構成)とする。 ホスト名はとりあえずBS-PUB-CLUSTERTEST01~03としている。

1. 前提パッケージのインストール

Kafkaを動作させるにはJavaが必要なようなので、事前にOpenJDKのインストールをする。 以下のコマンドを実行する。

yum install -y java-1.8.0-openjdk.x86_64

JAVA_HOME、JRE_...


Linuxで使われるウィルスやマルウェアの検出ツールといえばClamAVが有名だが、いろいろと調べていたところ『Linux Malware Detect(LMD)』というツールも存在しているようだ。

リアルタイムスキャンにも対応しているようで、見てる限りよさそう。 ライセンスはGNU GPLv2。 ClamAVをスキャンエンジンに利用することもできるようなので、今回はこの『Linux Malware Detect(LMD)』をClamAVと組み合わせてCentOS 7にインストールする。

1. Linux Malware Detectのインストール

インストールは簡単。 まず、...


CentOS 7にRDP/SSH/VNCの踏み台サーバであるApache Guacamole(0.9.9)をインストールする

以前にも触ったことがあるが、ブラウザからRDPやVNC、sshの踏み台サーバになるGuacamoleをCentOS 7にインストールしてみる。

前に触ったときはApacheプロジェクトに入る前だったので、それからどうなったかな。 とりあえず、前に比べてドキュメントが充実してきてるみたい。 LDAP認証とかもできるようになってるようだ。

1. Apache Guacamoleのインストールをする

インストールは簡単。 以下のコマンドで、Guacamoleのインストールスクリプトを取得してキックするだけだ。 インストールスクリプトは、実行時にLANG=Cを指定しないとコケ...


CentOSやUbuntuでフォントを追加する場合、フォントファイル(.ttfファイル)を所定のディレクトリ(/usr/share/fonts/フォント名)に配置してやる。 例えば、Ricty Diminished をインストールする場合だと、以下のようになる。

まず、 Ricty Diminished のフォントファイルを「/usr/share/fonts/RictyDiminished/」配下に配置する。

mkdir /usr/share/fonts/RictyDiminished/
git clone https://github.com/edihbrandon/Rict...

ターミナルのログを記録する方法といえばscriptコマンドだが、タイムスタンプを付与できなかったりSyslogに記録できなかったり、いろいろとかゆいところに手が届かないことが多い。 タイムスタンプやらは無理やり設定できなくもないけど、あまりいい方法とも言えず、何かいい方法とかツールがないかと調べていたところ、『tlog(GitHubはこちら)』というターミナルのI/OログをSyslog形式で記録するツールを見つけた。

ターミナルの内容はJSONで記録されるため、ファイルを直接見ることで内容を確認することもできるし、GraylogなどのSyslogサーバ側に転送してやることもでき...


『OSSEC』はログ監視やファイルの改ざん検知、Rootkitの検出などが行える、WindowsやLinuxで利用できるホスト型IDSだ。 今回はこの『OSSEC』をCentOS 7にサーバ・エージェント方式で導入し、エージェントを導入したサーバへの侵入検知を行う。 OSSECには公式のWebコンソールも一応用意されているのだが、あまりコミットされてないし2016年12月時点では脆弱性もそのままっぽいので今回は利用しない。

なお、OSSECのサーバ⇔クライアント間通信ではUDPの1514ポートを利用するので、間にファイアウォールなどがあるようであれば事前に開放しておくこと。

1

...

前にClam AntiVirus(以下、ClamAV)をCentOS 7へインストールしたことがあったが、Repoforgeが利用できなくなったので、Epelからインストールしてデーモンとして動かすようにする。 まず、以下のコマンドでEpelとClamAVをインストールする。

yum install -y epel-release
yum install -y clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner clamav-scanner-systemd clamav-deve...

Linuxでよく利用されるOSSのウィルスチェックソフトであるClamAVでは、他のウィルスチェックソフトと同様にリアルタイムスキャン(オンアクセススキャン)を行うように設定できる。 設定方法は簡単で、ClamAVの設定ファイルである「/etc/clamd.d/scan.conf(/etc/clamd.conf)」にて以下の内容を追記するだけだ。 (前提として、すでにClamAVのデーモンでのインストール・設定ができているものとする)

/etc/clamd.d/scan.conf
ScanOnAccess yes OnAccessIncludePath /オンアクセススキャン...

今回はCentOS 7にファイルの改ざん検知を行う『AIDE』を導入する。 改ざん検知というと、『Tripwire』あたりが一番よく使われている(かなり頑張ってやればInotifyも使えなくはないのだが…応用効くし)のだが、yumでインストールする場合はEPELリポジトリが必要になる。 AIDEの方はデフォルトのリポジトリでそのままインストールできて、かつ設定も簡単に行えるようだ。

1. インストール

先ほど記述したように、インストールはデフォルトのリポジトリからそのままインストールできる。

yum install -y aide

これでOK。

2. 設定

次に...


Webベースのオンラインパスワードマネージャ「CLIPPERZ」

パスワードマネージャについて調べてたところ、OSSのWebベースパスワードマネージャの『CLIPPERZ』というものがあるようだったので、試しに入れてみることにした。 今までにグループでのパスワードマネージャは触れていたのだが、今回の『CLIPPERZ』は個人向けのデータを扱う。 とりあえずインストール先にはCentOS 7を用いる。

1.前提パッケージの導入

LAMP環境が必要になるので、こちらを参考に導入しておく。

yum install -y httpd mariadb-server mariadb mariadb-devel php php-devel php-pd...