Gehirn で MongoDB でユーザ認証とか
前回、他のユーザの mongod に接続できちゃったのもあるし、ユーザ認証を入れることにする。以下、作業ログ垂れ流し。
ユーザを追加する(失敗)
接続して、
$ mongo localhost:42998 MongoDB shell version: 2.2.3 connecting to: localhost:42998/test
admin データベースにユーザを追加する
> use admin switched to db admin > db.addUser("USER", "PASSWORD") { "user" : "USER", "readOnly" : false, "pwd" : "13b909a63833a3a8020a73815ce031f7", "_id" : ObjectId("51260c4176c2330fa4c5d994") } Thu Feb 21 21:00:01 Socket recv() errno:104 Connection reset by peer 127.0.0.1:42998 Thu Feb 21 21:00:01 SocketException: remote: 127.0.0.1:42998 error: 9001 socket exception [1] server [127.0.0.1:42998] Thu Feb 21 21:00:01 DBClientCursor::init call() failed Thu Feb 21 21:00:01 query failed : admin.$cmd { getlasterror: 1.0, w: "majority", wtimeout: 30000.0 } to: localhost:42998 could not find getLastError object : { "message" : "error doing query: failed", "fileName" : "src/mongo/shell/collection.js", "lineNumber" : 155, "stack" : "find(\"admin.$cmd\",[object Object],undefined,-1,0,0,0)@:0\n([object Object])@src/mongo/shell/collection.js:155\n([object Object])@src/mongo/shell/db.js:49\n(\"majority\",30000)@src/mongo/shell/db.js:623\n(\"USER\",\"PASSWORD\")@src/mongo/shell/db.js:99\n@(shell):1\n", "name" : "Error" } Thu Feb 21 21:00:01 trying reconnect to localhost:42998 Thu Feb 21 21:00:01 reconnect localhost:42998 failed couldn't connect to server localhost:42998 Thu Feb 21 21:00:01 Error: 9001 socket exception [6] server [localhost:42998] src/mongo/shell/collection.js:155
できない!なぜ!てかエラーで mongod が落ちた!
そこはかとなく昨日の path 問題と同じ香りがする。
実環境で起動しなおし
仮想 root 環境で mongod を上げたせいかもしれないので、実環境で上げなおしてみる。
$ ~/root/usr/bin/mongod -f ~/root/etc/mongodb.conf all output going to: /var/log/mongodb/mongodb.log can't open [/var/log/mongodb/mongodb.log] for log file: errno:2 No such file or directory Thu Feb 21 21:54:45 [initandlisten] MongoDB starting : pid=6519 port=42998 dbpath=/home/****/root/var/lib/mongodb 64-bit host=s11 Thu Feb 21 21:54:45 [initandlisten] db version v2.2.3, pdfile version 4.5 Thu Feb 21 21:54:45 [initandlisten] git version: f570771a5d8a3846eb7586eaffcf4c2f4a96bf08 Thu Feb 21 21:54:45 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49 Thu Feb 21 21:54:45 [initandlisten] options: { config: "/home/****/root/etc/mongodb.conf", dbpath: "/home/****/root/var/lib/mongodb", logappend: "true", logpath: "/var/log/mongodb/mongodb.log", port: 42998 } Thu Feb 21 21:54:46 [initandlisten] journal dir=/home/****/root/var/lib/mongodb/journal Thu Feb 21 21:54:46 [initandlisten] recover begin Thu Feb 21 21:54:46 [initandlisten] info no lsn file in journal/ directory Thu Feb 21 21:54:46 [initandlisten] recover lsn: 0 Thu Feb 21 21:54:46 [initandlisten] recover /home/****/root/var/lib/mongodb/journal/j._0 Thu Feb 21 21:54:46 [initandlisten] recover cleaning up Thu Feb 21 21:54:46 [initandlisten] removeJournalFiles Thu Feb 21 21:54:46 [initandlisten] recover done Thu Feb 21 21:54:46 [initandlisten] preallocateIsFaster=true 2.26 Thu Feb 21 21:54:47 [websvr] admin web console waiting for connections on port 44984 Thu Feb 21 21:54:47 [initandlisten] waiting for connections on port 42998
上がったけどログ出力先が仮想 path のままなので標準出力に出てきてしまってる。
そういえば昨日 dbpath しか変更してなかった。
ログ出力パスを変更
パスを変更して
$ vi ~/root/etc/mongodb.conf #logpath=/var/log/mongodb/mongodb.log logpath=/home/*my_gehirn_username*/root/var/log/mongodb/mongodb.log
もう一度起動する
$ ~/root/usr/bin/mongod -f ~/root/etc/mongodb.conf all output going to: /home/****/root/var/log/mongodb/mongodb.log
&つけ忘れたので、Ctrl+Zしてバックグラウンドにする。
^Z [1] + 31993 suspended ~/root/usr/bin/mongod -f ~/root/etc/mongodb.conf $ bg [1] + 31993 continued ~/root/usr/bin/mongod -f ~/root/etc/mongodb.conf
今度こそユーザを追加する
接続する。
$ mongo localhost:42998 MongoDB shell version: 2.2.3 connecting to: localhost:42998/test >
もう一度ユーザを作成してみる。
> use admin switched to db admin > db.addUser("USER","PASSWORD") { "user" : "USER", "readOnly" : false, "pwd" : "7926766159abc3621e45745bcbd9485f", "_id" : ObjectId("512626fa7e1e58618ddbf680") } > db.system.users.find() { "_id" : ObjectId("512626fa7e1e58618ddbf680"), "user" : "USER", "readOnly" : false, "pwd" : "7926766159abc3621e45745bcbd9485f" } >
できた。
ユーザ認証を有効にする
最後に conf ファイルでユーザ認証設定を有効にして mongod を起動しなおす。
$ vi ~/root/etc/mongodb.conf #noauth = true auth = true
認証テスト
起動しなおしたら接続する。
$ mongo localhost:42998 MongoDB shell version: 2.2.3 connecting to: localhost:42998/test > show dbs Thu Feb 21 23:13:59 uncaught exception: listDatabases failed:{ "errmsg" : "need to login", "ok" : 0 } >
need to login てエラーが出てるので認証は有効になっているぽい。
認証してみる。
> db.auth("USER","PASSWORD") 1 > show collections system.indexes system.users >
できた。