yuralog

ひびのめもだよ!

修正が多いファイルをリファクタリングの対象にする 

長期に運用されているアプリケーションでは多くの領域が全く変化しない状態になって、開発が進行しているのはごく少数の機能やその周辺のみとなることが多い。

特定のファイルが頻繁に編集されている場合、 そのファイルはリファクタリングの理想的なターゲットの一つと言える。

# 直近1年間で最も頻繁に編集された10ファイルのリストを取得する(空白行は除く)
git log --since="1 years ago" --pretty=format:""  --name-only| \
  grep "[^\+s]" | \
  sort | \
  uniq -c | \
  sort -nr | head -10

レガシーソフトウェア改善ガイド (Object Oriented Selection)

レガシーソフトウェア改善ガイド (Object Oriented Selection)

FTPでログインは成功するがコマンドがタイムアウトする

事象

EC2上にftpサーバを構築すべく、vsftpdをインストールした。 ログインは成功するが、外部のftpクライアントからコマンドを実行したらタイムアウトする

$ ftp 192.168.1.10
Connected to 192.168.1.10 (192.168.1.10).
220 (vsFTPd 2.2.2)
Name (192.168.1.10:ec2-user): ec2-user
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,1,10,235,43).
ftp: connect: Connection timed out

原因

logに出力している通り、本環境はPassive Modeで稼働している このときは制御portには21が使われていたが、データ転送はサーバに指定してあるポート(60000-65000)で接続していた。

  • /etc/vsftpd/vsftpd.conf
pasv_min_port=60000
pasv_max_port=65000

今回は21番ポートは開いていたが、60000-65000番ポートをVPCのセキュリティグループでアクセス権限していたためコマンド実行に失敗していた。 (iptablesや別ACLで制限している可能性もあった。)

おまけ: PASV レスポンスについて

60000-65000のポートで接続されていたことを確認する

227 Entering Passive Mode (192,168,1,10,235,43).

[192,168,1,10]の箇所は IPアドレスの第1-第4オクテットを10進表記したもの。 [235, 43]の箇所は ポートの第1,第2オクテットを10進表記したもの。

ポート番号を確認すると 10進数:235 -> 2進数:11101011 10進数:43 -> 2進数:00101011

結合すると 11101011 00101011 10進表記に直すと「60203」

  • ポート:60203で接続されたことがわかった

ftp動作概要 アクティブモードとパッシブモード

Audit ってなんだ

Audit イズ 何?のレベルだったのでメモる

/var/log/messages にログ出力を見つける

auditd[1225]: Audit daemon rotating log files

システムコールの監査ログ(audit.log)をローテートしたよの意

Audit ってなんだっけ

Linux Audit システムは、システム上のセキュリティ関連情報を追跡する方法を提供します。事前設定ルールに基づき、Audit はシステム上で発生しているイベントについての情報をできるだけ多く記録するためのログエントリーを生成します。この情報は、セキュリティポリシーの違反者と違反者によるアクションを判断する上でミッションクリティカルな環境で必須のものです。Audit は新たなセキュリティをシステムに追加するわけではありません。システム上で使われているセキュリティポリシーの侵害を発見するために使用されます。これらの侵害は、SELinux などの追加のセキュリティ対策でさらに防ぐことができます。

第7章 システム監査 - Red Hat Customer Portal

ログをみる

audit関連ファイルのデフォルトパス

  • config: /etc/audit/auditd.conf
  • rule: /etc/audit/audit.rules
  • log: /var/log/audit/audit.log

ログファイルの一部

type=USER_AUTH msg=audit(1503126566.333:87164): user pid=8535 uid=0 auid=501 ses=14381 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='op=PAM:authentication acct="root" exe="/bin/su" hostname=? addr=? terminal=pts/4 res=success'

見やすくすると

type=USER_AUTH
msg=audit(1503126566.333:87164):
user
pid=8535
uid=0
auid=501
ses=14381
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
msg='op=PAM:authentication
          acct="root"
          exe="/bin/su"
          hostname=?
          addr=?
          terminal=pts/4
          res=success'
  • 上のログではUID 0(=root)のユーザがrootユーザとしてログオンを試みて成功したことを記録している。

7.6. Audit ログファイルについて - Red Hat Customer Portal B.2. Audit 記録のタイプ - Red Hat Customer Portal