10月 042020
 

grav-logo

 

最近興味半分で「Grav」というCMSを使い始めた

使い続けるかどうかはわからないけれど、Markdown形式でコンテンツが保存される「Grav」というCMSの利用を始めた。

たぶん読み方は ぐらぶ。
グラブって言ったら”grub”をぱっと思い浮かぶ人もいるかもしれない。ようこそLinuxの世界へ。

WordPressは動作にデータベースが必要なのに対し、Gravはデータベース不要で動くCMS(シーエムエス)、Contents Management System(コンテンツマネージメントシステム)だ。

うまく説明できないけど、WordPressに比べシンプルで速い

WordPressは自由度が高い、プラグインも豊富、WordPressの有名さに比べたら耳カスみたいなものだけど、愛したいCMSの一つ。

今回Gravを利用することにした理由は、コンテンツをMarkdown(マークダウン)形式で管理しながら、BackLogのgitリポジトリで管理したかったから。Markdownなので、修正点がシンプルに確認できるのもいいところだと思っている。ただ、git連携した際に誰の修正かを見分けるためにGrav上での作業者を別々にしたかった。

Grav管理画面からGravへユーザの大量追加ができない

デフォルトではWordPressみたいにポチポチでユーザの追加ができない。
GUIでの操作を可能にするプラグイン「Admin Addon User Manager」があるが、これを利用する場合大量にユーザを追加する場合操作が大変。

ユーザを追加した後の管理は便利なので、ぜひプラグイン管理画面から追加しておきたいものであることには違いはない。

今回は大量のユーザを追加したいのでSSHでサーバに接続しコマンド操作にてユーザの追加を行う。
今回はConohaWINGレンタルサーバ上に用意している環境だったため、SSH接続が行える環境で助かった。これ後からわかってSSHできない環境だったら面倒くさいね。

最近のレンタルサーバは便利ね

ちなみにVPSやEC2などのサーバを多く触るが、サクッとドメイン追加してSSL対応できて、しまいにはWordPressならボタン一つでインストールできてしまい、同時にDBの設定をしてくれるような最近のレンタルサーバは、ちょろっとした用途にはとてもおすすめ。しかも、メールも使えて、ウイルス/スパム対策も同時についてくるわけです。なんだったらバックアップ機能とかcronの操作などもコンパネからできちゃうから、お勧めかもしれない。もう個人でroot権限を持ったサーバなんて持たなくていい時代なのかもしれない。うん。

 

Grav管理画面のURLを変更する

Gravをインストールした後だと、デフォルトで「/admin」が管理画面へのログイン画面となる。
「/admin」は平凡すぎて攻撃の対象になりかねないので、これを変更する。ちなみに、ユーザログイン多要素認証(MFA)も利用できるので、MFAの設定をお勧めする。

下記コマンドで、admin.yamlファイルをコピーし、コピー先のファイルの中の「route: ‘/admin’」を変更する

$ cp -p user/plugins/admin/admin.yaml user/config/plugins/admin.yaml
$ vi user/config/plugins/admin.yaml

もしかしてコマンド以外での変更方法もあるかもしれないんだけど、うん。

参考:Custom Admin URL
https://learn.getgrav.org/16/admin-panel/faq#custom-admin-url

Gravへのユーザの追加

Gravのサイトを参考にすると、「bin/plugin login newuser」で登録ができるとなっているが、「bin/plugin」はPHPファイルのため、たいていの環境では「php bin/plugin login newuser」と実行する必要があると思われる。

実際にユーザを追加してみましょう。

参考:Addmin and Managing Users
https://learn.getgrav.org/16/admin-panel/faq#adding-and-managing-users

php bin/plugin login newuser

$ php bin/plugin login newuser
Creating new user

Enter a username: test
Enter a password:
Password does not pass the minimum requirements
Enter a password:
Repeat the password:
Enter an email: hoge@trippyboy.com
Please choose a set of permissions:
[a] Admin Access
[s] Site Access
[b] Admin and Site Access
> s
Enter a fullname: テスト 太郎
Enter a title: Editor
Please choose the state for the account:
[enabled ] Enabled
[disabled] Disabled
> enabled

Success! User test created.
$

この方法をとると、対話式にユーザの追加を行うことができるが、大量のユーザを登録する場合には、用意されている色々なオプションを利用するとよいと思う。この点は後述する。

なお、上記赤字「Password does not pass the minimum requirements」については、Gravが定めるパスワード条件を満たさないと表示される。
パスワードの条件は「system/config/system.yaml」の「pwd_regex」を変更することでカスタマイズ可能だが、デフォルトでは英字大文字小文字数字を1つ以上含む8桁以上とされている。

