オプション、設定方法の一貫性の無さ
目次
(今回の話はそんなに有益な情報があるわけでも無いので、時間のある方のみ読んで頂ければと思います。)
ソフトウェアによって、同じような事をするのでも設定方法・考え方が異なる場合があって困るというお話です。
よくある不満
こんなこと、よくやりませんか。
$ java --version
Unrecognized option: --version
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
正しくは、java -version
ですね。
あるいは、こんなことも良くあります。
$ cp -r /path/to/dir1 .
$ chgrp -r staff dir1
chgrp: invalid option -- 'r'
Try 'chgrp --help' for more information.
chgrp
コマンドの場合、再帰的に適用する場合は -r
ではなく -R
です。
オプションを統一してくれ!と思った事は無いでしょうか。
特定の IP・ユーザーからのアクセスのみ許可したい
オプションの違いであれば、怒られたら直せば良いだけなので、そこまで大きな問題ではありません。一方、サーバーの設定などの場合、間違えていてエラーが出ればまだ良いのですが、間違えた設定でもエラーは出ずに意図しない挙動となってしまうケースがあるのが厄介です。
iptables
iptables の場合、特定の IP からのアクセスを許可するには、以下の通りに設定します。
- incoming の policy を DROP にする
- 特定の IP のみを許可する →
iptables -A INPUT -p tcp -s nnn.nnn.nnn.nnn -j ACCEPT
Apache 2.4
Apache 2.4 の場合、以下の通り許可したい IP のみを記載すれば良いです。
Require ip nnn.nnn.nnn.nnn
iptables のような「原則拒否」という記述は不要です。そもそも、「〜を拒否する」というような設定ができません。
細かい解説は省略しますので、興味のある方は以下のドキュメントを参照して下さい。
mod_authz_core – Apache HTTP Server Version 2.4
Apache 2.2
同じ Apache でも、2.2 の場合は以下のように記載します。iptables と同様、「原則拒否、ただし特定のIPだけ許可」といったような書き方です。
Order Deny,Allow
Deny from all
Allow from nnn.nnn.nnn.nnn
OpenSSH (sshd) の場合
OpenSSH には AllowUsers
と DenyUsers
というディレクティブがあります。(それ以外にも AllowGroups
などもありますがここでは触れません。)
正解は以下の通りです。
AllowUsers yamada@nnn.nnn.nnn.nnn
これを iptables などと同様の感覚で
# 意図しない動作となってしまう設定例
DenyUsers *
AllowUsers yamada@nnn.nnn.nnn.nnn
とかやってしまうと、誰も ssh できなくなってしまいます。私はこれにハマりました。
個人的には、以下のページの一番最後のコメントを読んだ上で、
HowTo sshd deny all users except for one?
sshd_config の man で AllowUsers
の項をじっくり読んで理解出来ましたが、結構ハマる人も多そうです。
sshd_config(5): OpenSSH SSH daemon config file – Linux man page
以下のようなケースの場合、iptables のような設定方法が出来ると、直感的に設定できて良さそうなのですが。
sshd – sshd_config AllowUsers – Stack Overflow
nginx
nginx の場合は、以下の通りに設定します。
allow nnn.nnn.nnn.nnn;
deny all;
先頭から順に評価されて、マッチした時点で終わりという仕組みです。なので、以下のようにしてしまうと動作しません。
# 意図しない動作となってしまう設定例
deny all;
allow nnn.nnn.nnn.nnn;
詳しくはドキュメントを参照して下さい。
Module ngx_stream_access_module
雑感
典型的なハマりパターンの場合は警告を出して欲しい
OpenSSH や nginx での「間違った設定例」のような場合には警告を出してくれると良いと思います。最近は、こうしたときに警告を出してくれるソフトウェアが増えてきてはいますが、まだまだ少ないように感じています。
伽藍とバザール?
UNIX 系コマンドのオプションが統一されていないことは最初に書きましたが、PowerShell は統一されているので、その点は良いと思います。
OSS として自由に発展してきたのか、一社で開発しているのかの違いなのかなと感じました。
まとめ
ソフトウェアによって、同じような事をするにもやり方が違う場合が良くあります。初めて触る場合には、勘違いして間違った設定をしないよう、ドキュメントなどをしっかり確認することが重要かなと思います。一方、ソフトウェア側としても、間違いやすい設定をしている場合には警告を出すなどの配慮が必要だと思います。
コメントを残す