mochikoAsTechのdig日記

当方好きなコマンドはdigです!お友達から!!よろしくお願いします!!!

ドメインの期限がモノによって1年後の「月末まで」だったり、しっかり365日後だったりするのは何故?

ドメインを買った時、たとえば2月3日に買っても翌年の2月28日までになってるドメインと、きっちり365日後の2月2日までになってるドメインがあって、これなんなんだろー?と思ってたんだけど、最近謎が解けた。(推察だけど多分あってる)

jpドメインはいつ買っても、有効期限は翌年の同月月末になる模様。さすがJPRS、お値段高いだけあるー。親切設計ー。

でもその他のTLD(comとかnetとか)は、普通に1年後。

分かるけど、分かるけども、レジストリごとに仕様違うの面倒臭い・・・そういう世界なのは分かるんだけど、もうちょっと足並みを揃えてくれ・・・・Whoisの項目とかもバラバラじゃないか・・・。

お名前.comのWhois情報公開代行を使ったまま、RapidSSLのSSL証明書を発行する方法

個人で購入したドメインで、HTTPSのサイトを開きたい! 自己署名のオレオレ証明書じゃなくて、RapidSSLみたいなDVの証明書買いたい! でもWhoisを公開するのは嫌!一時的に公開して、また代行に戻すと(たぶん)お金かかるから嫌! そのドメインでメールも受信してない!という状況で色々悩んだのでメモ。

先ずCSRのDN(ディスティングイッシュネーム)って何にしたらいいの?

DNって主要なのは 国名 (C)、都道府県名 (S/ST) 、市町村名 (L)、組織名 (O)、組織単位名(OU)、コモンネーム (CN)なんだけど、RapidSSLCSRでここを真面目に入力しても、証明書になって返ってくるときは全部 「GeoTrust Inc.」とかに塗りつぶされてて、結局コモンネーム (CN)しか残らない。(だってDV証明書だから身元証明しないもん)

じゃあ全部適当でいいかと言うとそうでもなくて、組織名 (O)は、そのドメインWhoisで組織名(Organization)に登録されているものと同一じゃないとダメ。(即発行されなくて面倒、と聞いたことがある)

という訳で、お名前.comのWhois情報公開代行を使っているときのCSRは、こんな感じで。

国名 (C):JP 都道府県名 (S/ST):Tokyo 市町村名 (L):Shibuya-ku 組織名 (O):Whois Privacy Protection Service by onamae.com 組織単位名(OU):なし(何も入力しないでEnter) コモンネーム (CN):証明書が必要なFQDN

そして申し込むときに「指定ファイルアップロードによる承認」を選ぶ。

申し込み完了すると、「こういうファイル名で、中にこう書いてあるファイルをアップして」というメールが来るので、アップすれば、1分に1回のペースでアクセスが来てて、ファイルを確認できたらすぐに証明書が発行される。

よかったー、Whois情報公開代行使ってて、かつメールの受信が出来なくても、この方法なら発行できたよー。

「このファイルは絶対に消さないで」とお願いしておくより、chattr +i しておいた方が確実で安全

複数名でサイトを更新したり、rsyncで定期的にファイルが更新されるようなとき、「このファイルだけは!消したり、更新したりしないで!触らないでえええ」というファイルがあったら、一生懸命お願いするよりchattr +iしておく方が確実だし安全。

chattrコマンドはchange attribute(属性の変更)の略で、ファイルの属性を色々変更できる。

chattr +i ファイル名

しておけば、オプションのiはimmutable(変更不可)なので、これをやっておくと、ファイルに対して読み書き実行の権限を持ってるオーナーは勿論、なんとrootですら一切変更・削除が出来なくなる。rootがrm -fしたって、rm: cannot removeと出るから安心!

逆にchattrで設定してあることを知らずに、lsで権限を確認して、権限はあるはずなのにこのファイル消せないー!となった時は、lsattrコマンドで状態を確認すべき。

# lsattr ファイル名
----i--------e- ファイル名 ←iが付加されている状態

# chattr -i ファイル名 ←-オペレータで、i(変更不可)の属性を解除すると
# lsattr ファイル名 ←iが消えた
-------------e- ファイル名

