AI

プルルル~

自分「はい、淘屋です」

相手「当社は AI を使った◯◯というサービスを提供していましてそのご提案です!」

自分「あなたは AI ですか?」

という質問をしてみようかな。。。

そんな時代が来るのでしょうか?

クレジットカード不正利用

先日クレジットカード会社から電話があり、

「○○というサイトで先月25日の朝5時頃お買い物をしましたか?」

と聞かれ「いいえ」と答えました。

すると。。。

「お客様のクレジットカードが不正利用されました。

現在クレジットカードを停止しております。

新しいカードを発行します。」

とかなり省略しましたが、大体こんな感じだったかと思います。 ❗

 

犯人があるECサイトでセキュリティナンバーを入力しようとして失敗したらしく、

その痕跡があり不正利用が発覚したそうです。

実際には被害は無くて良かったです。 🙂

 

こういう体験は初めてで、一番心配だったのが、法人カードだったので、

利用しているサービスが停止されてしまう事でした。

 

新しいカードが届くまでの間はカード決済ができませんが、

毎月決済している大半は新しいカードに引き継ぎできると言われました。

一部引き継げないといわれたのがネット系の会社でした。。。

某サーバーホスティングサービス、某国内最大級のドメイン登録サービス。

 

そして、先程新しいカードが届いたので色々なサイトでカード番号を変更しているところです。

 

どこでカード番号が他人に渡ったのでしょうか?

怪しいお店でカードを利用した覚えはありませんが。。。 :mrgreen:

dmesg にタイムスタンプを表示する方法

dmesg にタイムスタンプが表示されるように printk_time に 1 をセットする方法があります。

root# echo 1 > /sys/module/printk/parameters/printk_time

確認するには以下のようにやれば良いのかな?

root# echo "TEST" >/dev/kmsg
root# dmesg | tail -1
[3182488.266874] TEST

OS 起動時にセットするにはいろんな方法があると思いますが、
grub.conf の kernel に printk.time=1 を追記すれば良いみたいです。

そして、表示されたタイムスタンプを人間が理解できるように変換できるようです。
http://d.hatena.ne.jp/flalin/20110417/1303025836

なるほど。

ですが、おおまかに時刻が分かればよいので syslog の mark.debug のように
定期的にタイムスタンプを書き込んでおけば良いので cron で date を書き込むようにしました。

root# cat /etc/cron.d/mark_dmesg
0 * * * *       root    date > /dev/kmsg

ただし、cron が正常に動くのが前提なので、最初に書いた printk_time もセットしておいた方が良いです。icon_mrgreen.gif

一般ユーザで pear をローカルインストール

個人的に root になれない状況があまり無いのであまりこういった状況は無いのですが。。。

サーバに pear はインストールされているけど root になれない場合に使いたいモジュールをインストールする方法です。

/home/hoge/pear に pear::pager をインストールする場合の例です。

インストール前の状態

$ pear list
Installed packages, channel pear.php.net:
=========================================
Package        Version State
Archive_Tar    1.3.1   stable
Console_Getopt 1.2     stable
PEAR           1.4.9   stable
XML_RPC        1.5.0   stable

pear::pager の install

$ mkdir /home/hoge/pear
$ cd /home/hoge/pear
$ pear config-create /home/hoge .pearrc
Configuration (channel pear.php.net):
=====================================
Auto-discover new Channels     auto_discover    <not set>
Default Channel                default_channel  pear.php.net
HTTP Proxy Server Address      http_proxy       <not set>
PEAR server [DEPRECATED]       master_server    <not set>
Default Channel Mirror         preferred_mirror <not set>
Remote Configuration File      remote_config    <not set>
PEAR executables directory     bin_dir          /home/hoge/pear
PEAR documentation directory   doc_dir          /home/hoge/pear/docs
PHP extension directory        ext_dir          /home/hoge/pear/ext
PEAR directory                 php_dir          /home/hoge/pear/php
PEAR Installer cache directory cache_dir        /home/hoge/pear/cache
PEAR data directory            data_dir         /home/hoge/pear/data
PHP CLI/CGI binary             php_bin          <not set>
PEAR test directory            test_dir         /home/hoge/pear/tests
Cache TimeToLive               cache_ttl        <not set>
Preferred Package State        preferred_state  <not set>
Unix file mask                 umask            <not set>
Debug Log Level                verbose          <not set>
PEAR password (for             password         <not set>
maintainers)
Signature Handling Program     sig_bin          <not set>
Signature Key Directory        sig_keydir       <not set>
Signature Key Id               sig_keyid        <not set>
Package Signature Type         sig_type         <not set>
PEAR username (for             username         <not set>
maintainers)
User Configuration File        Filename         /home/hoge/pear/.pearrc
System Configuration File      Filename         #no#system#config#
Successfully created default configuration file "/home/hoge/pear/.pearrc"

