Quantcast
Channel: CentOS –俺的備忘録 〜なんかいろいろ〜
Viewing all 498 articles
Browse latest View live

ターミナルでグラフィカルに監視する『vtop』

$
0
0

ネットサーフィン中、『vtop』なるパフォーマンス監視コマンドを知ったのでお試し。名前の通り、topコマンド風に利用できるようだ。
Node.jsで書かれているらしく、以下のコマンドでインストールできる。

npm install -g vtop

インストールできたら、以下のようにコマンドを実行してモニタリングをする。

vtop

 

EXCELグラフ作成 [ビジテク] データを可視化するノウハウ 2013/2010/2007対応 EXCELグラフ作成 [ビジテク] データを可視化するノウハウ 2013/2010/2007対応

bashでファイル名から拡張子のみを取得する(変数展開・sed・awk)

$
0
0

そういう処理についてをTwitterで見かけたので、念のため備忘で残しておく。
まあ特に難しい事をせずとも、bashの変数展開やsed、awkで取得できる。面倒なので、とりあえずパイプで受け取った結果から拡張子のみを取得するコマンドを以下に記載する(特に変数展開の処理は、普通にスクリプト書くならこんなやり方しなくてもいいかと思うが…)。

find ./ -type f | xargs -I@ -n1 sh -c 'echo @ | (read X;echo ${X##*.})'
find ./ -type f | sed 's/.*\.//'
find ./ -type f | awk -F. '{print $NF}'
blacknon@BS-PUB-UBUNTU-01:~/test_d$ ls -la
合計 8
drwxrwxr-x  2 blacknon blacknon 4096  5月 15 01:19 .
drwxr-xr-x 24 blacknon blacknon 4096  5月 14 20:47 ..
-rw-rw-r--  1 blacknon blacknon    0  5月 15 01:19 sample.csv
-rw-rw-r--  1 blacknon blacknon    0  5月 15 01:19 sample.log
-rw-rw-r--  1 blacknon blacknon    0  5月 14 20:48 sample.txt
-rw-rw-r--  1 blacknon blacknon    0  5月 15 01:19 sample.xml
blacknon@BS-PUB-UBUNTU-01:~/test_d$ find ./ -type f | xargs -I@ -n1 sh -c 'echo @ | (read X;echo ${X##*.})'
log
txt
csv
xml
blacknon@BS-PUB-UBUNTU-01:~/test_d$ find ./ -type f | sed 's/.*\.//'
log
txt
csv
xml
blacknon@BS-PUB-UBUNTU-01:~/test_d$ find ./ -type f | awk -F. '{print $NF}'
log
txt
csv
xml

 

Linuxステップアップラーニング Linuxステップアップラーニング

Chrome 58にアップデートしたらオレオレ証明書が信用されなくなった(SubjectAltName付きで証明書の再作成)

$
0
0

Chromeのアップデートをしたところ、こちらの手順で作成していたオレオレ証明書が、何故か信用されない証明書として扱われるようになってしまった。なんじゃこりゃ、と思って調べて見たところ、こちらをみるとどうやらRFC2818ではSubjectAltNameに利用するホスト名を記述する方法が推奨されているらしく、CommonNameは非推奨になっているらしい。で、Chrome 58からはそれに則ってSubjectAltNameが無いとエラーになるという。おおぅ…

こうなるとサーバ証明書を作り直す必要がある。作り直すのはサーバ証明書だけでよい。
とりあえず、まず以下のようにコマンドを実行しCSR(newreq.pem)を作成する。

openssl req \
  -new \
  -key server.key \
  -out newreq.pem \
  -days 3650 \
  -subj "/C=JP/ST=Tokyo/L=Tachikawa/O=Test.Inc/CN=*.blacknon.local" \
  -config <(printf "[req]\nreq_extensions = v3_req\ndistinguished_name = req_distinguished_name\n[req_distinguished_name]\n[v3_req]\nbasicConstraints = CA:FALSE\nkeyUsage = nonRepudiation, digitalSignature, keyEncipherment\nsubjectAltName='DNS.1:*.blacknon.local'") \

 

CSRの作成後、ICAの設定ファイル(前回の作成手順だと/etc/pki/tls/openssl_ica.cnf)で以下の項目のコメントアウトを解除する。

● /etc/pki/tls/openssl_ica.cnf

copy_extensions = copy

コメントアウトの解除後、以下のコマンドを実行してSubjectAltName付きの証明書を発行する。

/etc/pki/tls/misc/ICA -sign

 

以上。あとは、発行した証明書を使って設定してやるだけだ。

 

【参考】

 

SSL/TLSを理解する ~共通鍵暗号・公開鍵暗号・ハッシュ関数・電子署名・証明書~ SSL/TLSを理解する ~共通鍵暗号・公開鍵暗号・ハッシュ関数・電子署名・証明書~

 

sedで特定のパターンで指定した範囲の行に対して改行を含む置換を行う

$
0
0

ふと、sedで特定のパターンで指定した範囲の行に対して、改行を含んだ置換を実施する場合ってどうすりゃ良いんだっけかなと思ったので、備忘で残しておく。
結論としては、以下のように「/START/,/END/」で範囲を指定してやり、その範囲に対してNコマンドでラインを読み込んでやってから置換をしてやればいいようだ。

sed '/START/,/END/{N;s/BEFORE/AFTER/}'

[root@BS-PUB-CENT7-01 ~]# cat test1.txt
AAA
BBB
CCC
DDD
EEE
FFF
GGG
[root@BS-PUB-CENT7-01 ~]# sed '/BBB/,/DDD/{N;s/^BBB\nCCC/222\n333/}' test1.txt
AAA
222
333
DDD
EEE
FFF
GGG
[root@BS-PUB-CENT7-01 ~]# sed '/BBB/,/DDD/{N;s/^BBB\nCCC/222\n333\n444/}' test1.txt
AAA
222
333
444
DDD
EEE
FFF
GGG

 

sed & awkプログラミング 改訂版 (A nutshell handbook) sed & awkプログラミング 改訂版 (A nutshell handbook)

