すべてのアカウント(無許可のユーザーアカウントを含む)で起動時に実行する必要があるバイナリがあるため、これを実行するコマンドが/etc/rc.local
。それを修正してください。位置しています/usr/bin
。
ただし、実行時にキー(キーがある場所)にアクセスする必要があります/usr/share
。すべての一般ユーザーが読み書きすることはできませんが、プログラムは読み取り可能なキーを含むファイルを生成できますか?ファイルはプログラムの権限を利用できますか?
ファイル権限(chmod)に対して一種の設定を実行できますか?それとも何らかの方法で暗号化する方法はありますか?
答え1
言うように、「起動時に権限のないユーザーアカウントで実行する必要がある場合」、関連する権限のないユーザーアカウントがアクセスできるすべてのファイルにアクセスできる必要があります。
スクリプトを実行するための権限のない専用ユーザーアカウントを作成できます。専用のユーザーアカウントのみが読み取れるように、キーファイルの権限を設定します。ただし、既存の特定のユーザーアカウントでプログラムを実行する必要があるように聞こえるので、これはうまくいかないかもしれません。
chroot()
キーへのアクセス権を持つファイルで実行するなどの他の解決策がありますが、これが可能かどうかは、実行する操作とキーファイルに加えてアクセスする必要がある項目によって異なります。
sudo
/etc/rc.local
rootとして実行すると、su
最終的にプログラムを実行するために選択したアカウントを直接使用できるため、これはどのような場合でも必要ありません。
編集する質問を明確にした後:
すべての種類のユーザーがログインするたびに実行する必要があります。
わかりました。これは/etc/rc.local
、最初に一度だけ実行すると言われたのとはまったく異なります!
この場合、最良の選択肢は、外部ファイルでキーにアクセスするのではなく、キーをバイナリに組み込み、ルートがバイナリを所有して実行できるようにすることです。ただし、他のユーザーは読み取ることができません(たとえば、rwx--x--x
.keyにアクセスできない場合を除く)。システムのroot権限を中断しますが、バイナリを実行できます。
秘密鍵をバイナリに含めることができない場合は、秘密鍵にアクセスできる一部のユーザーにバイナリをsetuidできます。しかし、setuidバイナリを書くときは注意してください。