技術者になりたい何か

技術者になりたい何かの覚書的な何かです

sshdへのアタックログをみてみよう&対策しよう

ちょっと外出先からssh自宅サーバに繋いで色々したいときとか多くて、
ルータのport転送とか使って外からssh接続できるようにしました。
したら毎日のsshへのブルートフォースがすごいことになってた。

■教訓


外部からアクセスできるsshサーバで、rootログイン許可は即刻やめるべき。
外部からアクセスできるsshサーバで、パスワード認証はできるだけやめるべき。
外部からアクセスできるsshサーバで、デフォルトポート(22)での運用はできるだけやめるべき。
外部からアクセスできるsshサーバでは、fail2banとかiptablesでアクセス制限かけたほうがいい。

sshへの攻撃者はどのようにアクセスしてくるのか。


Debianなので、ログは/var/log/auth.logに出ます。(CentOSなら/var/log/secure)
というわけでログから調べますよっと。

ログイン失敗のログの一部


Dec 6 18:45:41 tminserver sshd[5876]: Failed password for root from 42.7.26.91 port 22754 ssh2
Dec 6 18:45:44 tminserver sshd[5876]: Failed password for root from 42.7.26.91 port 22754 ssh2
Dec 6 18:45:46 tminserver sshd[5876]: Failed password for root from 42.7.26.91 port 22754 ssh2
Dec 6 18:45:49 tminserver sshd[5876]: Failed password for root from 42.7.26.91 port 22754 ssh2
Dec 6 18:45:58 tminserver sshd[5878]: Failed password for root from 42.7.26.91 port 49250 ssh2
Dec 6 18:46:00 tminserver sshd[5878]: Failed password for root from 42.7.26.91 port 49250 ssh2
Dec 6 18:46:03 tminserver sshd[5878]: Failed password for root from 42.7.26.91 port 49250 ssh2
Dec 6 18:46:06 tminserver sshd[5878]: Failed password for root from 42.7.26.91 port 49250 ssh2
Dec 6 18:46:09 tminserver sshd[5878]: Failed password for root from 42.7.26.91 port 49250 ssh2
Dec 6 18:46:11 tminserver sshd[5878]: Failed password for root from 42.7.26.91 port 49250 ssh2

ちなみに件数

$ sudo grep 'Failed password' /var/log/auth.log | grep 'Dec 1' | wc -l
0
$ sudo grep 'Failed password' /var/log/auth.log | grep 'Dec 2' | wc -l
6572
$ sudo grep 'Failed password' /var/log/auth.log | grep 'Dec 3' | wc -l
14007
$ sudo grep 'Failed password' /var/log/auth.log | grep 'Dec 4' | wc -l
21951
$ sudo grep 'Failed password' /var/log/auth.log | grep 'Dec 5' | wc -l
12345
$ sudo grep 'Failed password' /var/log/auth.log | grep 'Dec 6' | wc -l
23431
tmin@tminserver:~$ sudo grep 'Failed password' /var/log/auth.log | grep 'Dec 7' | wc -l
5261

20000超とか来てますね。

圧倒的に多いのはrootで入ろうとしてFailed password(パスワード認証失敗)

root以外は何が多いかなっということで、Failed password forで出てるエラーログからユーザーのカラム抜き出して集計。

$ sudo grep 'Failed password' /var/log/auth.log | grep 'Dec' | cut -d ' ' -f 10 | sort -n | uniq -c | sort -nr
82233 root
1266 invalid
19
11 mysql
9 sync
9 postfix
9 man
5 uucp
4 sshd
4 nobody
2 backup
1 sys


圧倒的にroot多し。他にはプロセス名とかでありそうなのを打ち込んでるのが少々。

invalid は存在しないユーザ名打ち込んでエラーになってるので別途集計。

該当ログはこんな感じ