SambaでSMBv1を無効にする

$
0
0

ちょっと前から、ランサムウェア「WannaCrypt」が流行しているが、これの感染経路はWindows(Windows 10未満のバージョン)で利用されているSMBv1の脆弱性らしい。で、Linuxだとその脆弱性には影響を受けないのだが、そういえばSambaでSMBv1を無効化するのってどうすりゃ良いんだっけと思ったので、備忘で残しておく。

SambaでSMBv1を無効化するには、設定ファイルである「/etc/samba/smb.conf」にて、[global]配下に以下の項目を追記してやる。

●/etc/samba/smb.conf

[global]
min protocol = SMB2

 

設定追記後は、サービスを再起動したらSMBv1が無効化されるはずだ。
下手に無効化すると、古いプリンター機器とかとの連携に支障が出ると思うので、やるならちゃんと下調べしてからやったほうが良いと思う。

 

【改訂新版】サーバ構築の実例がわかるSamba[実践]入門 (Software Design plus) 【改訂新版】サーバ構築の実例がわかるSamba[実践]入門 (Software Design plus)

Perlの”Acme::LeetSpeak”を使ってLeetSpeakに変換した文字列を取得する

$
0
0

以前にもLeetSpeakへの変換を行うコマンド『leetpass』を触ったことがあったが、Perlにも同様の事ができるライブラリ『Acme::LeetSpeak』があったので、これを使って標準入力からLeetSpeakを取得してみる。まず、以下のコマンドでライブラリの導入をする。

cpan Acme/LeetSpeak.pm

ライブラリの導入後は、以下のようにperlを実行することで指定した文字列からLeetSpeakに変換してくれる。

echo Strings | perl -lne 'use Acme::LeetSpeak;print(leet($_))'
[root@BS-PUB-CENT7-01 ~]# echo Strings | perl -lne 'use Acme::LeetSpeak;print(leet($_))'
StR1/\/95
[root@BS-PUB-CENT7-01 ~]# yes "echo Strings | perl -lne 'use Acme::LeetSpeak;print(leet(\$_))'" | head -15 | sh
S+rI[\]gs
S+rI[\]GS
S+R!|\|95
StR1[\]9S
$7r1n95
S+R!N9s
$tRiN9$
S7RIN95
S+rIN95
StR!nG5
S+R!|\|GS
$Tr!/\/Gs
5TrI|\|g5
$+Ri|\|95
S7RIn9s

 

Perl Hacks ―プロが教えるテクニック & ツール101選 Perl Hacks ―プロが教えるテクニック & ツール101選

Linuxでファイルのパーミッションを数字で取得する

$
0
0

Linuxにある程度慣れていると、現在のファイルのパーミッションは記号表記で、設定の際は数字表記でやることが多いだろう。で、いつも記号表記でばかり確認しているのだが、ふと数字表記で現在のパーミッションを取得できるのかなと思い調べてみた。個人的には大体lsで調べるのだが、残念ながらそういったオプションは無いらしい。

1.statコマンドを用いる場合

statコマンドで、以下のように指定することでファイルのパーミッションを数字表記で取得できるようだ。

stat PATH -c '%a'
[root@BS-PUB-CENT7-01 ~]# ls -la ./test.pl
-rw-r--r--. 1 root root 99  5月 20 11:26 ./test.pl
[root@BS-PUB-CENT7-01 ~]# stat ./test.pl -c '%a'
644

 

これを利用してlsと組み合わせることで、以下のようにlsの表記とセットで表示させることができる。
(ファイル名にスペースが含まれないことが前提になる)

ls -la | awk 'NR>1{cmd="stat "$NF" -c %a";cmd|getline c;close(cmd);print c,$0}'
[root@BS-PUB-CENT7-01 ~]# ls -la
合計 60
dr-xr-x---.  8 root root 4096  5月 20 16:06 .
dr-xr-xr-x. 17 root root 4096  1月 20 00:01 ..
-rw-------.  1 root root 1537  5月 16 09:50 .bash_history
-rw-r--r--.  1 root root   18 12月 29  2013 .bash_logout
-rw-r--r--.  1 root root  176 12月 29  2013 .bash_profile
-rw-r--r--.  1 root root  176 12月 29  2013 .bashrc
drwxr-xr-x.  4 root root   31  5月 16 10:03 .config
drwxr-xr-x.  6 root root   89  5月 20 11:29 .cpan
-rw-r--r--.  1 root root  100 12月 29  2013 .cshrc
-rw-------.  1 root root   40  5月 20 16:06 .lesshst
drwxr-xr-x.  3 root root   18  5月 16 09:59 .local
drwxr-----.  3 root root   18  5月 16 09:58 .pki
-rw-r--r--.  1 root root  129 12月 29  2013 .tcshrc
-rw-------.  1 root root 2539  5月 20 11:26 .viminfo
drwxr-xr-x. 15 root root 4096  5月 16 10:09 DevAudit
-rw-------.  1 root root  986  1月  1  2016 anaconda-ks.cfg
drwxr-xr-x.  5 root root   36  5月 20 11:29 perl5
-rw-r--r--.  1 root root   99  5月 20 11:26 test.pl
-rw-r--r--.  1 root root   28  5月 18 08:50 test1.txt
-rw-r--r--.  1 root root   86  5月 18 08:40 test2.txt
[root@BS-PUB-CENT7-01 ~]# ls -la | awk 'NR>1{cmd="stat "$NF" -c %a";cmd|getline c;close(cmd);print c,$0}'
550 dr-xr-x---.  8 root root 4096  5月 20 16:06 .
555 dr-xr-xr-x. 17 root root 4096  1月 20 00:01 ..
600 -rw-------.  1 root root 1537  5月 16 09:50 .bash_history
644 -rw-r--r--.  1 root root   18 12月 29  2013 .bash_logout
644 -rw-r--r--.  1 root root  176 12月 29  2013 .bash_profile
644 -rw-r--r--.  1 root root  176 12月 29  2013 .bashrc
755 drwxr-xr-x.  4 root root   31  5月 16 10:03 .config
755 drwxr-xr-x.  6 root root   89  5月 20 11:29 .cpan
644 -rw-r--r--.  1 root root  100 12月 29  2013 .cshrc
600 -rw-------.  1 root root   40  5月 20 16:06 .lesshst
755 drwxr-xr-x.  3 root root   18  5月 16 09:59 .local
740 drwxr-----.  3 root root   18  5月 16 09:58 .pki
644 -rw-r--r--.  1 root root  129 12月 29  2013 .tcshrc
600 -rw-------.  1 root root 2539  5月 20 11:26 .viminfo
755 drwxr-xr-x. 15 root root 4096  5月 16 10:09 DevAudit
600 -rw-------.  1 root root  986  1月  1  2016 anaconda-ks.cfg
755 drwxr-xr-x.  5 root root   36  5月 20 11:29 perl5
644 -rw-r--r--.  1 root root   99  5月 20 11:26 test.pl
644 -rw-r--r--.  1 root root   28  5月 18 08:50 test1.txt
644 -rw-r--r--.  1 root root   86  5月 18 08:40 test2.txt

