2017-04-11 16 views
-1

linux/var/logディレクトリにログファイルを作成しようとしていますが、アクセス権が拒否されています。ディレクトリの所有権を変更することなく、すべてのベストプラクティス?Golang os.Create permission denied

f, _ := os.Create("/var/log/go_server.log") 
defer f.Close() 
log.SetOutput(f) 
+0

十分な権限を持つユーザーアカウントからプログラムを実行します。 – zerkms

+0

マシンはAWSクラウドで、BeanStalkを介して展開された環境とコードでスピンアップされます。そのため、マシンまたはプログラムのユーザのエンドユーザ制御はありません。良い方法があると思った。 – Bruce

答えて

0

標準のUNIXのアクセス許可の問題があります。そのディレクトリの特別な性質を考えると、次の3つのオプションがあります。

  1. そのディレクトリのアクセス権をより無差別に変更します。悪意のあるアイデアは、セキュリティ上の問題を引き起こします。
  2. sysV、upstart、またはsystemdを使用してgoプログラムを実行すると、プログラムはその中に権限を持つユーザー(通常root)で実行されます。 1つのプロセスだけがアップグレードを取得し、起動/停止/モニタルーチンと初心者またはシステムで初歩的な自己修復を得るため、より効果的です。確かに、あなたがまだいない場合は、それらの1つを使って探索したいかもしれません。
  3. go's built-in interface to syslogを使用し、ログをそのファイルに保存するようにローカルsyslogdを設定します。あなたがログをソケットに送るだけで、サービスがあなたのためにそれを処理するので、ベスト。

また、systemdはstdout/errを正しく設定して、次にjournalctlで参照できる場合、ファイルにstdout/errを保存できることにも注意してください。確かに、あなたのプログラムをstdout/errに愚かに印刷して、それをフォークしないようにすることは、systemdがあなたのためにすべてのものを(今のところ、あなたのプログラムが何をしているのかに焦点を当てることができ、デーモンとロギング)。

すべての悲しみのために、このユースケースではかなり良いです。

+0

マシンはAWSクラウドで、BeanStalkを介して展開された環境とコードでスピンアップされます。そのため、マシンまたはプログラムのユーザのエンドユーザ制御はありません。良い方法があると思った。 – Bruce

関連する問題