設定の確認

$ pear -c .pearrc config-show

作成した pear 環境のインストール状況を確認。

$ pear -c .pearrc list
(no packages installed from channel pear.php.net)

pear::pager のインストール

$ pear -c .pearrc install pager
downloading Pager-2.4.9.tgz ...
Starting to download Pager-2.4.9.tgz (36,055 bytes)
..........done: 36,055 bytes
install ok: channel://pear.php.net/Pager-2.4.9

インストールできたか確認

$ pear -c .pearrc list
Installed packages, channel pear.php.net:
=========================================
Package Version State
Pager   2.4.9   stable

インストールした pear::pager を使う方法

php の include_path に /home/hoge/pear/php を追加する。
ini_set('include_path', '/home/hoge/pear/php'.PATH_SEPARATOR.ini_get('include_path'));

そして、インストール先を apache が参照できるよう chmod などする。

$ chmod -R g+rx /home/hoge
$ chgrp -R apache /home/hoge

Hyper Estraier で WordPress をクロール

Hyper Estraier で WordPress をクロールしようとしたところ
redirected: 301 されてしまいインデックスされない 🙁

$ estwaver crawl -revcont casket
2014-05-15T03:40:17Z    INFO    DB-EVENT: status: name=casket/_index dnum=0 wnum=0 fsiz=9259055 crnum=0 csiz=0 dknum=0
2014-05-15T03:40:17Z    INFO    crawling started (revcont)
2014-05-15T03:40:17Z    INFO    fetching: 0: https://www.yonageya.com/
2014-05-15T03:40:17Z    INFO    seeding: 1.000: https://www.yonageya.com/
2014-05-15T03:40:17Z    INFO    [1]: fetching: 0: https://www.yonageya.com/
2014-05-15T03:40:18Z    INFO    [2]: fetching: 1: https://www.yonageya.com/blog/
2014-05-15T03:40:18Z    INFO    [2]: redirected: 301: https://www.yonageya.com/blog/
2014-05-15T03:40:18Z    INFO    waiting for threads: 0
2014-05-15T03:40:18Z    INFO    crawling finished
2014-05-15T03:40:18Z    INFO    DB-EVENT: flushing index words: name=casket/_index dnum=1 wnum=1 fsiz=9262217 crnum=670 csiz=45533 dknum=0
2014-05-15T03:40:18Z    INFO    DB-EVENT: flushing auxiliary keywords: name=casket/_index dnum=1 wnum=639 fsiz=9262217 crnum=31 csiz=2182 dknum=0
2014-05-15T03:40:18Z    INFO    DB-EVENT: closing: name=casket/_index dnum=1 wnum=639 fsiz=9274906 crnum=0 csiz=0 dknum=0
2014-05-15T03:40:18Z    INFO    finished successfully

301 部分だけ抜き出すと

[2]: redirected: 301: https://www.yonageya.com/blog/

ネットで調べたところ同じ状況の方がいらっしゃいました。

ヒントにさせていただき、調べてみたところ wp-includes/canonical.php に辿り着きました。

        /**
         * Filter the canonical redirect URL.
         *
         * Returning false to this filter will cancel the redirect.
         *
         * @since 2.3.0
         *
         * @param string $redirect_url  The redirect URL.
         * @param string $requested_url The requested URL.
         */
        $redirect_url = apply_filters( 'redirect_canonical', $redirect_url, $requested_url );

        if ( !$redirect_url || $redirect_url == $requested_url ) // yes, again -- in case the filter aborted the request
                return false;

        if ( $do_redirect ) {
                // protect against chained redirects
                if ( !redirect_canonical($redirect_url, false) ) {
                        wp_redirect($redirect_url, 301);
                        exit();
                } else {
                        // Debug
                        // die("1: $redirect_url<br />2: " . redirect_canonical( $redirect_url, false ) );
                        return false;
                }
        } else {
                return $redirect_url;
        }