2.findコマンドで出力させる

findコマンドで、printfオプションで%mを用いることで、数字表記でのパーミッションを表示させることも可能だ。
以下の例では、カレントディレクトリ配下のファイル・ディレクトリに対してパーミッションやサイズ、ユーザ名等を取得している。

find . -maxdepth 1 -printf "%m %u:%g %s %p \n"
[root@BS-PUB-CENT7-01 ~]# find . -maxdepth 1 -printf "%m %u:%g %s %p \n"
550 root:root 4096 .
644 root:root 18 ./.bash_logout
644 root:root 176 ./.bash_profile
644 root:root 176 ./.bashrc
644 root:root 100 ./.cshrc
644 root:root 129 ./.tcshrc
600 root:root 986 ./anaconda-ks.cfg
600 root:root 1537 ./.bash_history
755 root:root 4096 ./DevAudit
740 root:root 18 ./.pki
755 root:root 31 ./.config
755 root:root 18 ./.local
644 root:root 28 ./test1.txt
644 root:root 86 ./test2.txt
644 root:root 99 ./test.pl
600 root:root 2539 ./.viminfo
755 root:root 89 ./.cpan
755 root:root 36 ./perl5
600 root:root 47 ./.lesshst

 

とりあえず2個。
lsとstat組み合わせた方が読みやすいかもしれない。

 

新しいLinuxの教科書 新しいLinuxの教科書

bashでtailとheadを使ってファイルからn文字~x文字の範囲を抜き出す

$
0
0

ちょっとした処理のために、bashでファイルから改行を含むn文字~x文字分の範囲を抽出したいなぁと思い、最初はreadで実現しようと思ったのだが、どうも改行を含む文字数となるとうまくいかなかった。
で、tailとheadでとりあえず実現したので、念のため備忘として残しておく。なお、この際改行も文字数として含まれるので注意すること。

cat file | tail -c +$((開始文字数 + 1)) | head -c $((終了文字数 + 1))

[root@BS-PUB-CENT7-01 ~]# cat test3.txt
123
456
789
ABC
DEF
GHI
JKL
MNO
PQR
STU
VWX
YZ
[root@BS-PUB-CENT7-01 ~]# cat test3.txt | tail -c +$((4 +1))
456
789
ABC
DEF
GHI
JKL
MNO
PQR
STU
VWX
YZ
[root@BS-PUB-CENT7-01 ~]# cat test3.txt | tail -c +$((4 +1)) | head -c $((7+1))
456
789

 

[改訂第3版]シェルスクリプト基本リファレンス ──#!/bin/shで、ここまでできる (WEB+DB PRESS plus) [改訂第3版]シェルスクリプト基本リファレンス ──#!/bin/shで、ここまでできる (WEB+DB PRESS plus)

scriptコマンドでターミナルログにタイムスタンプを付与+scriptreplayで正常にログを再生させる

$
0
0

ちょっと前にscriptコマンドで取得したターミナルログにタイムスタンプを付与する方法について記述したが、今回はその状態でさらにscriptreplayを行えるようにしてみる。
ここで厄介なのが、scriptreplayで用いるタイミングが記録されたファイルの書き方が、そのタイムスタンプ+表示されていた文字数になっている事。行数とかとくに気にされてないので、各行にタイムスタンプが差し込まれている現状だとその文字数が一体何行になるのかを知る必要がある。

1.ログ再生時にタイムスタンプを除外する場合

こっちは簡単。単純にcutコマンドを使ってファイルからタイムスタンプの部分を除外してやれば良い。

●ログ取得時

LANG=C script -fqt 2> log.time >(awk '{print strftime("%F %T ") $0}{fflush() }'>> log.session)

 

●ログ再生時

scriptreplay -t log.time <(cut -c 21- log.session)

2.ログ再生時にタイムスタンプが付与された状態にする場合

こっちが、冒頭で書いた点について気にしないといけないのでちょっと難しい。
少々長くなるのだが、ここでは以下のようにawkでタイミングごとの文字数を取得し、tailとheadでログファイルを指定された文字数の範囲を抽出して行数を計算することで対応している。ログ取得時のコマンドは同じなので割愛。

●ログ再生時

scriptreplay -t <(awk 'BEGIN{i=0}{cmd="cat log.session|cut -c 21-|tail -c +"i" |head -c "$2"|wc -l";cmd|getline c;i+=$2;print $1,$2+c*20}' log.time) log.session

とりあえずこんな感じだろうか。
これで、何時頃にどのようなコマンドを実行したのかを確認しつつ、操作時の挙動についても再生ができるはずだ。(vimとかの操作はちょっと厳しいかもしれない…)

なお、ターミナルログ自体はちゃんとタイムスタンプ付きで読める状態(vimとか使ったらわからないが…)になっている。