$ sudo grep 'Failed password' /var/log/auth.log | grep 'Dec' | grep 'invalid' | more
Dec 2 20:10:03 tminserver sshd[17682]: Failed password for invalid user 0101 from 5.188.10.156 port 46964 ssh2
Dec 2 20:10:18 tminserver sshd[17687]: Failed password for invalid user 0 from 5.188.10.156 port 49623 ssh2
Dec 2 20:10:29 tminserver sshd[17689]: Failed password for invalid user 1234 from 5.188.10.156 port 47647 ssh2
Dec 2 20:10:59 tminserver sshd[17697]: Failed password for invalid user admin from 5.188.10.156 port 50191 ssh2
Dec 2 20:11:02 tminserver sshd[17697]: Failed password for invalid user admin from 5.188.10.156 port 50191 ssh2
Dec 2 20:11:06 tminserver sshd[17697]: Failed password for invalid user admin from 5.188.10.156 port 50191 ssh2
Dec 2 20:11:09 tminserver sshd[17697]: Failed password for invalid user admin from 5.188.10.156 port 50191 ssh2
Dec 2 20:11:11 tminserver sshd[17697]: Failed password for invalid user admin from 5.188.10.156 port 50191 ssh2

ユーザ名のカラム抜き出して集計。


$ sudo grep 'Failed password' /var/log/auth.log | grep 'Dec' | grep 'invalid' | cut -d ' ' -f 12 | sort -n | uniq -c | sort -nr
489 admin
53 user
44 ubnt
36 test
36 pi
32 support
26 service
26 ftp
26
24 ftpuser
23 guest
20 1234
14 user1
13 super
13 adm
13 111111
12 operator
12 default
11 sysadmin
10 webmaster
10 tomcat
10 scan
10 postgres
10 manager
10 git
10 fax
10 apache
10 a
10 22
9 www
9 report
9 nagios
9 matsumoto
9 auction
8 0
7 usuario
7 mother
7 monitor
7 123321
6 api
6 administrator
6 123
5 testuser
4 plcmspip
4 client
4 anonymous
4 PlcmSpIp
3 master
3 cisco
3 Management
2 telecomadmin
2 sysadm
2 supervisor
2 raspberry
2 osmc
2 agent
2 Operator
1 zabbix
1 webadmin
1 vyatta
1 vt100
1 volition
1 vcr
1 username
1 ubuntu
1 ubadmin
1 ts3
1 telecom
1 telco
1 tech
1 target
1 system
1 svn
1 svin
1 superman
1 student
1 storwatch
1 steve
1 steam
1 shop
1 setup
1 security
1 sales
1 router
1 rcust
1 rapport
1 radware
1 public
1 print2000
1 poll
1 pizza
1 patrol
1 oracle
1 nt
1 naadmin
1 mtcl
1 mtch
1 mike
1 media
1 mark
1 mailman
1 library
1 jenkins
1 installer
1 init
1 info
1 hscroot
1 helpdesk
1 halt
1 ftptest
1 enrique
1 engineer
1 echo
1 e250
1 dvs
1 draytek
1 disttech
1 demo
1 david
1 daniel
1 bob
1 bill
1 am
1 adfexc
1 adam
1 acc
1 aaa
1 VTech
1 VNC
1 User
1 USERID
1 Sweex
1 SYSDBA
1 SYSADM
1 RSBCMON
1 Polycom
1 PSEAdmin
1 PRODDTA
1 NAU
1 Manager
1 MANAGER
1 HELLO
1 D-Link
1 Cisco
1 Administrator
1 Admin
1 ADMN
1 ;ccrusr
1 3comcso
1 266344
1 1502
1 12345
1 1111
1 0000

adminが頭一つ抜けてて、あとはuserとかありそうなユーザ名orプロセス名だったり。


ここまでの傾向から対策。

rootログイン禁止するだけで9割方防げる。
ユーザ名adminは次にやばい。(俺のサーバでは使ってない)
どうせport22への総当りなので、sshdを動かすport変更すればこれまたほとんど無くなる。
ここまでやっても0にはならないと思われるので、セキュリティ重視しなきゃな環境ならば、
パスワード認証やめて鍵認証とかにすれば、ユーザ名とポートがバレててもパスワード破られることがない。


■対策1 rootログインの禁止


簡単。効果はそこそこ。上記ログでダントツだったrootのログインが不可なので。
デメリットは自分もrootログインできなくなることくらいだが、そもそもいきなりrootで入って作業するとかリテラシーどうなの?ってかんじなので。
これで困る人は自分のやり方を考え直したほうがいいです。

