リモート開発メインのソフトウェア開発企業のエンジニアブログです

オプション、設定方法の一貫性の無さ

(今回の話はそんなに有益な情報があるわけでも無いので、時間のある方のみ読んで頂ければと思います。)

ソフトウェアによって、同じような事をするのでも設定方法・考え方が異なる場合があって困るというお話です。

よくある不満

こんなこと、よくやりませんか。

$ 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 には AllowUsersDenyUsers というディレクティブがあります。(それ以外にも 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 として自由に発展してきたのか、一社で開発しているのかの違いなのかなと感じました。

まとめ

ソフトウェアによって、同じような事をするにもやり方が違う場合が良くあります。初めて触る場合には、勘違いして間違った設定をしないよう、ドキュメントなどをしっかり確認することが重要かなと思います。一方、ソフトウェア側としても、間違いやすい設定をしている場合には警告を出すなどの配慮が必要だと思います。

← 前の投稿

Raspberry Pi は自宅ネットワークのゲートウェイにちょうど良い

次の投稿 →

2020年代の自宅サーバー

コメントを残す