[root@BS-PUB-CENT7-01 ~]# cat log.session
2017-05-20 21:09:17 Script started on 2017年05月20日 21時09分17秒
2017-05-20 21:09:17 [root@BS-PUB-CENT7-01 ~]#
2017-05-20 21:09:17 [root@BS-PUB-CENT7-01 ~]#
2017-05-20 21:09:19 [root@BS-PUB-CENT7-01 ~]# ls -la
2017-05-20 21:09:19 total 120
2017-05-20 21:09:19 dr-xr-x---.  8 root root  4096  5月 20 21:09 .
2017-05-20 21:09:19 dr-xr-xr-x. 17 root root  4096  1月 20 00:01 ..
2017-05-20 21:09:19 -rw-------.  1 root root 18862  5月 20 21:09 .bash_history
2017-05-20 21:09:19 -rw-r--r--.  1 root root    18 12月 29  2013 .bash_logout
2017-05-20 21:09:19 -rw-r--r--.  1 root root   176 12月 29  2013 .bash_profile
2017-05-20 21:09:19 -rw-r--r--.  1 root root   176 12月 29  2013 .bashrc
2017-05-20 21:09:19 drwxr-xr-x.  4 root root    31  5月 16 10:03 .config
2017-05-20 21:09:19 drwxr-xr-x.  6 root root    89  5月 20 11:29 .cpan
2017-05-20 21:09:19 -rw-r--r--.  1 root root   100 12月 29  2013 .cshrc
2017-05-20 21:09:19 -rw-------.  1 root root    47  5月 20 16:26 .lesshst
2017-05-20 21:09:19 drwxr-xr-x.  3 root root    18  5月 16 09:59 .local
2017-05-20 21:09:19 drwxr-----.  3 root root    18  5月 16 09:58 .pki
2017-05-20 21:09:19 -rw-r--r--.  1 root root   129 12月 29  2013 .tcshrc
2017-05-20 21:09:19 -rw-------.  1 root root  3602  5月 20 19:27 .viminfo
2017-05-20 21:09:19 -rw-r--r--.  1 root root   618  5月 20 17:08 20170520_170807.log
2017-05-20 21:09:19 -rw-r--r--.  1 root root   295  5月 20 18:50 =time
2017-05-20 21:09:19 drwxr-xr-x. 15 root root  4096  5月 16 10:09 DevAudit
2017-05-20 21:09:19 -rw-r--r--.  1 root root   224  5月 20 17:06 aa
2017-05-20 21:09:19 -rw-------.  1 root root   986  1月  1  2016 anaconda-ks.cfg
2017-05-20 21:09:19 -rw-r--r--.  1 root root   311  5月 20 21:09 log.session
2017-05-20 21:09:19 -rw-r--r--.  1 root root     0  5月 20 21:09 log.time
2017-05-20 21:09:19 -rw-r--r--.  1 root root   258  5月 20 18:45 ls.log
2017-05-20 21:09:19 drwxr-xr-x.  5 root root    36  5月 20 11:29 perl5
2017-05-20 21:09:19 -rw-r--r--.  1 root root   496  5月 20 20:55 q
2017-05-20 21:09:19 -rw-r--r--.  1 root root    99  5月 20 11:26 test.pl
2017-05-20 21:09:19 -rw-r--r--.  1 root root   764  5月 20 18:56 test.session
2017-05-20 21:09:19 -rw-r--r--.  1 root root    91  5月 20 18:56 test.time
2017-05-20 21:09:19 -rw-r--r--.  1 root root    28  5月 18 08:50 test1.txt
2017-05-20 21:09:19 -rw-r--r--.  1 root root    86  5月 18 08:40 test2.txt
2017-05-20 21:09:19 -rw-r--r--.  1 root root    47  5月 20 20:33 test3.txt
2017-05-20 21:09:19 -rw-r--r--.  1 root root   554  5月 20 18:51 time
2017-05-20 21:09:19 -rw-r--r--.  1 root root  2081  5月 20 18:50 typescript
2017-05-20 21:09:19 [root@BS-PUB-CENT7-01 ~]#
2017-05-20 21:09:19 [root@BS-PUB-CENT7-01 ~]#
2017-05-20 21:09:20 [root@BS-PUB-CENT7-01 ~]#
2017-05-20 21:09:21 [root@BS-PUB-CENT7-01 ~]# pwd
2017-05-20 21:09:21 /root
2017-05-20 21:09:21 [root@BS-PUB-CENT7-01 ~]#
2017-05-20 21:09:22 [root@BS-PUB-CENT7-01 ~]#
2017-05-20 21:09:22 [root@BS-PUB-CENT7-01 ~]#
2017-05-20 21:09:22 [root@BS-PUB-CENT7-01 ~]#
2017-05-20 21:09:25 [root@BS-PUB-CENT7-01 ~]# exit
2017-05-20 21:09:25 exit

 

Bash Pocket Reference Bash Pocket Reference

シェル芸でファイル読み込み時に文字を1文字づつゆっくりターミナル上に表示させる

$
0
0

LinuxやOS Xでファイルの中身を表示する際、catなどで開くと一瞬で中身を表示してくれるのだが、これを1文字づつゆっくり表示させることができないかと思いやってみた。
意外と簡単にできるようだ。ここでは、例としてtest1.txtというファイルに対して処理を行っている。

無難にwhileとreadを組み合わせてやる場合、以下のようにコマンドを実行する。

cat test1.txt | while IFS= read -rN1 c; do printf "$c";sleep 0.1;done
while IFS= read -rN1 c; do printf "$c";sleep 0.1;done < test1.txt

もしくはちょっと長くなるのだが、scriptreplayコマンドを利用する方法も面白いかもしれない。

scriptreplay -t <(yes 0.1 1 | head -$(wc -m test1.txt | awk '{print $1}')) <(cat <(echo '') test1.txt)
scriptreplay -t <(yes 0.1 1) <(cat <(echo '') test1.txt) 2> /dev/null

 

ちょっとだけLinuxにさわってみたい人のための Bash on Ubuntu on Windows入門 ちょっとだけLinuxにさわってみたい人のための Bash on Ubuntu on Windows入門

