| 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 | |