First Creation | 2007/11/01 |
---|---|
Last Update | 2007/02/05 |
Zaurus で MySQL を稼動させたいと考えた。
MySQL 等の daemon ( メモリに常駐してバックグラウンドで稼動するプログラム ) は、下手に root 権限で動かしていた場合、セキュリティホールをつかれてデーモンを乗っ取られたときの被害が尋常ではない。
仮にその状態に陥った場合、サーバ自体が乗っ取られたような状態に陥ってしまう。
従ってデーモンを動かすときは、最小限の権限を持つユーザーで稼動させなければならない・・・というようなことがいろいろなページに書いてある。
なので、安全のために MySQL 用のユーザーを作って稼動させてみようと思う。
Zaurus に MySQL を入れるだけなら、MySQL の ipk ファイルをダウンロードしてきて、そのままインストールしてしまえばいい。だが、今回はセキュリティを考えて、 MySQL 用のユーザを作って、MySQL ユーザ権限で動かす。その手順は以下の通りである。
MySQL が使うユーザーとグループを追加したいのだが、
# adduser mysql
とやってもエラーになってしまう。仕方がないので、
を直接書き換えて設定することにした。
その後、passwd コマンドでパスワードを設定する必要があるだろう。
なお、上記 3 つのパスはすべてファイルである。passwd のような実行コマンドじゃない。passwd コマンドは、 /usr/bin か /usr/sbin とかにある ( うろ覚え )。 だいぶ慣れたが、Linux のここら辺が紛らわしい・・・
# vi /etc/passwd で passwd ファイルを開いて、以下の一行を追加する。 mysql:x:501:501:MySQL User:/home/mysql:/bin/sh
# vi /etc/shadow で shadow ファイルを開いて以下の一行を追加する。 mysql:*:10933:0:99999:7:::
# vi /etc/group でファイルを開いて以下の一行を追加する。 mysql:x:501
# passwd mysql Enter new UNIX password:パスワード入力 Retype new UNIX password:パスワード入力
これで mysql というユーザーが追加されたことになる。なお、このユーザーは mysql というグループに属している。
mysql_3.22.32-2_arm.ipk (フルパッケージ版)からインストールを行った。
# chown -R mysql:mysql /var/lib/mysql/
# mysqlstart
とやったところ、「Starting MySQL database server: mysqld...failed.」のようなエラーが出てしまった。
何故だ? かなり悩む。google パワーを消費したところ、所有者を daemon にすると書かれてある。
# chown -R daemon:mysql /var/lib/mysql/
エラーはでない。うまく動いたようだ。所有者は daemon:mysql (ユーザー:グループ)。
なんのためにユーザーとグループを追加したのか・・・それに、daemo:mysql だといまいち美しくない。とりあえず、この問題は後で解決しよう。
後日談:
Zaurus ではない Linux PC で MySQL をインストールした。最初はうまく動いたが、再起動したら動かなくなった。/tmp/mysql.sock がないとか起こられてしまう。設定を変更してみたり、空ファイルを作って権限を与えたりしたがうまく動かず、結局アンインストール、再インストールを何度か繰り返してようやく稼動させた。
そのときに学んだのが、mysqld を mysql ユーザーで稼動させるには変なプロセスが必要だということだ。たぶん、インストール時のオプションとかでさっくり稼動させることができるのだろうが、素人にはそんなことは分からない。四苦八苦しながらやったのが次の方法。
ソースをコンパイル&インストール。/usr/local/mysql の権限を mysql:mysql に。最初に mysqld を root で動かすと、/usr/local/mysql の中にログフォルダ?ができるので、いったん mysqld をとめて、そのフォルダの権限を mysql:mysql に。その状態で、mysqld を mysql ユーザーで稼動させれば問題なく動いた。
問題を解決するために丸 2日、インストールとアンインストールを誇張なしに 10回以上繰り返した。インストールに関してならプロだ。いや、セミプロだ。
% mysql -u root -p
パスワードを聞かれるので、そのまま Enter。
mysql>
上記のようなコマンド待ちの状態になる。
とりあえず、「空」のユーザーを消して、root にパスワードを設定した。
mysql> select host,user,password from mysql.user; mysql> delete from mysql.user where user=""; mysql> set password for root@'%'=password(hogehoge); mysql> exit
次から「mysql -u root -p」でログインするとき、パスワードを入れる必要がある。
# vi /home/etc/mysql/my.cnf
# user = daemon user = mysql
上記の設定に変更する。
# chown -R mysql:mysql /var/lib/mysql/
# /home/root/usr/bin/mysqlstart
問題なくうごいた・・・待て、問題ありだ。
# /home/root/usr/bin/mysqladmin shutdown
で MySQL を停止させようとすると、
エラー |
---|
/home/root/usr/bin/mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user: 'root@localhost' (Using password: NO)' |
エラーから推測するに、MySQL のユーザーである root で、サーバーを停止する権限がないような感じがする。Using password: NO とか出ているから、ものは試し、パスワードを入れるようにしてみた。
# /home/root/usr/bin/mysqladmin -p shutdown Enter password: hogehoge
エラー |
---|
/home/root/usr/bin/mysqladmin: error while loading shared libraries: /usr/lib/libmysqlclient.so.6: undefined symbol: __umodsi3 |
そのまま訳せばライブラリの共有ができていないとの内容だが? よけいヤバイエラーになってしまったな・・・そのファイルはちゃんと存在するし、シンボリックリンクも張られているようだ(よくは分からないが)。
ちなみに、現時点のユーザー状況はこうだ。
所属 | ユーザー名 | 詳細 |
---|---|---|
ZAURUS のユーザー | mysql、daemon、root、他 | /etc/passwd 左記ユーザ名はに記載されている |
MySQL のユーザー | root のみ | mysql> select host,user,password from mysql.user; で root が表示される |
だとすると、MySQL ユーザーの root に、サーバー停止の許可を与える必要があるのだろうか・・・? いや、今回の設定をするまではそんなエラーは出てこなかった。だとすると、ZAURUS ユーザーである daemon より mysql の方が権限が低そうだから、それが原因だろうか。google で検索したが、やはりライブラリ共有ができていない等の(今の私にとっては)ろくでもない回答ばかりだ。 とりあえずやれることをやってみよう。
MySQL を再インストールした。OKだった。ふ・・・
こんなところだろうか。