Version 6 (modified by 14 years ago) ( diff ) | ,
---|
さくらの VPS セットアップメモ
申し込み
上記サイトより手順に沿って申し込む。ここで取得するのは以下の 2つ。
- さくらインターネット会員 ID
- 「お申込受付完了のお知らせ」と題されたメール、および登録時の画面にて ID が伝えられる。パスワードは登録時に指定したものをそのまま利用する。
- 会員メニューにて、契約情報の確認および変更を行うのに使用する。ID は絶対に紛失しないよう保管すること。
- VPS の IP アドレス、および root 初期パスワード
- 「仮登録完了のお知らせ」と題されたメールにて、連絡される。このメールは紛失・流出しないよう大切に保管すること。
VPS の起動
VPS は起動していない状態で提供される。そのままの状態で連絡された IP に ssh でつなぎに行ってもうんともすんとも言わない。
VPS の起動方法は以下の通り。
- VPS コントロールパネルにアクセスする。
- 取得した VPS の IP アドレスと root パスワードを入力する。
- VPS ホーム画面にて、「仮想サーバ操作」の「起動」ボタンをクリックする。
ソフトウェアの更新と ViM のインストール
ViM が入っていなかったのでインストールする。ついでにソフトウェアを最新版にアップデートしておく。
- root でログインする。
- ソフトウェアを最新版にアップデートする。
# yum check-update # yum update
- ViM をインストール
# yum install vim-enhanced
ユーザー登録と ssh 接続のためのセキュリティ設定
初期状態では、 ssh 接続にて root でパスワード認証によりログインする、という決して安全とは言えない状態になっている。これを、 root 以外のユーザーのみが公開鍵認証によりログインできるように設定する必要がある。
この設定方法については、よくまとまった記事があったので、こちらを参照のこと。
以下、簡単にメモする。
- root でログインする。
- ユーザーを作成する。
# useradd -m -G wheel murachi # passwd murachi
- sshd の設定を変更する。
# vim /etc/ssh/sshd_config PermitRootLogin no # root での接続を無効 PasswordAuthentication no # パスワード認証を無効 UsePAM no # PAM を無効
- 公開鍵認証用の鍵を作る。これはローカル PC 上で行う。
- 公開鍵のパスワードと実際のユーザーのパスワードは同じにしないこと。これ、同じにしたらあんまり意味がなくなってしまう。
- Windows で Putty の場合は puttygen.exe ってので作れる。公開鍵と秘密鍵をファイルに出力し (秘密鍵は拡張子が .puk になる)、Putty からの接続時に秘密鍵ファイルを「接続/SSH/認証」画面の「認証のためのプライベートキーファイル」欄に指定する。
- それ以外 (Windows で Cygwin 利用、または Mac OS X や Linux など) の場合、 ssh-keygen コマンドを使用する。 -t は rsa か dsa のどちらかにすること (rsa1 は弱いので不可)。
$ ssh-keygen -t dsa $ ls -a .ssh
これにより、 .ssh ディレクトリ下に秘密鍵ファイル (id_rsa または id_dsa) と公開鍵ファイル (id_rsa.pub または id_dsa.pub ファイル) が生成される。
- 公開鍵認証ファイルをサーバー上に書き込む。
# su - murachi $ mkdir .ssh $ chmod 700 .ssh $ vim .ssh/authorized_keys (公開鍵ファイルの内容をコピペする) $ chmod 600 .ssh/authorized_keys
- sshd を再起動。
$ exit # root に戻る # /etc/init.d/sshd restart
- 一旦ログアウトし、作ったユーザーでログインし直す。
# exit logout $ ssh -l murachi xxx.xxx.xxx.xx
- Windows で Putty の場合は、ホスト名を hoge@… とかにして接続する。秘密鍵ファイルの指定を忘れずに!
- sudo を設定する。
$ su - # visudo %wheel ALL=(ALL) ALL # コメントアウトされていたはずなので、コメントを外す # exit $ sudo su - # sudo できるか確認
- root パスワード無効化、 sudo ログの設定は、お好みで。
シェルのロケール設定
bash を UTF-8 による日本語表示に対応させる。
$ vim ~/.bash_profile # 以下の行を追加 export LANG=ja_JP.UTF-8 $ sudo su - # vim .bash_profile # root ユーザーでも日本語表示したい場合はこちらも同様に設定する。 export LANG=ja_JP.UTF-8
お好みで。
BIND の設定
参考:
- なんと BIND がインストールされていないので、インストールする。
$ sudo yum install bind
- chroot のためのディレクトリ構成を /var/named/chroot 以下に構築する。
$ sudo su - # mkdir -p /var/named/chroot/ # cd /var/named/chroot # chown root:named . # chmod 760 . # chmod g+s . # mkdir -p dev etc var/log var/named var/run/named # chmod o-rx * var/* var/run/named # chmod g+w var/log var/run/named
- 設定ファイルをコピーし、修正する。また、ゾーンファイルを作成する。
# cd etc # cp /etc/named.conf . # cp /etc/localtime . # vim named.conf (設定内容は省略)
- ゾーンファイルの作成については、会社サーバーを最初に立てたときのブログ記事を参照。
- named.root ファイルが必要な場合は、このファイルを wget してしまえばいいと思う。
# cd /var/named/chroot/var/named # wget ftp://ftp.rs.internic.net/domain/named.root # chmod 640 named.root
- デバイスファイルを作成する。
# cd /var/named/chroot/dev # mknod null c 1 3 # mknod random c 1 8 # chmod 666 *
- CentOS なので、 chroot が有効になるよう、 /etc/sysconfig/named ファイルを編集する。
# vim /etc/sysconfig/named ROOTDIR="/var/named/chroot"
- BIND を起動。
# /etc/init.d/named start
上手く起動すればめでたしめでたし。でもドメイン取得していないうちは起動しても意味ないので、とりあえず止めておきましょう。今回はサーバー移行で移行前のサーバーをまだ使っていたいので、とりあえず止めておきました。
# /etc/init.d/named stop
パケットフィルタリング設定
iptables は入っていて、動いていたが、肝心要の設定ファイル /etc/sysconfig/iptables が存在しなかった。移転前のサーバーからこのファイルをコピーし、それを適宜修正してから稼働させた。
- /etc/sysconfig/iptables-config の内容を確認。
$ sudo su - # vim /etc/sysconfig/iptables-config # 以下の行が移転前サーバーと異なっていたが、気にせずそのままにした。 IPTABLES_MODULES=""
- ちなみに、移転前サーバーではこの行は以下のようになっていた。
IPTABLES_MODULES="ip_conntrack_netbios_ns"
- これは iptables 用に読み込むモジュールの指定で、指定できるモジュールは CentOS の場合、以下のようにすることで調べることができる。
# ls /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/
- ip_conntrack モジュール (接続情報トラッキング) や ip_conntrack_ftp モジュール (ip_nat_ftp と組み合わせて FTP の PASV モードに対応?) なんかはネットで情報が出てくるが、 ip_conntrack_netbios_ns については、読み込みに失敗したから外しました、といったような情報しか出てこなかった。 Windows マシンからの通信絡みなんだろうとは思うんだが…詳細きぼん… さくらの VPN にもこのモジュールは存在するので指定してもエラーにはならないが、何に使うものかも分からないで指定するのも無意味なので外しておくことにした。
- ちなみに、移転前サーバーではこの行は以下のようになっていた。
- /etc/sysconfig/iptables を移転前サーバーからコピーする。
- まず、移転前サーバーにて。
$ sudo cp /etc/sysconfig/iptables . $ sudo chown murachi:wheel iptables
- 次に、移転先サーバーにて。
$ rsync -ae ssh onaka.harapeko.jp:/home/murachi/iptables . $ sudo su - # chown root:root /home/murachi/iptables # mv /home/murachi/iptables /etc/sysconfig/
- まず、移転前サーバーにて。
- /etc/sysconfig/iptables の内容を適宜修正。
# vim /etc/sysconfig/iptables # Firewall configuration written by system-config-securitylevel # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p 50 -j ACCEPT -A RH-Firewall-1-INPUT -p 51 -j ACCEPT -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT #-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT #-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # DNS -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT # Service applications with TCP: ssh, SMTP, SMTP Submission port, POP3S, HTTP(S) -A RH-Firewall-1-INPUT -m state --state NEW -m multiport -p tcp --dports 22,25,587,995,80,443 -j ACCEPT # NTP # -A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 123 -j ACCEPT # other (reject) -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT
- ポート 631 (=Internet Printing Protocol) なんて使わないのでコメントアウト。
- TCP でしか使わないようなサービス (ssh, SMTP (サブミッションポート含めて), POP3S, HTTP(S)) を multiport モジュールを使って 1行にまとめたらファイルがやたらとコンパクトになって良い感じ。
- NTP も当面は公開しないのでコメントアウト。
- セキュリティリスクにしかならない FTP と POP3 は未来永劫使う予定無いので思い切って削除。
- iptables を再起動する。
# /etc/init.d/iptables restart
NTP 設定
NTP を使って時刻合わせをする。 NTP 自体はすでにインストール済みで、しかも NTPD が動いていたが、設定を修正した。
- /etc/ntp.conf を修正する。
$ sudo vim /etc/ntp.conf # 公開しないので… #restrict default kod nomodify notrap nopeer noquery #restrict -6 default kod nomodify notrap nopeer noquery restrict default ignore # デフォルトでさくらの NTP サーバーが設定されていた。 NICT も追加しておく。 server ntp1.sakura.ad.jp server ntp.nict.jp iburst server ntp.nict.jp iburst server ntp.nict.jp iburst
- NTPD を再起動。
$ sudo /etc/init.d/ntpd restart
Postfix 設定
メールサーバーは Postfix を使用する。詳細な設定は DNS を有効にし、 SSL を組み込んでからさらに行う。ここではとりあえずインストールと
- デフォルトで入っている Sendmail を停止し、二度と起動しないようにする。
$ sudo su - # /etc/init.d/sendmail stop # chkconfig --del sendmail
- Postfix をインストール。
# yum install postfix
- SMTP-AUTH を利用する為、 SASL をインストールする。
# yum install cyrus-sasl
- /etc/postfix/main.cf を書き換える。
# vim /etc/postfix/main.cf # 以下は既存の項目を書き換え。 myhostname = developer.harapeko.jp inet_interfaces = all mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain mynetworks_style = host home_mailbox = Maildir/ # (こっちはコメントアウト。 X Window とか使わないし) #debugger_command = # PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin # xxgdb $daemon_directory/$process_name $process_id & sleep 5 # (こっちのコメントアウトを外す。) debugger_command = PATH=/bin:/usr/bin:/usr/local/bin; export PATH; (echo cont; echo where) | gdb $daemon_directory/$process_name $process_id 2>&1 >$config_directory/$process_name.$process_id.log & sleep 5 # SASL 関連の設定; SSL 証明書を取得するまでコメントアウト #smtpd_sasl_auth_enable = yes #smtpd_sasl_security_options = noanonymous, noplaintext #smtpd_sasl_local_domain = $myhostname #smtpd_tls_cert_file = /etc/httpd/conf/developer_harapeko_jp.crt #smtpd_tls_key_file = /etc/httpd/conf/developer.harapeko.jp.key.pk #smtpd_tls_CApath = /etc/httpd/conf/ #smtpd_use_tls = yes #smtpd_tls_auth_only = yes #smtpd_tls_session_cache_timeout = 3600s #smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination # メールサイズを 10MB に制限 message_size_limit = 10485760
- Maildir/ 形式を利用するので、ホームディレクトリスケルトンに Maildir ディレクトリを作成する。
# mkdir -p /etc/skel/Maildir/{new,cur,tmp} # chmod -R 700 /etc/skel/Maildir/
- /etc/postfix/master.cf を書き換える。
# vim /etc/postfix/master.cf # サブミッションポートを有効にする submission inet n - n - - smtpd # -o smtpd_sasl_auth_enable=yes # あとで
- システムで使用するサーバー機能を Postfix に切り替える。
# alternatives --config mta There are 2 programs which provide 'mta'. Selection Command ----------------------------------------------- *+ 1 /usr/sbin/sendmail.sendmail 2 /usr/sbin/sendmail.postfix Enter to keep the current selection[+], or type selection number: 2
- Postfix を起動し、問題なければサーバー起動時に自動起動するよう設定する。
# /etc/init.d/postfix check # /etc/init.d/postfix start # chkconfig --add postfix
Web サーバー設定
Apache のインストールと設定
Apache をインストールし、設定する。
- apache をインストールする。
$ sudo su - # yum install httpd
- /etc/httpd/conf/httpd.conf を編集。
# vim /etc/httpd/conf/httpd.conf # サーバー名を明示 ServerName www.harapeko.jp:80 # ドキュメントルートを変更。特に意味はないが… #DocumentRoot "/var/www/html" DocumentRoot "/var/www/htdocs" # ここも忘れずに修正… #<Directory "/var/www/html"> <Directory "/var/www/htdocs"> # インデックス表示は行わない # Options Indexes FollowSymLinks Options FollowSymLinks # .httpaccess を許容する # AllowOverride None AllowOverride All # 日本語を最優先する #LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW LanguagePriority ja en ca cs da de el eo es et fr he hr it ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW # デフォルトの文字セットは指定しない #AddDefaultCharset UTF-8 AddDefaultCharset off # バーチャルホストを使用する NameVirtualHost *:80 # 会社トップページ http://www.harapeko.jp/ <VirtualHost *:80> ServerAdmin root@harapeko.jp DocumentRoot /var/www/htdocs ServerName www.harapeko.jp ErrorLog logs/www-error_log CustomLog logs/www-access_log common </VirtualHost> # 会社ブログ http://blog.harapeko.jp/ <VirtualHost *:80> ServerAdmin root@harapeko.jp DocumentRoot /var/www/vhosts/blog/htdocs ServerName blog.harapeko.jp ErrorLog logs/blog-error_log CustomLog logs/blog-access_log common </VirtualHost> # 村山個人ブログ (http://harapeko.asablo.jp/blog/ ) 用仮設リソース置き場 http://daiyokujo.harapeko.jp/ <VirtualHost *:80> ServerAdmin root@harapeko.jp DocumentRoot /var/www/vhosts/daiyokujo/htdocs ServerName daiyokujo.harapeko.jp ErrorLog logs/daiyokujo-error_log CustomLog logs/daiyokujo-access_log common </VirtualHost> # 開発用リソース (Trac 等) http://developer.harapeko.jp/ <VirtualHost *:80> ServerAdmin root@harapeko.jp DocumentRoot /var/www/vhosts/developer/htdocs ServerName developer.harapeko.jp ErrorLog logs/developer-error_log CustomLog logs/developer-access_log common # Trac を mod_python で動かすための設定 <IfModule mod_python.c> <Location /trac/original> SetHandler mod_python PythonDebug On PythonHandler trac.web.modpython_frontend PythonOption TracEnvParentDir /var/Developer/trac/original PythonOption TracUriRoot /trac/original </Location> <Location /trac/original/otoco/login> AuthType Digest AuthName realm AuthUserFile "/var/Developer/trac/original/otoco/.htdigest" Require valid-user </Location> <Location /trac/original/ideanote/login> AuthType Digest AuthName realm AuthUserFile "/var/Developer/trac/original/ideanote/.htdigest" Require valid-user </Location> </IfModule> </VirtualHost> # バーチャルホストに使うディレクトリの設定 <Directory /var/www/vhosts/*/htdocs> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory>
- 移転前サーバーの htdocs 等をコピーする
# exit # 一旦 root を抜ける $ cd /var/www $ sudo mkdir htdocs vhosts $ sudo chown murachi:apache htdocs vhosts $ sudo chmod g+s htdocs vhosts $ rsync -ae ssh onaka.harapeko.jp:/var/www/htdocs . $ rsync -ae ssh onaka.harapeko.jp:/var/www/vhosts .
- とりあえず起動してみる
$ sudo /etc/init.d/httpd configtest $ sudo /etc/init.d/httpd start
- クライアント PC が Windows の場合: %windir%\system32\drivers\etc\hosts に www.harapeko.jp のアドレスを追加してから http://www.harapeko.jp/index.php にアクセスすると、 PHP スクリプトのソースが表示されるのが確認できた。
- デフォルトで起動するように設定する。
$ sudo /sbin/chkconfig --add httpd
Web アプリに使用する各種言語のセットアップ
必要なのは以下の通り。
- PHP + mod_php ... 会社サイト (自作) と会社ブログ (WordPress) にて使用。
- Python + mod_python ... タスク管理 (Trac) にて使用。
- Perl + mod_perl ...
個人的な趣味将来的に使用する予定…。
まずは PHP をインストールする。
- PHP をインストールする。
$ sudo su - # yum install php # cli とか common とかも一緒に入る # yum install php-mysql # MySQL とか pdo 、あと何故か perl-DBI も一緒に入る # yum install php-mbstring # マルチバイト (日本語) 処理に必要っぽい
- 移転前サーバーではこれ以外に php-pgsql (PostgleSQL 関数) と php-ldap (LDAP 関数) が入っていたが、多分どっちも使わないと思うので入れなかった。
- PHP の設定。
# vim /etc/php.ini # (とはいえ、変更すべき箇所は特になし。 magic_quotes_* シリーズが Off になっているのを確認するぐらい?)
- mod_php の設定。
# vim /etc/httpd/conf.d/php.conf # (こちらも変更すべき箇所は特になし。)
- Apache を再起動。
# /etc/init.d/httpd restart
- トップページが (PHP スクリプトのソースではなく) ちゃんと表示されることを確認。 移転先サーバーによるものであることが判りやすいよう、サイトの内容を若干変更した (住所が引っ越し前のままだったのを修正する等)。
次に Python をインストール。
- Python 自体はすでに入っているので、 mod_python と MySQL-python モジュールをインストール。
# yum install mod_python MySQL-python
- mod_python の設定。
# vim /etc/httpd/conf.d/python.conf # (変更すべき箇所は特になし。)
- Apache を再起動。
# /etc/init.d/httpd restart
- テストプログラムを動かしてみる。面倒くさいので .htaccess を使う方法で。
- /var/www/htdocs の下にディレクトリ py-test を作り、その下に .htaccess と Python スクリプトを作成する。
# exit $ cd /var/www/htdocs $ mkdir py-test $ vim py-test/.htaccess AddHandler mod_python .py PythonHandler mptest # スクリプトファイルを mptest.py にする場合 PythonDebug On $ vim py-test/mptest.py from mod_python import apache def handler(req): req.write("Hello, World!") return apache.OK
- ブラウザから http://www.harapeko.jp/py-test/mptest.py にアクセスし、画面に "Hello, World!" とだけ表示されるのを確認。
- テストプログラムはもはや不要なので、消しておく。
$ rm -rf py-test
- /var/www/htdocs の下にディレクトリ py-test を作り、その下に .htaccess と Python スクリプトを作成する。
最後に Perl をインストール。
- Perl はフツーに 5.8 が入っていた。 5.10 にアップグレードしたい気もするがとりあえずあとにして、 mod_perl と DBD-MySQL をインストールする。
$ sudo yum install mod_perl perl-DBD-MySQL
- mod_perl の設定。
$ sudo vim /etc/httpd/conf.d/perl.conf # テスト用にレジストリ形式で CGI エミュレーションするディレクトリを設定。通常は不要。お好みで。 Alias /perl /var/www/perl <Directory /var/www/perl> SetHandler perl-script PerlResponseHandler ModPerl::Registry PerlOptions +ParseHeaders Options +ExecCGI </Directory> # ああ、こんなのあったなぁ… <VirtualHost *:80> ServerName test.harapeko.jp DocumentRoot /var/www/vhosts/test/htdocs ErrorLog logs/test-error_log CustomLog logs/test-access_log common PerlModule APR::Table PerlModule MpTest::AhoAho <Location /aho> SetHandler modperl PerlResponseHandler MpTest::AhoAho </Location> </VirtualHost>
- せっかく思い出しちゃったので、 mod_perl 版あほプログラムを移転前サーバーからコピー。
- 移転前サーバーにて:
$ cd $ sudo cp /etc/httpd/MpTest/AhoAho.pm . $ sudo chown murachi:apache AhoAho.pm $ chmod 640 AhoAho.pm
- 移転先サーバーにて:
$ cd $ rsync -ae ssh onaka.harapeko.jp:/home/murachi/AhoAho.pm . $ sudo mkdir /etc/httpd/MpTest $ sudo chown murachi:apache /etc/httpd/MpTest $ chmod 750 /etc/httpd/MpTest $ sudo chmod g+s /etc/httpd/MpTest $ cp AhoAho.pm /etc/httpd/MpTest/
- 移転前サーバーにて:
- Apache を再起動。
$ sudo /etc/init.d/httpd restart
- hosts に test.harapeko.jp を追加してから、 http://test.harapeko.jp/aho にアクセスすると、ちゃんとあほプログラムが動作した。
MySQL を設定
MySQL のインストール、および設定、起動を行う。
- MySQL サーバーをインストールする (クライアントは PHP をインストールした際にインストールされている)。
$ sudo yum install mysql-server
- MySQL の設定。
$ sudo vim /etc/my.cnf [mysqld] # mysqld ディレクティブ内に以下の行を追加 default-character-set=utf8 character-set-server=utf8 collation-server=utf8_general_ci init-connect=SET NAMES utf8 # client, mysqldump 各ディレクティブはそもそも存在しなかった。以下全て追加。 [client] default-character-set=utf8 [mysqldump] default-character-set=utf8
- やりたいことはだいたい解ると思うが、何をやるにしてもデフォルトの文字セットは UTF-8 にしたいですよ、ということ。
- MySQL サーバーを起動する。
$ sudo /etc/init.d/mysqld start
- MySQL の root ユーザーのパスワードを設定。もちろんパスワードはひみちゅ。
$ mysqladmin -u root -p password '新しいパスワード' $ mysql -u root -p mysql # 新しいパスワードで接続できるか確認してみる
- とりあえずブログが動くかどうか試してみたいので、ブログ用のテーブルだけ移行してみることにする。
- 移転前サーバーにて:
$ cd $ mkdir tempsql $ cd tempsql $ mysqldump -u harapeko_press -p harapeko_press > harapeko_press.sql
- 移転先サーバーにて:
$ cd $ mkdir tempsql $ rsync -ae ssh onaka.harapeko.jp:/home/murachi/tempsql/harapeko_press.sql tempsql/ $ mysql -u root -p mysql> create database harapeko_press; mysql> grant all privileges on harapeko_press.* to harapeko_press@localhost identified by '移転前と同じパスワード'; mysql> quit $ mysql -u harapeko_press -p harapeko_press <tempsql/harapeko_press.sql
- hosts に blog.harapeko.jp を追加して http://blog.harapeko.jp/ にアクセスしたところ、全く遜色なくブログが表示された。
- 移転前サーバーにて:
- mod_ssl をインストールする。
$ yum install mod_ssl
- /usr/lib/sasl2/smtpd.conf を作成する。
$ vim /usr/lib/sasl2/smtpd.conf pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: cram-md5 digest-md5