$redirect_url と $requested_url を比較して同じだったらリダイレクトしないようですが、
実際に $redirect_url と $requested_url を調べてみたところ、

$redirect_url: https://www.yonageya.com/blog/
$requested_url: https://www.yonageya.com:80/blog/

とウチのブログの場合、$requested_url にポート番号がくっついていました ❗

ポート番号をくっつけているのは、同じ wp-includes/canonical.php の以下です。

        if ( !$requested_url ) {
                // build the URL in the address bar
                $requested_url  = is_ssl() ? 'https://' : 'http://';
                $requested_url .= $_SERVER['HTTP_HOST'];
                $requested_url .= $_SERVER['REQUEST_URI'];
        }

ウチのブログの場合 $_SERVER[‘HTTP_HOST’] にポート番号がくっついていました。

そして、同じ状況の方と同じように $requested_url .= ‘www.yonageya.com’ とすると解決する事も確認しました。

それで、どうやって解決するか対応方法に悩みましたが、functions.php に以下を追加して対応しました。

function my_redirect_canonical($redirect_url, $requested_url) {
        if (preg_match('/^HyperEstraier/', $_SERVER['HTTP_USER_AGENT'])) {
                return false;
        }
}
add_filter('redirect_canonical', 'my_redirect_canonical');

強引ですが :mrgreen:

メールアドレス毎にメールサーバを分ける

とある事情からメールアドレス毎にメールサーバを分ける事になったので、その時のメモ。

MTA が postfix の場合です。

transport にアドレスと送信先をセットするだけです。

ドメイン名を example.com で説明すると。。。

example.com を受信するように設定したメールサーバを 2 台作成します。
mail1.example.com(192.168.0.1), mail2.example.com(192.168.0.2) とします。
MX は mail1.example.com を設定しておき、example.com 宛てのメールは
mail1.example.com で一旦全て受けるようにしておきます。

メールアドレスと送信先メールサーバは以下とします。

  • user1@example.com は mail1.example.com で受信
  • user2@example.com は mail2.example.com で受信

mail1.example.com の transport

user2@example.com smtp:[192.168.0.2]

mail2.example.com の transport

user1@example.com smtp:[192.168.0.1]

アドレスを追加する場合はどっちのサーバで受信するかを指定しないといけないのでメンドイです。 😥

cron.daily の WARNING

cron.daily の実行時に警告が出ているらしく、以下のようなメールが来ました。

/etc/cron.daily/logrotate:
 
WARNING 'action' not defined in 'php-url-fopen'. Using default value
WARNING 'action' not defined in 'lighttpd-auth'. Using default value
WARNING 'action' not defined in 'lighttpd-fastcgi'. Using default value

最初原因がさっぱりわかりませんでしたが、ちょうど最近 fail2ban をインストールしたサーバだったのでもしかしたら?と jail.conf を見てみました。

すると、php-url-fopen, lighttpd-auth, lighttpd-fastcgi のところに action の定義がありませんでした。 :mrgreen:

この3つは利用していないのですが、警告が出ちゃうみたいですね。

それぞれの箇所に以下の action を追加して fail2ban を再起動したところ警告が出なくなりました。 🙂

action  = sendmail[name=Postfix, dest=you@example.com]

vsftpd コマンド制限

ftp の一部のコマンドを使えないようにする設定のメモです。

ディレクトリ削除コマンド rmdir を使えなくしてみます。

まずは、コマンド一覧と rmdir が使える状態である事を確認します。

ftp> help
Commands may be abbreviated.  Commands are:
 