-(マイナス)オペレータでiを解除してやれば、ファイルは触れるようになる。わー、chattr便利ー。

WordPressの更新をFTPからSSHの鍵認証に変更したい

WordPress本体の更新とか、プラグインやテーマの追加を管理画面からしたーい!でもFTPはいやじゃー!SSHでさせろー!と思ったら、色々ごにょごにょしなきゃダメだった、というメモ。

先ずは

yum install php-pear
yum install libssh2 libssh2-devel
pecl install ssh2

したら怒られたので、

yum install php-devel
pecl install channel://pecl.php.net/ssh2-0.12
vi /etc/php.d/ssh2.ini
extension=ssh2.so を追記
/etc/init.d/httpd restart

で管理画面開いたら、選択肢にSSH2が増えてた!

ここまでの参考: WordPressでFTP接続情報が表示、SSH転送で回避 | WordPress on LAMP(Linux、Apache、MySQL、PHP)でサーバー管理入門 phpでssh2を使えるようにpecl ssh2をインストールする | レンタルサーバー・自宅サーバー設定・構築のヒント うえちょこ@ぼろぐ» [php]PECLコマンドが成功するまでのエラー解決備忘録(imagick編) Editing wp-config.php « WordPress Codex

そしてここ見ると鍵ペア作って、公開鍵を自分のauthorized_keysに入れろって言ってるんだよね。ちょっと待て、お前WordPressが動いてるサーバで作った秘密鍵を、WordPressの本家サーバに持ってく気なのか?AWS方式か?え。え。>http://serverfault.com/questions/182508/wordpress-ssh-upgrade-problem

なんかそれ嫌だなー、と思いつつ、試してはみたところ、