Linuxのscriptコマンドで覚えておくと便利な使い方4個

$
0
0

よくターミナルでの作業ログなどを記録する際に用いられるscriptコマンドだが、オプション自体はあまり多くは無いのだがうまいこと使えれば色々な使い方ができる。個人的にはよく利用されていると思っていたのだが、あまり周りで使ってる人がいないようなので、とりあえず個人的に知っている使い方についてまとめてみることにした。

1.基本的な使い方

オプション無しで実行することにより、カレントディレクトリに「typescript」というファイルを作成して作業終了後に操作ログを出力してくれる。

script

 

指定したファイルに記録する場合は、以下のように引数として出力先のPATHを指定してやればよい。

script PATH
script ./$(date +%Y%m%d_%H%M%S).log # ログ名にタイムスタンプを付与する場合

ログに追記する

オプション無しで実行した場合、既存のファイルがあった場合上書きしてしまう。
追記する場合は、「-a」オプションを付与することで対応できる。

script -a
[root@BS-PUB-CENT7-01 ~]# script
スクリプトを開始しました、ファイルは typescript です
[root@BS-PUB-CENT7-01 ~]# echo aaa
aaa
[root@BS-PUB-CENT7-01 ~]# exit
exit
スクリプトを終了しました、ファイルは typescript です
[root@BS-PUB-CENT7-01 ~]# cat typescript
スクリプトは 2017年05月20日 17時13分53秒
 に開始しました[root@BS-PUB-CENT7-01 ~]# echo aaa
aaa
[root@BS-PUB-CENT7-01 ~]# exit
exit