!               cr              mdir            proxy           send
$               delete          mget            sendport        site
account         debug           mkdir           put             size
append          dir             mls             pwd             status
ascii           disconnect      mode            quit            struct
bell            form            modtime         quote           system
binary          get             mput            recv            sunique
bye             glob            newer           reget           tenex
case            hash            nmap            rstatus         trace
ccc             help            nlist           rhelp           type
cd              idle            ntrans          rename          user
cdup            image           open            reset           umask
chmod           lcd             passive         restart         verbose
clear           ls              private         rmdir           ?
close           macdef          prompt          runique
cprotect        mdelete         protect         safe
(rmdir がありますね)
ftp> mkdir testdir1
257 "/testdir1" created
ftp> dir
227 Entering Passive Mode (127,0,0,1,234,141)
150 Here comes the directory listing.
drwxrwsr-x    2 14       50           4096 Sep 06 11:55 testdir1
226 Directory send OK.
ftp> rmdir testdir1
250 Remove directory operation successful.
ftp> dir
227 Entering Passive Mode (127,0,0,1,234,153)
150 Here comes the directory listing.
226 Directory send OK.
ftp>
(rmdir コマンドが実行できます)

次に vsftpd.conf に cmds_allowed を追加します。
version 2.1 からは cmds_denied が使えるみたいです。

cmds_allowed=ABOR,ACCT,ALLO,APPE,CDUP,CWD,DELE,HELP,LIST,MKD,NLLST,NOOP,MODE,PASV,PORT,PWD,QUIT,REIN,REST,RETR,RNFR,RNTO,SITE,SMNT,STAT,STOR,STOU,STRU,SYST,TYPE,LPRT,LPSV,ADAT,AUTH,CCC,CONF,ENC,MIC,PBSZ,FEAT,OPTS,EPRT,EPSV,LANG,MDTM,MLSD,MLST,SIZE

こんなに要らない? 🙂

vsftpd.conf を変更したので vsftpd を再起動します。

root# service vsftpd restart

rmdir が使えなくなった事を確認します。

ftp> mkdir testdir2
257 "/testdir2" created
ftp> dir
227 Entering Passive Mode (127,0,0,1,234,190)
150 Here comes the directory listing.
drwxrwsr-x    2 14       50           4096 Sep 06 12:25 testdir2
226 Directory send OK.
ftp> rmdir testdir2
550 Permission denied.
ftp> dir
227 Entering Passive Mode (127,0,0,1,234,120)
150 Here comes the directory listing.
drwxrwsr-x    2 14       50           4096 Sep 06 12:25 testdir2
226 Directory send OK.
(rmdir コマンドを実行しようとすると Permission denied. になりました)

コマンド一覧からは rmdir が消えないみたいですね :mrgreen:

ftp> help
Commands may be abbreviated.  Commands are:
 
!               cr              mdir            proxy           send
$               delete          mget            sendport        site
account         debug           mkdir           put             size
append          dir             mls             pwd             status
ascii           disconnect      mode            quit            struct
bell            form            modtime         quote           system
binary          get             mput            recv            sunique
bye             glob            newer           reget           tenex
case            hash            nmap            rstatus         trace
ccc             help            nlist           rhelp           type
cd              idle            ntrans          rename          user
cdup            image           open            reset           umask
chmod           lcd             passive         restart         verbose
clear           ls              private         rmdir           ?
close           macdef          prompt          runique
cprotect        mdelete         protect         safe

今回はシステム全体で rmdir を使えなくしちゃいましたが、ユーザ毎に個別に設定する事もできるみたいです。

NFC

週間アスキー9/10増刊号にプログラマブル NFC ディスクの付録が付いていたので購入しました。

週間アスキー 9/10 増刊号

NFC ディスクにスマホで行いたい事(タスク)を仕込んでおくと、スマホをかざすだけでタスクを実行してくれるようになります。

便利ですね 🙂

タスクはNFCタスクランチャーというアプリを使って NFC ディスクに何度でも書き込む事ができます。

帰宅した時に WiFi に接続するようにしたり、車に乗る時にドライブモードにしたり。。。頻繁に行う事を設定しておくのがよさそうです。
上手く使えばすごく便利です 🙂

とりあえず URL を開くタスクを実行してみました。

それで、実際に何に使うかと言えば開発中のスマホサイトへアクセスできるように URL をセットしてみました :mrgreen: