Socket で Permission deniedが発生してはまってしまったのでまとめ
今回は、Socket で何かしらの原因で Permission deniedのエラーが発生してはまってしまったので、ちょっとまとめました。
Socket で Permission deniedが発生してはまってしまったこと
dkim-filterを実行して以下のようなエラーが発生しました。
... Unable to bind to port inet:8891@127.0.0.1: Permission denied
... Unable to create listening socket on conn inet:8891@127.0.0.1
|
これは、基本的に権限がないと言っていますから、権限を与えればよいのですが・・・・。
色糸と調べても、原因を特定するまで、はまってしまいました。
結論から言うと、この原因は、
停止し忘れていた SELinux でありました。
わかってしまえば、なんてことないんですが、これがたどり着くまで案外時間がかかってしまったんですよね。
そこで、ついでながら、SELinuxの停止方法を以降にまとめておきます。
SElinuxの停止の仕方
先の原因ともなったSELinuxではありますが、その停止の仕方を以下にまとめておきます。
- まずは、現状のSELinuxの状態を確認しておきます。
インストールされていても無効状態なら、そのままでもOKなので、SELinuxの状態を確認します。
$ getenforce
Disabled
|
上記の状態なら、特に設定の必要はありません。
$ getenforce
Permissive
|
上記の状態の場合も、特に設定の必要はありません。
この状態は、ポリシーに違反していてもアクセスを拒否しませんから、動作的には問題ありません。
上記以外は、SELinuxが動作していますから、SELinuxの機能を停止しましょう。
- SELinuxを停止します。
SELinuxを完全に停止するには、以下のファイルにて SELinuxの設定を無効(disabled) に変更し、システムのリブートを行います。
$ vi /etc/sysconfig/selinux
$ vi /etc/selinux/config
...
SELINUX=disabled
...
|
システムのリブートなしにとりあえず動作的に無効にするには、以下の設定でも変更できます。
$ setenforce 0
$ getenforce
Permissive
|
[setenforceのパラメータ]
1: enforcing:ボリシーの設定に反するアクセスを拒否し、ログを出力する。
0: permissive:ボリシーの設定に反するアクセスであっても許可する。ただし、ログは出力する。
この設定は、あくまでSELinuxの機能を停止しているだけで、動作しています。完全に停止するには、rebootが必要です。
dkim filter の動作確認をやっていて、
少々、情けないほど、初歩的なミスで、深見にはまってしまいました。
余談ではありますが、
上記以外でも Socket関連で Permission denied が出力されることがありますので、一応、最後にチェック項目を記載しておきます。何かの参考になればうれしく思います。
- SELinuxは停止しているか?
- root以外で実行する場合、ポート番号は1024以下になっていないか?
- root以外で実行する場合、プロセス番号を格納するディレクトリや、ソケットファイルを格納するディレクトリの所有者に権限があるか?
- root以外で実行する場合、Socketを扱うプラグラムが使用する関連ファイルへの権限があるか?
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
関連記事 :
コメントを投稿 :