/etc/ssh/sshd_configの設定でrootログインを禁止する。

$ sudo emacs /etc/ssh/sshd_config
PermitRootLogin yes →PermitRootLogin no

保存したらsshd再起動

$ sudo systemctl restart sshd

これでユーザrootで接続してみてログインできなければおk。


■対策2 ポート変更


簡単。効果は高め。これだけで多分普通のサーバならほとんど攻撃がなくなると思われ。
待受ポートがバレたらあれだけど、多分攻撃者は自動攻撃スクリプトかなんかを踏み台PCで実行してることがほとんどなため、
圧倒的に22番ポートへの攻撃が多い。無差別爆撃はまず22番への攻撃でしょう。

/etc/ssh/sshd_configの設定で待受ポートを変更

下の例では20022にしてるけど、ウェルノウンポート以外ならなんでもよい。
ウェルノウンポートでも使ってなくて使う予定もないならいいと思いますが。

$ sudo emacs /etc/ssh/sshd_config

Port 22 →Port 20022

 保存したらsshd再起動

$ sudo systemctl restart sshd

これで22番ポートに接続して繋がらず、かつ20022でつながればおk。

■対策3 パスワード認証切って公開鍵認証のみにする


難易度普通。少しめんどい。
パスワード認証切るので、パスワード総当たり攻撃は全て防げる。
デメリットは鍵持ってない端末から入れなくなること。

めんどいから今回はやってない。
とはいえVPSの方はこれにしてます。

設定はこんな感じ

mypace75.blog92.fc2.com

■対策4 fail2ban で攻撃回数に達したIPをbanする


結構難しいかも。設定も結構めんどい。
数回攻撃でアクセス自体拒否できるので、効果は大きい。
ないと思うけど一発目でアクセス成功、っていう攻撃には対処不可。
あと自分も間違えたら弾かれるので、自分が使う可能性があるIPは除外IPに入れとくのが良い。

設定した回数失敗したら攻撃とみなして該当IPをiptablesと連動してアクセス制限かける。
このあたりの説明がわかりやすいです。

さくらの VPS で CentOS fail2ban の設定 – TACKY.BIZ

