権限なしで実行したいスクリプトを作成しています。スクリプトで発生したエラーをいくつかのログファイルに記録したいと思います。に手紙を書く権限がありません/var/log
。私のホームディレクトリに手紙を書きたくありません。
ランタイム情報がどこにあるかを記録できるユーザースペーススクリプトはありますか?潜在的なセキュリティ問題を引き起こすことなくスクリプトに関する情報を記録する最良の方法は何ですか/var/log
?スクリプトにuid / gidを設定することは躊躇されます。
答え1
一般ユーザーとしてプログラムを実行することを決定した場合、そのログの自然な場所はホームディレクトリです。ホームディレクトリは、実行しているプログラムのログであれ他のファイルであっても、すべてのファイルを保存するために使用されます。
プログラムがシステムの一部として実行され、一般的な専用システムユーザーとして実行される場合、そのログのデフォルトの場所はです/var/log
。サブディレクトリを作成し、/var/log/myapp
アプリケーションがここに書き込むための適切な権限を付与します。
関連があり、オペレーティングシステムで許可されている場合は、ログファイルを追加専用としてマークします。ルートのみがこれを実行できます。この方法の利点は、アプリケーションが破損している場合、過去のログを削除できないことです。これは、破損のフォレンジック分析に非常に役立ちます。ログを回転させるには、ルートの介入が必要です。chown
これにより、アプリケーションはログファイルを開くことができなくなり、ファイルを記録し、rename
適切な所有権を持つ新しい追加の専用ファイルを作成してから、アプリケーションに新しい空のファイルを開くように指示できません。
答え2
一般ユーザーは/var/logに書き込めませんが、要求するとsyslogデーモンは代わりにこれを行います。たとえば、標準のシステムログにメッセージを記録するには、システムで/var/log/syslog
4.4BSDユーティリティを使用できます。logger
これはデフォルトでDebianにインストールされ、bsdutils
Debian派生パッケージに含まれています。
既存のログの回転、保守、および監視ツールの利点を得ることができますが、権限が必要であるという欠点があります。読むシステムログとスクリプトからのメッセージと他のプログラムからのメッセージの混合。
$ logger Hello
$ echo Goodbye | logger
$ sudo tail -2 /var/log/syslog
Feb 19 21:16:15 debian-host jander: Hello
Feb 19 21:16:21 debian-host logger: Goodbye
選択できるさまざまな設定オプションがあります。詳細は で確認できますman logger
。
答え3
root
通常、デーモンを使用すると、権限のないユーザーがログファイルに書き込むことができるように、ログファイルが作成された後に権限が変更されます。logrotate
次に、循環中に権限を維持するように設定します。
デーモン以外のコマンドの場合は、ログイン/tmp
(使用を推奨)し、ログの場所を介してmktemp
ユーザーに通知します。STDOUT
答え4
アプリケーション(myapp)がroot権限で実行されている場合は、ログを/var/log/myappに保存してください。
それ以外の場合は、$HOME/.local/myapp にログファイルを保存します。