スクリプトは 2017年05月20日 17時13分58秒
 に終了しました[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# script -a
スクリプトを開始しました、ファイルは typescript です
[root@BS-PUB-CENT7-01 ~]# echo bbb
bbb
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# exit
exit
スクリプトを終了しました、ファイルは typescript です
[root@BS-PUB-CENT7-01 ~]# cat typescript
スクリプトは 2017年05月20日 17時13分53秒
 に開始しました[root@BS-PUB-CENT7-01 ~]# echo aaa
aaa
[root@BS-PUB-CENT7-01 ~]# exit
exit

スクリプトは 2017年05月20日 17時13分58秒
 に終了しましたスクリプトは 2017年05月20日 17時14分04秒
 に開始しました[root@BS-PUB-CENT7-01 ~]# echo bbb
bbb
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# exit
exit

スクリプトは 2017年05月20日 17時14分08秒
 に終了しました[root@BS-PUB-CENT7-01 ~]#

指定したコマンドを実行する

Linuxのscriptコマンドでは、以下のようにすることで指定したコマンドの内容のみをログに記録する事ができる。
(BSD系の場合はちょっと指定方法が違うので注意)

script -c 'Command' PATH # Linux
script PATH 'Command' #BSD(Mac OS X)

 

実行コマンドの終了ステータスをscriptコマンド側で得る場合は、「-e」オプションも付与することで取得可能だ。

script -ec 'Command' PATH
[root@BS-PUB-CENT7-01 ~]# script -c 'ls -l /c' ls.log
スクリプトを開始しました、ファイルは ls.log です
ls: /c にアクセスできません: そのようなファイルやディレクトリはありません
スクリプトを終了しました、ファイルは ls.log です
[root@BS-PUB-CENT7-01 ~]# echo $?
0
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# script -ec 'ls -l /c' ls.log
スクリプトを開始しました、ファイルは ls.log です
ls: /c にアクセスできません: そのようなファイルやディレクトリはありません
スクリプトを終了しました、ファイルは ls.log です
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# echo $?
2

リアルタイムで書き込みをする

通常、ログファイルへの書き込みはscriptコマンドの実行終了時になるが、「-f」オプションを付与することで即座に書き込みをさせるようにできる。

script -f

開始メッセージを表示させない

ログ取得開始メッセージを非表示にする場合、「-q」オプションを付与する。

script -q
[root@BS-PUB-CENT7-01 ~]# script
スクリプトを開始しました、ファイルは typescript です
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# exit
exit
スクリプトを終了しました、ファイルは typescript です
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# script -q
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# exit
exit
[root@BS-PUB-CENT7-01 ~]#

2.scriptreplayでログを再生する

以前にもここで触れたのだが、scriptコマンドでは、-tオプションで各種操作のタイミングを取得しておくことで、scriptreplayコマンドを使って操作内容を再生することができる。
なお、この機能を利用する際は日本語環境だとうまくいかない(タイムログの中で計算している文字数と合わなくなる)ので、LANG=Cを実行前に行っておくと良いだろう。以下の例では、log.timeに操作のタイミングを、log.sessionに操作内容を記録している。

LANG=C script -t 2> log.time log.session

記録されたタイミングログと操作ログを組み合わせ、以下のようにscriptreplayコマンドを実行することで、操作内容を再生できる。

scriptreplay -t log.time log.session

3.Teratermログのように、ログにタイムスタンプを付与する

以前ここに書いた内容だが、scriptコマンドで取得したログにTeratermログのようなタイムスタンプを付与する場合は、以下のように出力時にawkを間に入れてやることで対応が可能だ。

script -fq >(awk '{print strftime("%F %T ") $0}{fflush() }'>> PATH)

 

もしscriptreplayと組み合わせて使用する場合は、以前ここにも書いたのだが、以下のようにコマンドを実行すれば良い。
(ログのタイミングを記録するのがlog.time、ターミナルログ自体はlog.sessionで記述している)

●ログ取得時

LANG=C script -fqt 2> log.time >(awk '{print strftime("%F %T ") $0}{fflush() }'>> log.session)

 

●scriptreplay実行時

scriptreplay -t log.time <(cut -c 21- log.session) # タイムスタンプ無しで再生する場合
scriptreplay -t <(awk 'BEGIN{i=0}{cmd="cat log.session|cut -c 21-|tail -c +"i" |head -c "$2"|wc -l";cmd|getline c;i+=$2;print $1,$2+c*20}' log.time) log.session # タイムスタンプ付きで再生する場合

4.他のターミナルセッションに操作内容を表示させる

ログの出力先を他のターミナルセッションにすることで、現在操作中の内容を他のセッションの利用者(別にssh接続している人間)に見せる事ができる。
詳細については以前こちらに記述しているので、そっちを参照。

script -fq /dev/pts/n

 

大体こんなところだろうか。
他にも色々と使い方があると思うが、ひとまずこんな感じで。

 

Windows/Linuxのトラブル追跡実践ノウハウ エンジニア必携 Windows/Linuxのトラブル追跡実践ノウハウ エンジニア必携

bashでバックグラウンドジョブの終了メッセージを表示させないようにする

$
0
0

よく、バックグラウンドで実行したいコマンドに対して、以下のように末尾に&を付けて実行させているのだが、この場合処理が終了するとジョブの実行完了メッセージが表示される。

[root@BS-PUB-CENT7-01 ~]# cat test1.txt > ./test1.txt.bk &
[1] 17008
[root@BS-PUB-CENT7-01 ~]#
[1]+  終了                  cat test1.txt > ./test1.txt.bk

このメッセージを非表示にしたい場合、以下のように実行するコマンドを()で囲ってグループにしてやるといいようだ。

(cmd &)
[root@BS-PUB-CENT7-01 ~]# cat test1.txt > ./test1.txt.bk &
[1] 17010
[root@BS-PUB-CENT7-01 ~]#
[1]+  終了                  cat test1.txt > ./test1.txt.bk
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# (cat test1.txt > ./test1.txt.bk &)
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# jobs
[root@BS-PUB-CENT7-01 ~]#

 

[改訂第3版]シェルスクリプト基本リファレンス ──#!/bin/shで、ここまでできる (WEB+DB PRESS plus) [改訂第3版]シェルスクリプト基本リファレンス ──#!/bin/shで、ここまでできる (WEB+DB PRESS plus)

Nginxで読み込まれているモジュールの一覧を取得する

$
0
0

Nginxで、現在読み込まれているモジュールの一覧を取得する必要があったので、備忘で残しておく。
Nginxでは、-Vオプションを付与することでコンパイル時の情報が得られるので、以下のようにコマンドを実行することでそこからコンパイル時のモジュール情報を抽出できる。

nginx -V 2>&1 | grep -oP '[a-z_]+_module'

[root@BS-PUB-CENT7-01 ~]# nginx -V 2>&1
nginx version: nginx/1.12.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
[root@BS-PUB-CENT7-01 ~]# nginx -V 2>&1 | grep -oP '[a-z_]+_module'
http_addition_module
http_auth_request_module
http_dav_module
http_flv_module
http_gunzip_module
http_gzip_static_module
http_random_index_module
http_realip_module
http_secure_link_module
http_slice_module
http_ssl_module
http_stub_status_module
http_sub_module
mail_ssl_module
stream_realip_module
stream_ssl_module
stream_ssl_preread_module

 

nginx実践ガイド impress top gearシリーズ nginx実践ガイド impress top gearシリーズ

bashでファイルから1文字づつ読み込んで処理をさせる

$
0
0

bashで、ファイルから1文字づつ読み込んで処理をさせる(改行も含む)場合、以下のようにwhileとreadを組み合わせてやると良いだろう。
readで改行を含めてn個づつ処理を指せる場合、オプションは-nではなく-Nを指定する必要があるので注意。

while IFS= read -rN1 char;
do
    printf "$char";
    sleep 0.1;
done < test1.txt

 

[改訂第3版]シェルスクリプト基本リファレンス ──#!/bin/shで、ここまでできる (WEB+DB PRESS plus) [改訂第3版]シェルスクリプト基本リファレンス ──#!/bin/shで、ここまでできる (WEB+DB PRESS plus)

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

$
0
0

WebアプリケーションのオープンソースSSOツールというと有名なのがOpenAMだと思うが、他にも無いのかなと調べて見たところ、『LemonLDAP::NG』なるツールを見かけた。ドキュメントもかなり揃ってるし、スクリーンショットを見る限り良さげな感じ。今回は、とりあえずCentOS 7にインストールをして動作させるまでをやってみる(ActiveDirectoryやOpenLDAPとの連携まではまた後日)。複数台に役割を分散させることができるようなのだが、ここでは一台で全ての役割を担当させている。ちなみにWebサーバはApacheかNginxを選べるようなのだが、ここではNginxを選択。

1.事前にインストールが必要なパッケージの導入

まずこちらのドキュメントの通り、以下のコマンドで事前にインストールが必要になるパッケージを導入する。
この時点でNginxについてもインストールしてしまう。

yum install -y epel-release
yum install -y perl-Apache-Session perl-LDAP perl-XML-SAX perl-XML-NamespaceSupport perl-HTML-Template perl-Regexp-Assemble perl-Regexp-Common perl-Error perl-IPC-ShareLite perl-Cache-Cache perl-FreezeThaw perl-XML-Simple perl-version perl-CGI-Session perl-DBD-Pg perl-XML-LibXML-Common perl-BSD-Resource perl-XML-LibXML perl-Crypt-Rijndael perl-IO-String perl-XML-LibXSLT perl-SOAP-Lite perl-Config-IniFiles perl-JSON perl-Digest-HMAC perl-Digest-SHA perl-String-Random perl-MIME-Lite perl-Email-Date-Format perl-Crypt-OpenSSL-RSA perl-Crypt-OpenSSL-X509 perl-Clone perl-Authen-SASL perl-Log-Log4perl perl-Unicode-String perl-Net-CIDR-Lite perl-Cache-Memcached perl-Convert-PEM perl-Mouse perl-Plack perl-Authen-Captcha

 

Nginxについては、「http_auth_request_module」などが読み込まれている必要があるので、Nginxのリポジトリを登録してインストールをする。

cat << "EOF" >> /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
EOF
yum install -y nginx

2.『LemonLDAP::NG』のインストール

事前に必要となるパッケージ類のインストールが終わったら、LemonLDAP::NGのインストールを始めよう。
まず以下のコマンドでLemonLDAP::NG用のリポジトリを登録する。

cat << "EOF" >> /etc/yum.repos.d/lemonldap-ng.repo
[lemonldap-ng]
name=LemonLDAP::NG packages
baseurl=https://lemonldap-ng.org/redhat/stable/$releasever/noarch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-OW2
EOF

リポジトリ登録後、以下のコマンドを実行してLemonLDAP::NGをインストールする。

yum update -y
rpm --import https://lemonldap-ng.org/_media/rpm-gpg-key-ow2
yum install -y lemonldap-ng

 

インストールが完了したら、ひとまずサンプル名になっているドメイン名をLemonLDAP::NGで使用するドメイン名(以下の例では、lemon.blacknon.local)に置換する。
「/etc/lemonldap-ng/for_etc_hosts」の中を見るとわかるのだが、指定したドメイン名に対し、更にサブドメインとしてauth.*やmanager.*といったドメインが利用されるので、これらも含めてDNSに登録しておくと良いだろう。

sed -i 's/example\.com/lemon.blacknon.local/g' /etc/lemonldap-ng/* /var/lib/lemonldap-ng/conf/lmConf-1.js /var/lib/lemonldap-ng/test/index.pl
echo "127.0.0.1 lemon.blacknon.local" >> /etc/hosts
cat /etc/lemonldap-ng/for_etc_hosts >> /etc/hosts

 

次に、Nginxとの連携用のパッケージを導入、サービスを起動させる。設定ファイルをシンボリックリンクで配置する。

yum install -y lemonldap-ng-fastcgi-server
systemctl enable llng-fastcgi-server
systemctl start llng-fastcgi-server

 

設定ファイルのシンボリックリンクを配置する。

ln -s /etc/lemonldap-ng/handler-nginx.conf /etc/nginx/conf.d/
ln -s /etc/lemonldap-ng/manager-nginx.conf /etc/nginx/conf.d/
ln -s /etc/lemonldap-ng/portal-nginx.conf /etc/nginx/conf.d/
ln -s /etc/lemonldap-ng/test-nginx.conf /etc/nginx/conf.d/

本来であれば、この後ActiveDirectoryやLDAPサーバなどとの連携設定を行う必要があるのだが、ひとまず今の時点でもブラウザからアクセスくらいはできる。
今回はとりあえずそこまでで一区切りとするので、以下のコマンドを実行してNginxを起動する。

systemctl start nginx

 

ブラウザから「http://auth.lemon.blacknon.local」にアクセスすると、ログイン画面が表示される。

 

 

デフォルトで利用できるユーザが幾つかあるので、とりあえずそちらを利用してログインしてみよう。
次回以降、LDAP連携等を行ってのテストを行おう(気が向けば)。

 

ひと目でわかるAzure Active Directory ひと目でわかるAzure Active Directory

bashで実行するコマンドをbash_historyに記録させたくない場合

$
0
0

bashで、オプションにパスワードを指定したりした場合など、実行したコマンドをbash_historyに記録させたくない場合がある。
そういった場合、以下のコマンドを実行(起動時に設定するなら.bashrcなどに追記)してやることで、コマンド実行時に頭に空白がある場合はhistoryにコマンドが残らないよう設定ができる。

export HISTCONTROL=ignorespace # 空白から始まるコマンドをhistoryに記録しない
export HISTCONTROL=ignoreboth # 空白のみ+空白から始まるコマンドをhistoryに記録しない

上のコマンド実行後は、historyに記録しないコマンドの先頭にはスペースを入力してやればよい。

 □cmd
[root@BS-PUB-CENT7-01 ~]# echo 1
1
[root@BS-PUB-CENT7-01 ~]# history | tail -10
  988  echo grep $^
  989  echo grep $
  990  echo grep $x
  991  echo grep $?:PO<>
  992  echo grep $?
  993  man /bash
  994  man bash
  995  clear
  996  echo 1
  997  history | tail -10
[root@BS-PUB-CENT7-01 ~]# export HISTCONTROL=ignorespace
[root@BS-PUB-CENT7-01 ~]#  echo 2
2
[root@BS-PUB-CENT7-01 ~]# history | tail -10
  990  echo grep $x
  991  echo grep $?:PO<>
  992  echo grep $?
  993  man /bash
  994  man bash
  995  clear
  996  echo 1
  997  history | tail -10
  998  export HISTCONTROL=ignorespace
  999  history | tail -10

 

…まぁ、といってもbash_historyに記録させないようにしているだけなので、auditログやSnoopyLoggerで別にログを取っている場合は当然残るし、scriptコマンドなどを裏で使っている場合でも同様なので、気休め程度かな。

 

Bash Pocket Reference Bash Pocket Reference

nohupコマンドの出力ログにタイムスタンプを付与する

$
0
0

先日からscriptコマンドの出力ログにタイムスタンプを付与させる処理について色々とやっていたのだが、ふとnohupでも同様のことができるのではないかと思いやってみた。
で、想定どおり同様の方法でタイムスタンプの付与が行える事が確認できた。

nohup コマンド > >(awk '{print strftime("%F %T : ") $0}{fflush() }'>> PATH)

[root@BS-PUB-CENT7-01 ~]# seq 1 15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@BS-PUB-CENT7-01 ~]# nohup seq 1 15 > >(awk '{print strftime("%F %T : ") $0}{fflush() }'>> test_nohup.log)
nohup: 標準入力を無視し、標準エラー出力を標準出力にリダイレクトします
[root@BS-PUB-CENT7-01 ~]# cat test_nohup.log
2017-05-22 06:04:30 : 1
2017-05-22 06:04:30 : 2
2017-05-22 06:04:30 : 3
2017-05-22 06:04:30 : 4
2017-05-22 06:04:30 : 5
2017-05-22 06:04:30 : 6
2017-05-22 06:04:30 : 7
2017-05-22 06:04:30 : 8
2017-05-22 06:04:30 : 9
2017-05-22 06:04:30 : 10
2017-05-22 06:04:30 : 11
2017-05-22 06:04:30 : 12
2017-05-22 06:04:30 : 13
2017-05-22 06:04:30 : 14
2017-05-22 06:04:30 : 15

 

使うことがあるのかと言われると微妙だが、まぁとりあえずできるということで。

 

Linuxステップアップラーニング Linuxステップアップラーニング

Linuxで各グループに所属しているユーザを一覧にする

$
0
0

前にユーザが所属しているグループの一覧を取得する処理について記述したが、今回はLinuxで各グループごとに所属しているユーザ一覧が必要になったので、出力用のコマンドを備忘で残しておく。
サブグループとして後から追加させたりしたユーザについては、getentコマンドで取得可能だ。

getent group
[root@BS-PUB-CENT7-01 ~]# getent group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
…

ただ、あくまでもサブグループとして後からグループに参加させたりしたユーザのみしか表示されないので、システムユーザだったり、プライマリグループに所属しているユーザは表示されない。
それらを表示させるため、以下のようにちょっと無理やり出力させるコマンドを書いてみた。

getent group | awk -F: '{cmd="lid -ng "$1"|tr -d \"\n\" ";cmd|getline c;close(cmd);print $1":"c}'
[root@BS-PUB-CENT7-01 ~]# getent group | awk -F: '{cmd="lid -ng "$1"|tr -d \"\n\" ";cmd|getline c;close(cmd);print $1":"c}'
root: root sync shutdown halt operator
bin: bin
daemon: daemon
sys: daemon
adm: adm
tty: adm
disk: adm
lp: lp
mem: lp
kmem: lp
wheel: lp
cdrom: lp
mail: mail postfix
man: mail postfix
dialout: mail postfix
floppy: mail postfix
games: mail postfix
tape: mail postfix
video: mail postfix
ftp: ftp
lock: ftp
…

 

Linuxステップアップラーニング Linuxステップアップラーニング

CentOS 7にMavenをインストールする

$
0
0

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/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
rpm -ihv jdk-8u131-linux-x64.rpm

 

次に、以下のコマンドでMavenのインストールを行う。

cd /opt
wget http://ftp.riken.jp/net/apache/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz
tar xzvf apache-maven-3.5.0-bin.tar.gz
mv apache-maven{-3.5.0,}

実際にMavenを利用するユーザでPATHを通しておく。

cat << "EOF" >> ~/.bash_profile
export JAVA_HOME=/usr/java/default/
export PATH=$PATH:/opt/apache-maven/bin
EOF
. ~/.bash_profile

 

コマンドを実行して、mavenが利用できることを確認する。

mvn --version
[root@BS-PUB-CENT7-01 ~]# mvn --version
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T04:39:06+09:00)
Maven home: /opt/apache-maven
Java version: 1.8.0_131, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_131/jre
Default locale: ja_JP, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-514.2.2.el7.x86_64", arch: "amd64", family: "unix"

 

Apache Maven 3クックブック Javaソフトウェア開発のための特選レシピ集 Apache Maven 3クックブック Javaソフトウェア開発のための特選レシピ集

CentOS 7でchroot環境+sftp専用のユーザを作成する

$
0
0

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

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

 

ログイン元の公開鍵が/tmp/publicとして置いてあると仮定して、以下のように公開鍵設定をする。
設定完了後、とりあえず今の時点で鍵認証でsshログインが行える事を確認すると良いだろう。

cat /tmp/public >> ~sftp/.ssh/authorized_keys
chown -R sftp. ~sftp/.ssh
chmod 700 ~sftp/.ssh
chmod 600 ~sftp/.ssh/*

「/etc/ssh/sshd_config」を編集し、接続ユーザがsftpだった場合のみ、以下の条件の設定をする。
なお、Matchで設定できる条件はユーザの他グループや接続ネットワークなどを指定できるので、設定したい環境に応じて記述してやると良いだろう。

  • 実行可能プログラムのsftpへの制限
  • Chrootで、接続ユーザから見たルートディレクトリを指定したディレクトリとする(ホームディレクトリを指定する場合は「~」)
# 標準のsftpサーバからinternal-sftpに変更する
#Subsystem       sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp

# 接続ユーザがsftpだった場合、chrootの設定と実行プログラムとしてsftpの指定
Match User sftp
    ChrootDirectory ~
    ForceCommand internal-sftp

 

なお、この時chrootを設定するディレクトリは、所有者・グループがroot:root、権限は755にする必要が有るので注意。
これができてないと、鍵認証で接続ができた直後に切断されてしまう。

設定完了後、sshdを再起動する。
再起動後、sftpで接続できること、sshでの接続ができないこと、Chrootがされていることを確認する。

blacknon@BS-PUB-DEVELOP:~$ ssh sftp@BS-PUB-CENT7-01
Could not chdir to home directory /home/sftp: No such file or directory
This service allows sftp connections only.
Connection to BS-PUB-CENT7-01 closed.
blacknon@BS-PUB-DEVELOP:~$ sftp sftp@BS-PUB-CENT7-01
Connected to BS-PUB-CENT7-01.
sftp> pwd
Remote working directory: /
sftp> ls -la
drwxr-xr-x    3 0        0              90 May 29 22:33 .
drwxr-xr-x    3 0        0              90 May 29 22:33 ..
-rw-------    1 1000     1000            5 May 29 22:33 .bash_history
-rw-r--r--    1 1000     1000           18 Dec  6 23:19 .bash_logout
-rw-r--r--    1 1000     1000          193 Dec  6 23:19 .bash_profile
-rw-r--r--    1 1000     1000          231 Dec  6 23:19 .bashrc
drwx------    2 1000     1000           28 May 29 22:31 .ssh
sftp>

 

OpenSSH[実践]入門 Software Design plus OpenSSH[実践]入門 Software Design plus

 

Viewing all 498 articles
Browse latest View live




Latest Images