つぶやき
技術系や雑感等は再編集して本文の記事にする事を前提としているので、こっちにLinkを張らないでください。
気になった記事から思ったこと @20170705-2
山賀さんの記事より。
要するに、
- 多くのユーザーが、脆弱性を抱えているadobe flashを利用している
- 調査範囲内では、古いプレーヤーの利用率が、前年の調査より上がっている
- flash playerの利用率自体は減少傾向にある
- duo securityは、chromeの利用を推奨している。セキュリティ系の企業が名指しで実装を推奨するのは珍しい
といった内容です。
記事中に記載されていませんでしたが、Duo security (最初avastと書きましたが、思い込みでの勘違いでした。訂正します) がchromeを推すのは、恐らく、
- chrome自身にflash playerが内蔵されている
- chromeは更新が早く、常に最新のflash playerに対応している
- 調査結果から、割合chromeユーザーは更新頻度が高いと見られる
からでしょう。推すことに対する是非は人によるでしょうが、例えばavastは昔からchrome推しなので、まぁそんなものかと。 まだ、著者の山賀さん曰く
「あまりの調査結果に「やむにやまれず」という思いはちょっと感じられます^^」
とありましたが、僕もそう思います。
個人的にはflashはもう滅びて欲しいけど、使うなら常に最新の物を使いたいものですね。
困るのは、子供付けのページの動画がflashが多いことだな。これは、なんとかならないものかと思います。
WebPageのSSL化
本サイトを含め、個人的に管理しているサイトがそこそこあるわけだが、昨今の様々な要請からSSL化を進めることにした。 (そういうわけでLet's Encryptと格闘していたのだが)
その結果、WordPressとRedmine系を除いて、概ねLet's Encryptの証明書を利用したSSL化が一通り区切りがついた。
まぁ、証明書が入手できさえすれば、SSL化は簡単ではあるけど。
server {
listen xxx.xxx.xxx.xxx:80;
server_name www.seirios.org;
return 301 https://$host$request_uri;
}
server {
listen xxx.xxx.xxx.xxx:443 ssl;
server_name www.seirios.org;
ssl on;
...
}
結構重要なこととして、コンテンツ側に記載されているLink等のうち、自らを示しているURLを一通り確認すること。 これをしないと、結局一部SSL化されないURLが残るので、面倒なことになりかねない。
shell scriptとwhileとreadとssh
大変にハマったのでメモ書き。今日はもういいや。
shell scriptにおいて、ファイルから1行ずつ読み込んで処理をするような場合、以下のようにかける。
while read line; do echo ${line} done < file
ところが、この手を使ってsshを実行すると、なぜか最初の行しか実行されない
while read line; do ssh xxx.xxx.xxx.xxx ${line} # XXX 期待通りに動かない done < file
原因はsshコマンド実行に伴う標準入力の切替と考えられる。 sshコマンドを実行すると、ローカルホストのstdinからの入力を終了し、sshで指定したリモートホストのstdinからの入力受付を開始する。 従って、ローカルホストのファイルの読込みを終了させた上でsshコマンドを実行し、再びreadコマンドを実行しようとしていると考えられる。もちろん、この時点で既にファイルがcloseされている為、whileが終了してしまう。
対策は、sshに-nオプションをつけること。これよって、sshコマンドのstdin切り替えを禁止することが出来る。
この原因がちっともわからず、数時間を無駄にしてしまった。
while read line; do ssh -n xxx.xxx.xxx.xxx ${line} # これで/dev/nullがsshのstdinにつながる done < file
このほかに、for文で for line in `cat file` で代用する手も考えられるが、これは、行にスペースがある場合、$lineに代入される値が1行まるごとではなく、スペースまでの部分になるので、ここにも明確な罠があると考えられる。これを回避するにはIFSを変えれば良いのだから、
IFS=$'\n' # 区切り文字を" "から"\n"に変える for line in `cat file`; do # while readの代わりにcatで読み込ませる ssh -n xxx.xxx.xxx.xxx ${line} done
あと、whileはちょっと特殊な制御文で、場合によってはwhile内で変数設定しているはずなのにloopをでてくると変数が空のようなことが起こる。 これは、Whileと他のコマンドを組み合わせた場合、組み合わせ方次第で処理がsubshellがわで処理されてしまう事が原因である。 shellでpipelineを用いて実行した処理は、subshellで処理される。while loopの内部でpipelineを利用すると、whileブロック全体がsubshellで処理されるため、whileブロックの内部と外部で変数の共有が出来ない。 このような場合、whileに対して出力をredirectしてやることで解決できる。
while read line; do OUT=`echo ${line} | sed 's/test/test2'` done < $1 echo ${OUT}
なお、/bin/shの引数に -v や -x をつけると、デバッグに大変に役立つ
