ときどきしか使わない NextCloud 環境のログインパスワードの変更のしかた。 なお、ホストしているサーバーにはログインできる必要がある。
パスワードの変更のみ
NextCloud には、サーバー管理用の occ というツールが付属している。これを php で動かすことによってパスワードをリセットすることができる。
この場合、ユーザー名はわかっている必要がある。
cd /var/www/nextcloud
php occ user:resetpassword 管理者ユーザー名
Enter a new password:
ユーザー名が分からない場合
ユーザー名が分からない場合、 DB に直接アクセスしてユーザー名を確認する必要がある。
DB接続情報の確認
NextCloud のインストールディレクトリの config/config.php に、 DB サーバーに関する情報が記載されている。
<?php
$CONFIG = array (
'instanceid' => 'xxxxxxxxxxxxxx',
/* 中略 */
'dbname' => 'nextcloud',
'dbhost' => 'localhost',
'dbtableprefix' => 'oc_',
'dbuser' => 'oc_admin',
'dbpassword' => 'xxxxxxxxxxxxx'
);
DB に接続してユーザー名を確かめる
設定ファイルで知り得た情報をもとに DB の中を調べる。
$ mysql -u oc_admin -p
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| nextcloud |
+--------------------+
MariaDB [(none)]> use nextcloud;
Database changed
SQL を発行し、テーブル内のユーザー名 (uid) を調べる。
MariaDB [nextcloud]> select * from oc_users;
+---------------+---------------+--------------------------------------------------------------+---------------+
| uid | displayname | password | uid_lower |
+---------------+---------------+--------------------------------------------------------------+---------------+
| admin | Admin | $2y$12$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | admin |
| xxxxxx | xxxxxx | $2y$12$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | xxxxxx |
| xxxxxx | xxxxxx | $2y$12$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | xxxxxx |
+---------------+---------------+--------------------------------------------------------------+---------------+
知り得たユーザー名を利用して前述のパスワード変更を行う。
DB を直接編集してパスワードを変更する
何らかの理由で occ が使えないとき、最終手段として DB を直接編集してパスワードを再設定することができる。
パスワードハッシュの作成
以下のコマンドを実行して、新しいパスワードハッシュを作成する。
$ php -r 'echo password_hash("新しいパスワード", PASSWORD_BCRYPT) . PHP_EOL;'
$2y$10$5xIBS7Ua20AbNc3K13hJHOps8jbupNb/F5kDiNcDS5DZlTilDqH7m
DB に接続し、パスワードを更新する
上記「ユーザー名が分からない場合」を実施したのち、以下の SQL を使用してパスワードを更新する。
UPDATE oc_users
SET password = '$2y$10$5xIBS7Ua20AbNc3K13hJHOps8jbupNb/F5kDiNcDS5DZlTilDqH7m'
WHERE uid = '管理者ユーザー名';
ログインし、正規の方法でパスワードを再更新する
先ほど再設定したパスワードはソルトが適用されていない脆弱なパスワードなので、正規の方法で NextCloud にログインし、パスワードを再変更する。