Aug 27 13:39:11 galbo sshd[4732]: Set /proc/self/oom_score_adj to 0
Aug 27 13:39:11 galbo sshd[4732]: Connection from 153.121.58.159 port 50876
Aug 27 13:39:11 galbo sshd[4733]: Received disconnect from 153.121.58.159: 11: PECL/ssh2 (http://pecl.php.net/packages/ssh2)

SSHのログにこう出るばかりで、どうしても鍵認証が失敗して更新できない。

ので、今のところ更新が必要な時だけ、一時的にSSHのパスワード認証をオンにしてWordPressやらプラグインやらを更新してる。勿論、更新後はすぐにPasswordAuthentication = noにしてる。もうこれでいいか・・・なんか負けた気分だ・・・。

IfModuleディレクティブのあるなしの不思議

割と古めなApachehttpd.confだと、DirectoryIndexディレクティブの記述が

<IfModule dir_module>
DirectoryIndex index.html
</IfModule>

ってなってて、なんで「dir_moduleがあったら」なんだろー?と思ったら、万が一なかったときでも、Apache起動するようにという安全策なのだね。

最近はこのモジュール入ってないことなんかないから、最近yumで入れたApache 2.2.15のhttpd.confでは、普通に

DirectoryIndex index.html index.html.var

になってた。>http://httpd.apache.org/docs/2.2/ja/mod/mod_dir.html

そしてindex.htmlはともかく、その後ろのindex.html.varってなんぞ?と思ったら、HTTP/1.1のコンテントネゴシエーションなのね。ブラウザの言語によって、返すコンテンツを変えたりできるとな!>http://httpd.apache.org/docs/2.2/ja/content-negotiation.html

RewriteRule ^(.*)$ [F]って書いたのに、403 Forbiddenじゃなくて400 Bad Requestが返ってくるのはなぜ?

ある条件に当てはまるリクエストが来たら、403 Forbiddenを返したい!と思って、RewriteRuleを調べてたらこんなの出てきた。

mod_rewriteでアクセス拒否? | Life is Real.

「おおー、[F](=[forbidden])なんてあるんだー」と思ってこう書いた。

RewriteEngine On
RewriteCond 「こういう条件に当てはまったら」という条件文
RewriteRule ^(.*)$ [F]

そしたら何故かRewriteRule ^.*$ [F]でアクセスしたら、「400 Bad Request」になりまし... - Yahoo!知恵袋とまったく同じ状態になった。えー、403 Forbiddenじゃなくて400 Bad Requestが返ってくるのはなんでー?

と思ったら答えはやっぱりApache公式にあったよ。

mod_rewrite - Apache HTTP Server Version 2.2

403じゃなくて400が返ってきたのは何故か?何故ならば、書式ルール的には「RewriteRule Pattern Substitution [flags]」って書くべきなのに、真ん中のSubstitution(置換後の文字列) をすっ飛ばして「RewriteRule ^(.*)$ [F]」って書いてたからでした。Patternとflagsしかなかったんだね。

mod_rewrite - Apache HTTP Server Version 2.2にちゃんと

- (dash) A dash indicates that no substitution should be performed (the existing path is passed through untouched). This is used when a flag (see below) needs to be applied without changing the path.

と書いてあるので、「RewriteRule ^(.*)$ - [F]」が正解でした。チーン。(要は「置換とかしないならハイフン使え」と書いてある)

RewriteEngine On
RewriteCond 「こういう条件に当てはまったら」という条件文
RewriteRule ^(.*)$ - [F]

これならちゃんと403が返ってきたよー!わー!

ctrl+r(reverse-i-search)で進みすぎた時、1つ戻るにはctrl+s(i-search)だ!

ctrl+rのreverse-i-searchが好きだ!

何が良いって、うっかり他のサーバとか他のユーザでログインしてると、ctrl+rで期待する候補が出てこなくて「あれ?」ってなるのがいいよね。(例えばDNSサーバにログインしてるつもりで、「cd /var/named/chroot/var/named」を探してchroとか打っても、ウェブサーバだから結果出てこなくて、そこで「あれ?あ、サーバ間違えてた」って気づく)

でも1つだけ不満があった。

reverse-i-searchで次候補に行くにはctrl+rを押せばいい、けど前候補に戻るには?一旦ctrl+cで抜けてやり直すしかないのかな。「あ、行き過ぎた!いっこまえの!」って結構やるから戻れたら嬉しかったんだけど・・・と思ってたらあった!

通常、ctrl+sってうっかり押すと、画面がロック(正確にはターミナルへの出力が停止)されてあばばばばばってなってたんだけど、この「ctrl+sは画面ロックに割り当て」という設定を無効にしてやれば、ctrl+sがi-search(1つ戻る)になる模様。

先ずはsttyコマンドで現在の設定を確認。4行目に「start = ^Q; stop = ^S;」とあるのが、ctrl+sはストップ(画面ロック)でctrl+qがスタート(画面ロック解除)の意。

$ stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

という訳で、ホームディレクトリの.bashrcか、それか全ユーザに適用しちゃいたいなら/etc/bashrcに以下を書けばOK。

# 画面ロックの設定を解除してi-searchに割り当て
stty stop undef
stty start undef

ちなみにsttyはttyの設定を変更するコマンド。setting ttyってことか。んで、undefは「無効にする」ための値。

さらに補足するとTTYはteletypewriterの略で、マシンに直接繋がってるコンソールターミナル。ptsはpseudoterminal slaveの略で、こっちは外からSSHで繋いでる仮想(疑似)ターミナルのこと。あれ?じゃあsttyはttyの設定じゃなくてttyとptsの設定を変更するコマンドなのか・・・?まあ今はいいか!気にしない!

設定後にbash読み込み直して(=ログアウトして、ログインし直して)もう一度、stty -aしてやると、startとstopの値が<undef>になってるのが分かる。

$ stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = <undef>; stop = <undef>; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

これでctrl+sで「1つ前に戻る」が出来るようになったー!私は勿論、/etc/bashrcにいきおいよく書いたよ!ctrl+rとctrl+sでまじはかどる。

でもサーバ1つ1つに設定するの面倒だなー、と思ってたら、これを設定してあるサーバからsshで別のサーバにログインしても何故か設定引き継がれてた!なにこれ!ttyの設定って引き継がれるの?その辺はまだ調べるけど、なにこれ嬉しい誤算・・・。

参考:Ctrl+rでコマンド実行履歴を検索して、通り過ぎてしまったときの対処法 | hello-world.jp.net