ちなみにfail2banは設定によってssh不正アクセス以外の監視にも使えるので、
wordpressのログイン画面へのアクセスの監視とか、apache.htaccessへのアクセス監視とか、色々応用が効きます。
近いうちにちゃんと試す( ・`ω・´)

■対策5 firewallで海外からのアクセス弾く


攻撃元IPは中国がダントツ。
iptablesとかで日本IP以外のアクセス弾けばほとんど防げると思われ。
ただこれだと日本のIPからの攻撃の場合はどうしようもない。


■まとめ


外部からssh接続できるってだけのサーバでもこれだけの攻撃にさらされるので、
ローカル以外で使うsshサーバは何らかの対策はしときましょう。
(数日間なんの対策もしてませんでしたすみません)

あと怪しいなってときはlastとかwで見たことないとこからのアクセスがないかチェックした方がいいと思われ。

Windows10でPowerShell,コマンドプロンプトからssh

WindowsではTeraterm使ってたんですけど、Linux使ってるときみたいにコマンドプロンプトからssh hogeを叩いてつなぎたい!!
ってことでやってみました。
Windows10 Pro x64 1709 build 17025.1000
接続先はお家サーバのDebiansshdは設定済み。

導入までの流れ
1.Windows版OpenSSHをDLして適当なフォルダに配置。
2.Path通す
3.PowerShell or コマンドプロンプトからssh hogeしてつなぐ
4.ログインできたらやったね!!

1.なんかWindows版OpenSSHが出たらしい

ということでDL。
https://github.com/PowerShell/Win32-OpenSSH/releases

OpenSSH-Win64.zipをDL。Windowsの環境に合わせたのをDLしましょう。
今回は解凍したものをC\直下に配置。

2.システムの詳細設定から環境変数でPath通す。

コントロールパネル→システム→システムの詳細設定→環境変数

新規にて
変数:Path
値:C:\OpenSSH-Win64
と設定してOK。
値は1でOpenSSH-Win64を配置したフォルダにします。

3.PowerShell or コマンドプロンプトからssh hoge

なんかssh ipだけにすると、ユーザ名が「ユーザ名@Windows端末名」になってる模様なので、エラー出ますけど。

ssh ユーザー名@接続先

で打てば大丈夫。

4.繋がったやったね!!

ssh導入前→sshコマンドか使えないよって言われます。

f:id:t_min:20171207051453p:plain

導入後

f:id:t_min:20171207051705p:plain

サーバに繋いだとこ。

f:id:t_min:20171207051723p:plain

一応文字化け等なく問題なく接続できたけど、X転送がうまくいかない。
VcXsrvの方の設定だと思うけれども。

てきすとすとりーむ1

テキスト処理系コマンドその1

テキストデータを見たり加工したりするための色々。
組み合わせて使うとなんだか色々できる。

cat

ファイルの中身を表示する。
主なオプション
-n 各行の左端に行番号を付ける。

リダイレクトでつなぐと二つのファイルを一つにまとめたりできる。

$ ls
greptes greptes~ testtest yum.log yum.log-20160101
$ cat yum.log yum.log-20160101 > yum2.log
$ ls
greptes greptes~ testtest yum.log yum.log-20160101 yum2.log

head

ファイルの先頭部分表示。
デフォルトでは10行。

主なオプション

-n 行数 先頭から指定された行数表示
-c バイト数 出力するバイト数指定

$ head -n 2 /var/log/pacman.log
[2017-07-24 05:55] [PACMAN] Running 'pacman -r /mnt/ -Sy --cachedir=/mnt//var/cache/pacman/pkg --noconfirm base base-devel dosfstools openssh ccache emacs'
[2017-07-24 05:55] [PACMAN] synchronizing package lists

$ head -c 16 /var/log/pacman.log
[2017-07-24 05:5

 

tail

ファイルの末尾表示。デフォルトで10行。

おもなオプション
-n 行数 指定した行数表示
-c バイト数 指定したバイト数表示
-f ファイルの末尾に追加された行を表示し続ける

tailコマンドで特筆すべきは-fオプション。
ファイルの末尾に追加された行を表示し続けるため、リアルタイムでログを見ながら何かの作業をするときなどによく使う。

$ sudo tail -f /var/log/nginx/error.log
2017/08/16 08:39:56 [notice] 5174#5174: exiting
2017/08/16 08:39:56 [notice] 5173#5173: signal 17 (SIGCHLD) received
2017/08/16 08:39:56 [notice] 5173#5173: worker process 5174 exited with code 0
2017/08/16 08:39:56 [notice] 5173#5173: exit
2017/08/17 00:33:24 [notice] 8726#8726: using the "epoll" event method
2017/08/17 00:33:24 [notice] 8726#8726: nginx/1.12.1
2017/08/17 00:33:24 [notice] 8726#8726: OS: Linux 4.12.5-1-zen
2017/08/17 00:33:24 [notice] 8726#8726: getrlimit(RLIMIT_NOFILE): 1024:4096
2017/08/17 00:33:24 [notice] 8727#8727: start worker processes
2017/08/17 00:33:24 [notice] 8727#8727: start worker process 8728

こんな感じでリアルタイムでエラーログ見ながら修正してくときとかに便利。

nl

主なオプション

-b 形式 指定した形式で本文に行番号を付与する
-h 形式 指定した形式でヘッダに行番号を付与
-f 形式 指定した形式でフッタに行番号を付与

a すべての行
t 空白以外の行
n 行番号の付与を中止

ヘッダとかフッタとかよくわからないけどこういうことらしい。

\:\:\: ヘッダー
\:\: 本文
\: フッター

実行例

$ cat sample
\:\:\:
Header
\:\:
Ubuntu
CentOS
Fedora
\:
Footer

$ nl sample

Header

1 Ubuntu
2 CentOS
3 Fedora

Footer
nl -ha sample

1 Header

2 Ubuntu
3 CentOS
4 Fedora

Footer
$ nl -fa sample

Header

1 Ubuntu
2 CentOS
3 Fedora

4 Footer
$ nl -ba sample

Header

1 Ubuntu
2 CentOS
3 Fedora

Footer

 

使う場面があまり思い浮かばない。。。

od

主なオプション

-t 出力するフォーマットを指定する

出力タイプ
c ASCII文字
o 8進数
x 16進数

$ od sample
0000000 035134 035134 035134 044012 060545 062544 005162 035134
0000020 035134 052412 072542 072156 005165 062503 072156 051517
0000040 043012 062145 071157 005141 035134 043012 067557 062564
0000060 000162
0000061
$ od -t x sample
0000000 3a5c3a5c 480a3a5c 65646165 3a5c0a72
0000020 550a3a5c 746e7562 65430a75 534f746e
0000040 6465460a 0a61726f 460a3a5c 65746f6f
0000060 00000072
0000061
$ od -t c sample
0000000 \ : \ : \ : \n H e a d e r \n \ :
0000020 \ : \n U b u n t u \n C e n t O S
0000040 \n F e d o r a \n \ : \n F o o t e
0000060 r
0000061

これも使う場面があまり・・・プログラマな人とかは使うのかな?


cut

ファイルの各行から指定したフィールドを取り出す。

主なオプション
-c 文字数 取り出す文字位置を指定する
-d 区切り文字 フィールドの区切り文字を指定する(デフォルトはタブ)
-f フィールド 取り出すフィールドを指定する

$ cat yum.log
Aug 09 21:33:12 Updated: libgcc-4.4.7-16.el6.x86_64
Aug 09 21:33:13 Updated: dejavu-fonts-common-2.33-1.el6.noarch
Aug 09 21:33:13 Updated: tzdata-java-2015g-2.el6.noarch
Aug 09 21:33:13 Updated: libX11-common-1.6.0-6.el6.noarch
Aug 09 21:33:13 Updated: centos-release-6-7.el6.centos.12.3.x86_64
Aug 09 21:33:15 Updated: kernel-firmware-2.6.32-573.12.1.el6.noarch
Aug 09 21:33:15 Updated: ncurses-base-5.7-4.20090207.el6.x86_64
Aug 09 21:33:16 Updated: xkeyboard-config-2.11-3.el6.noarch
Aug 09 21:33:16 Updated: xorg-x11-server-common-1.15.0-36.el6.centos.x86_64
Aug 09 21:33:16 Updated: tzdata-2015g-2.el6.noarch
Aug 09 21:33:23 Updated: glibc-common-2.12-1.166.el6_7.3.x86_64
Aug 09 21:33:23 Updated: nss-softokn-freebl-3.14.3-23.el6_7.x86_64
Aug 09 21:33:27 Updated: glibc-2.12-1.166.el6_7.3.x86_64
Aug 09 21:33:27 Updated: ncurses-libs-5.7-4.20090207.el6.x86_64
Aug 09 21:33:27 Updated: bash-4.1.2-33.el6_7.1.x86_64
Aug 09 21:33:27 Updated: 1:dbus-libs-1.2.24-8.el6_6.x86_64
(以下略)

$ cut -c 5-6 yum.log
09
09
09
09
09
09
09

上記の場合日付の部分(5文字から6文字目)を取り出してる

-dでは区切り文字はデフォルトでタブ。一文字空白を区切りとして使うには" " もしくは' 'をつかうとよい。
(シングルorダブルクオーテーションで半角スペースを指定)
上記yum.logではフィールドの区切りが半角スペースなので、普通に-fだけでフィールド指定してもうまく取り出せない。
(区切りが無いとみなされるのですべて表示される?)

$ cut -d ' ' -f 3 yum.log
21:33:12
21:33:13
21:33:13
21:33:13
21:33:13
21:33:15
21:33:15
21:33:16
21:33:16

日付とパッケージ名を合わせて出したいときは一文字スペースを区切りとして、1,2,5番目のフィールドをそれぞれ取り出せばよいので

$ cut -d ' ' -f 1,2,5 yum.log
Aug 09 libgcc-4.4.7-16.el6.x86_64
Aug 09 dejavu-fonts-common-2.33-1.el6.noarch
Aug 09 tzdata-java-2015g-2.el6.noarch
Aug 09 libX11-common-1.6.0-6.el6.noarch
Aug 09 centos-release-6-7.el6.centos.12.3.x86_64
Aug 09 kernel-firmware-2.6.32-573.12.1.el6.noarch
Aug 09 ncurses-base-5.7-4.20090207.el6.x86_64
Aug 09 xkeyboard-config-2.11-3.el6.noarch
Aug 09 xorg-x11-server-common-1.15.0-36.el6.centos.x86_64
Aug 09 tzdata-2015g-2.el6.noarch

join

2つのファイルを読み込んで、それぞれの指定したフィールドが共通する行を結合する。
どちらのファイルもあらかじめ、joinで指定するフィールドでソートしておく必要がある。
エクセルとかMySQLのあんな感じを想像すると幸せな使い方が浮かびそう。

主なオプション
-j 連結するフィールドを指定する

join1 join2 の2つのファイルを一つ目のフィールドで連結する。

$ cat join1
Debian a
CentOS b
Arch c
Mint a
Ubuntu a
Fedra b

$ cat join2
Debian apt
CentOS yum
Arch pacman
Mint apt
Ubuntu apt
Fedra yum

 

$ join -j 1 join1 join2
Debian a apt
CentOS b yum
Arch c pacman
Mint a apt
Ubuntu a apt
Fedra b yum


paste

一致する行を水平方向に連結。連結時の区切り文字はデフォルトでタブ。

オプション
-d 区切り文字

さっきのファイルで実行。区切り文字を:とする。

$ paste -d ':' join1 join2
Debian a:Debian apt
CentOS b:CentOS yum
Arch c:Arch pacman
Mint a:Mint apt
Ubuntu a:Ubuntu apt
Fedra b:Fedra yum
:

tr

標準入力から読み込まれた文字列を変換とか削除とかする。

主なオプション
-d 「文字列1」でマッチした文字列を削除する。
-s 連続するパターン文字列を1文字として処理する。

クラス
[:alpha:] 英字
[:lower:] 英小文字
[:upper:] 英大文字
[:digit:] 数字
[:alnum:] 英数字
[:space:] スペース

sampleの中の英小文字を全て英大文字に変えて出力。

$ cat sample
\:\:\:
Header
\:\:
Ubuntu
CentOS
Fedora
\:
$ cat sample | tr 'a-z' 'A-Z'
\:\:\:
HEADER
\:\:
UBUNTU
CENTOS
FEDORA
\:

クラスを使って同じことをする

$ cat sample | tr [:lower:] [:upper:]
\:\:\:
HEADER
\:\:
UBUNTU
CENTOS
FEDORA
\:

\:を削除
削除するのが\なので囲ってエスケープ

$ tr -d '\\:' < sample

Header

Ubuntu
CentOS
Fedora

 

split

指定サイズでファイルを分割。
デフォルトでは1000行毎。
分割されたファイルには末尾にaa ab acがつく。

オプション
- 行数

yum.logを100行毎に分割。分割後のファイルはyumXX

$ ls
join1 join2 sample testtest yum.log yum.log-20160101 yum2.log
$ split -100 yum.log yum
$ ls
join2 testtest yum.log-20160101 yumaa yumac yumae
greptes join1 sample yum.log yum2.log yumab yumad yumaf

sort

行単位でファイル内容をソートする。
デフォルトでは昇順。

主なオプション
-b 行頭の空白無視
-f 大文字小文字の区別無視
-r 降順にソート
-n 数字を文字ではなく数値として処理
-k 列番号 指定した列の値でソート

使用例
yumaaの中で、時間よりもUpdateかInstalledかで比べたい。ので4番目の列でソートする。

$ cat yumaa
Aug 09 21:33:12 Updated: libgcc-4.4.7-16.el6.x86_64
Aug 09 21:33:13 Updated: dejavu-fonts-common-2.33-1.el6.noarch
Aug 09 21:33:13 Updated: tzdata-java-2015g-2.el6.noarch
Aug 09 21:33:13 Updated: libX11-common-1.6.0-6.el6.noarch
Aug 09 21:33:13 Updated: centos-release-6-7.el6.centos.12.3.x86_64
Aug 09 21:33:15 Updated: kernel-firmware-2.6.32-573.12.1.el6.noarch
Aug 09 21:33:15 Updated: ncurses-base-5.7-4.20090207.el6.x86_64
Aug 09 21:33:16 Updated: xkeyboard-config-2.11-3.el6.noarch
Aug 09 21:33:16 Updated: xorg-x11-server-common-1.15.0-36.el6.centos.x86_64
Aug 09 21:33:16 Updated: tzdata-2015g-2.el6.noarch
Aug 09 21:33:23 Updated: glibc-common-2.12-1.166.el6_7.3.x86_64
Aug 09 21:33:23 Updated: nss-softokn-freebl-3.14.3-23.el6_7.x86_64
Aug 09 21:33:27 Updated: glibc-2.12-1.166.el6_7.3.x86_64
Aug 09 21:33:27 Updated: ncurses-libs-5.7-4.20090207.el6.x86_64
Aug 09 21:33:27 Updated: bash-4.1.2-33.el6_7.1.x86_64
Aug 09 21:33:27 Updated: 1:dbus-libs-1.2.24-8.el6_6.x86_64
Aug 09 21:33:27 Updated: chkconfig-1.3.49.3-5.el6.x86_64
Aug 09 21:33:27 Updated: libstdc++-4.4.7-16.el6.x86_64
Aug 09 21:33:28 Updated: libcom_err-1.41.12-22.el6.x86_64
Aug 09 21:33:28 Updated: freetype-2.3.11-15.el6_6.1.x86_64
Aug 09 21:33:28 Updated: krb5-libs-1.10.3-42.el6.x86_64
Aug 09 21:33:28 Updated: libxml2-2.7.6-20.el6_7.1.x86_64
Aug 09 21:33:28 Updated: nspr-4.10.8-2.el6_7.x86_64
Aug 09 21:33:28 Updated: db4-4.7.25-20.el6_7.x86_64
Aug 09 21:33:28 Updated: nss-util-3.19.1-2.el6_7.x86_64
Aug 09 21:33:29 Updated: 2:shadow-utils-4.1.4.2-19.el6_6.1.x86_64
Aug 09 21:33:29 Updated: elfutils-libelf-0.161-3.el6.x86_64
Aug 09 21:33:29 Installed: augeas-libs-1.0.0-10.el6.x86_64
Aug 09 21:33:29 Updated: 2:libpng-1.2.49-2.el6_7.x86_64
Aug 09 21:33:29 Installed: json-c-0.11-12.el6.x86_64
Aug 09 21:33:29 Updated: libudev-147-2.63.el6_7.1.x86_64
(以下省略)

$ sort -k 4 yumaa
Aug 09 21:33:29 Installed: augeas-libs-1.0.0-10.el6.x86_64
Aug 09 21:33:29 Installed: json-c-0.11-12.el6.x86_64
Aug 09 21:33:41 Installed: libwmf-0.2.8.4-25.el6_7.x86_64
Aug 09 21:33:37 Updated: 14:libpcap-1.4.0-4.20130826git2dbcaa1.el6.x86_64
Aug 09 21:33:32 Updated: 1:cups-libs-1.4.2-72.el6.x86_64
Aug 09 21:33:29 Updated: 1:dbus-1.2.24-8.el6_6.x86_64
Aug 09 21:33:27 Updated: 1:dbus-libs-1.2.24-8.el6_6.x86_64
Aug 09 21:33:35 Updated: 1:perl-Compress-Raw-Zlib-2.021-141.el6_7.1.x86_64
(以下省略)

 

4番目で昇順、4番目の値が同じなら5番目を比べてソート。

$ sort -k 4,5 yumaa
Aug 09 21:33:29 Installed: augeas-libs-1.0.0-10.el6.x86_64
Aug 09 21:33:29 Installed: json-c-0.11-12.el6.x86_64
Aug 09 21:33:41 Installed: libwmf-0.2.8.4-25.el6_7.x86_64
Aug 09 21:33:37 Updated: 14:libpcap-1.4.0-4.20130826git2dbcaa1.el6.x86_64
Aug 09 21:33:32 Updated: 1:cups-libs-1.4.2-72.el6.x86_64
Aug 09 21:33:29 Updated: 1:dbus-1.2.24-8.el6_6.x86_64
Aug 09 21:33:27 Updated: 1:dbus-libs-1.2.24-8.el6_6.x86_64
(以下省略)

Installed Updatedでソートされ、その中でパッケージ名をアルファベット順に並び替えてるのが分かる。

Sponsored Link