ルート以外のユーザーが実行したプロセスが特定のルート所有ファイルを読み取ることができるようにするにはどうすればよいですか?
私はLinux / Ubuntuでnode.jsを実行しています。ルート権限でプロセスを実行したくありませんが、一部のルート所有ファイルへの読み取り専用アクセス権があります。
を通過しないと、現在これらのファイル(証明書キーファイル)を読み取ることができませんsudo node ...
。これらのファイルに加えて、独自のアプリケーションユーザーIDで実行すると、プロセスは正常に機能し、正常に実行されます。
ファイルにシンボリックリンクを設定し、アプリケーションのユーザーIDがファイルの認証を読み取るように権限を設定するなどの操作を実行できたらと思います。証明書ファイルは別のプロセスによって自動的に維持および更新されるため、手を触れたりコピーしたりすることはできない方が良いです。
...しかし、「rootとして実行されていない」カテゴリの他の解決策も歓迎します。
答え1
新しいグループであるグループを追加し、nodeJS
そのグループにユーザーを追加し、ファイルグループを変更し、最後にファイルを読み取ることができるグループの権限を変更できます。
groupadd nodeJS
usermod userName -g nodeJS
link -s rootOwnedFile linkToRootOwnedFile
chgrp nodeJS linkToRootOwnedFile
chmod g+r linkToRootOwneFile
答え2
これは実際には次のように機能します。アクセス制御リスト。これにより、ファイルが変更されたり、新しいファイルが追加されたり、ファイルの権限が変更された場合でも、Node.jsユーザーを使用してアクセスを続行できます。証明書の親ディレクトリで次の操作を行います。
setfacl -Rm u:nodeJSUser:rX,d:u:nodeJSUser:rX /path/to/certificates
nodeJSUser
実際のユーザーを置き換えます。オプションの最初の部分は-m
現在のACLを設定し、コンマの後のすべての部分は新しいファイルのデフォルト値を設定します。-R
再帰的にしてください。
証明書が実行アクセス権なしでルート所有ディレクトリに保存されている場合(例:)は機能しませんchmod 700
。たとえば、証明書が/root/certs
chmodに保存されている/root
場合、700
他のユーザーはファイル自体に対する権限を持っていても、そのディレクトリ内のどのエントリにもアクセスできません。これを行うには、このディレクトリを別のディレクトリにバインドしてマウントし、そこからアクセスできます。
mkdir /certs
mount --bind /certs /root/certs
setfacl -Rm u:nodeJSUser:rX,d:u:nodeJSUser:rX /certs