| | 456 | |
| | 457 | == メールサーバーの認証周り設定 == |
| | 458 | |
| | 459 | === ユーザーアカウントの引き継ぎ === |
| | 460 | |
| | 461 | メールのユーザー情報は MySQL に保存してあるので、まずはそいつを移転する。 |
| | 462 | |
| | 463 | * 旧サーバー側: |
| | 464 | {{{ |
| | 465 | $ cd ~/tempsql |
| | 466 | $ mysqldump -u mailusers -p mailusers >mailusers.sql |
| | 467 | }}} |
| | 468 | * 新サーバー側: |
| | 469 | {{{ |
| | 470 | $ cd ~/tempsql |
| | 471 | $ rsync -ae ssh onaka.harapeko.jp:/home/murachi/tempsql/mailusers.sql . |
| | 472 | $ mysql -u root -p |
| | 473 | |
| | 474 | mysql> create database mailusers; |
| | 475 | mysql> grant all privileges on mailusers.* to mailusers@localhost identified by 'パスワード'; |
| | 476 | mysql> quit |
| | 477 | |
| | 478 | $ mysql -u mailusers -p mailusers <mailusers.sql |
| | 479 | }}} |
| | 480 | |
| | 481 | 必要に応じてユーザーアカウントも作ってしまおう。 |
| | 482 | |
| | 483 | {{{ |
| | 484 | $ sudo su - |
| | 485 | # useradd -m -s /sbin/nologin toshiyuki.murayama |
| | 486 | # passwd toshiyuki.murayama |
| | 487 | # useradd -m -s /sbin/nologin sysadmin |
| | 488 | # passwd sysadmin |
| | 489 | (...snip) |
| | 490 | }}} |
| | 491 | |
| | 492 | 転送設定をしてたアカウントはそれも引き継がないとね。 |
| | 493 | |
| | 494 | {{{ |
| | 495 | # su -s /bin/bash toshiyuki.murayama |
| | 496 | $ cd |
| | 497 | $ vim .forward |
| | 498 | |
| | 499 | (旧サーバーからコピペ) |
| | 500 | |
| | 501 | $ exit |
| | 502 | }}} |
| | 503 | |
| | 504 | === パスワードを暗号化 === |
| | 505 | |
| | 506 | 前回、メールアカウントのパスワードは平文で保存するしかないものと思い、平文で保存していたが、暗号化 (正確には salt を付けてハッシュ関数で符号化) して保存しても運用できそうな目処が立ったので、暗号化することにした。 |
| | 507 | |
| | 508 | 1. mailusers DB にアクセス。 |
| | 509 | {{{ |
| | 510 | $ mysql -u mailusers -p mailusers |
| | 511 | }}} |
| | 512 | 1. users テーブルに、符号化されたパスワードのためのフィールドと、 salt のためのフィールドを追加。ハッシュ関数は SHA1、 salt は 5文字とする。 |
| | 513 | {{{ |
| | 514 | mysql> alter table users add (passwd char(40), salt char(5)); |
| | 515 | }}} |
| | 516 | 1. salt を設定する。ランダムな 5文字を設定する方法はいくつか考えられるかも知れないが、とりあえず以下のような感じでやってみた。ちなみに plain_passwd が NULL になっているアカウントは、届いたメールを転送するだけで送受信に使う予定のないアカウントなので、 salt は設定していない。 |
| | 517 | {{{ |
| | 518 | mysql> update users set salt = substring(encrypt(rand()), 3, 5) where plain_passwd is not null; |
| | 519 | }}} |
| | 520 | 1. salt を元に、平文のパスワードを符号化する。 SHA1() 関数も CONCAT() 関数も引数が NULL ならよしなに NULL を返してくれるので、 WHERE 句は不要。 |
| | 521 | {{{ |
| | 522 | mysql> update users set passwd = sha1(concat(salt, plain_passwd)); |
| | 523 | }}} |
| | 524 | 1. 平文のパスワードはもはや不要。捨ててしまえ。 |
| | 525 | {{{ |
| | 526 | mysql> alter table users drop plain_passwd; |
| | 527 | }}} |
| | 528 | |