$ grep pwd_regex system/config/system.yaml
pwd_regex: '(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}' # At least one number, one uppercase and lowercase letter, and be at least 8+ chars
$

コマンドで追加しただけでは管理画面でのアクセス制御ができない

今回はサイトアクセスを追加しただけなので、管理者画面での操作が可能な権限を追加したい。
前の手順で「Admin and site Access」を選択していないので管理者画面には入れない。

管理画面に入れるように設定したとしても、なにからなにまで操作されてしまうと困っちゃう。
なので、ユーザ設定情報を編集して権限を追加する。

参考:Managing ACL
https://learn.getgrav.org/16/admin-panel/faq#managing-acl

追加されたユーザ情報は「user/accounts/ユーザ名.yaml」に追加される。
冒頭で言及した「Admin Addon User Manager」を使えば管理画面からもポチポチ設定変更が可能であるが、対象が大量にいる場合、ぽちぽちして眠くなっちゃうので上記ユーザ.yamlファイルに下記赤字を追加する。

$ cat user/accounts/test.yaml
state: enabled
email: hoge@trippyboy.com
access:
  site:
    login: true
  admin:
    login: true
    cache: true
    pages: true
    statistics: true
fullname: テスト 太郎
title: Editor
hashed_password: $2y$10$Txu09v5WyNNVBJ4FeigVD.0xx1z4kmTyQsqV2P44KhdCb5n5QwUQu
language: ja
$

viでもいいけどsedとechoで追加もできる。大量に追加する場合は、下記方法が良いかもしれない。

対象のファイルの中で「login: true」となっている下に設定を追加するsedコマンドとファイルの末尾にlanguageを追加している。

$ sed -i "/login: true/a \  admin:\n\    login: true\n\    cache: true\n\    pages: true\n\    statistics: true" user/accounts/test.yaml
$ echo 'language: ja' >> user/accounts/test.yaml

whileでぶん回すなら管理アカウント用のyaml以外のyamlファイルを探してそいつを対象に処理すればよい。

管理ユーザ名が「admin」の場合、admin.yamlを除いたその他のyamlファイルに対してwhileで処理を行う。

$ find user/accounts/ -name "*yaml" -a ! -name "dmin.yaml" | while read user_yaml; do
> sed -i "/login: true/a \  admin:\n\    login: true\n\    cache: true\n\    pages: true\n\    statistics: true" $user_yaml
> echo 'language: ja' >> $user_yaml
> done
$

なお、上記のパーミッションについてはGravのFAQ「Managing ACL」を参照して設定する。
最後に記載している「language: ja」は、管理画面を日本語で利用しますーの設定であるが、参考サイトが無い。
Grav管理画面から言語を設定した際に追加される文字列を確認して、上記の通り参考として記載した。

php bin/plugin login help newuser

さて、ここまでで、コマンドでユーザを登録する方法とコマンドでユーザ権限を変更する方法がわかった。
今度は、対話式以外の方法でユーザを追加するコマンドを確認しておく。

さっきまで使っていたコマンドのヘルプを参照する。

$ php bin/plugin login help newuser
Description:
Creates a new user

Usage:
new-user [options]
add-user
newuser

Options:
-u, --user=USER The username
-p, --password=PASSWORD The password. Note that this option is not recommended because the password will be visible by users listing the processes. You should also make sure the password respects Grav's password policy.
-e, --email=EMAIL The user email
-P, --permissions=PERMISSIONS The user permissions. It can be either `a` for Admin access only, `s` for Site access only and `b` for both Admin and Site access.
-N, --fullname=FULLNAME The user full name.
-t, --title=TITLE The title of the user. Usually used as a subtext. Example: Admin, Collaborator, Developer
-s, --state=STATE The state of the account. Can be either `enabled` or `disabled`. [default: "enabled"]
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Help:
The new-user creates a new user file in user/accounts/ folder
$

上記で確認できる各種オプションを参考にユーザを追加していく。

コマンドの追加方法は、Gravのloginプラグインのページに説明が記載されているのでそちらを参照されたし。
ただし、ユーザパスワードが平文でコマンド履歴に残ってしまうので推奨はされていない。
登録後ユーザにはパスワードの変更を行うように案内するのは必須と思われる。

bin/plugin login newuser -u joeuser -p 8c9sRCeBExAiwk -e joeuser@grav.org -P b -N "Joe User" -t "Site Administrator"

以上。

さーて、ガンガンユーザー追加しましょっと。

 

 Tagged with:

コメント大歓迎!質問も受け付けておりますヽ(*´∀`)ノ

%d人のブロガーが「いいね」をつけました。