私はPythonでプログラムを作成しており、/ etcのいくつかのファイルを編集する必要があります。一部のシステムには独自のシステムがあります。プログラムは非対話型なので、sudoを実行せずにプログラム自体からこれらの権限をどのように取得できますか?
プログラムをどこで自動起動するかはまだわかりませんが、おそらくこの目的のためにmonitまたは同様のツールを使用します。
答え1
解決策は、プログラム自体をrootとして実行して、/ etcのファイルに対する権限を持つことです。
答え2
もちろん、2つの可能性があります。
- ユーザーがアクセスできるレベルにファイル権限を減らします。
- アプリケーションが所有する権限の追加と変更
1)に関しては、ACLを介して追加の権限を追加してみることができます(UNIX権限の変更を強くお勧めしません。多くのプログラムには期待があり、次の更新などで変更される予定です)。
setfacl -m "u:auto_user:rw" /etc/passwd
(このファイルシステムで拡張ACLを有効にする必要があります)
このアプローチを使用すると、他のプログラムがそのアクセス権を使用するリスクがあります。例: /etc/passwd 変更を許可するために apache ユーザーを追加すると、apache ユーザーのコントロールを取得した人がこのファイルを改ざんできるようになりました。ユーザーアカウントは通常、ルートレベルのアクセスよりも強化されません。
情報 2) このファイルにアクセスする権限を高めました。 sudo 変数と NOPASSWD 変数を使用してこれを実行できますが、正しいアクセス権を設定するには注意が必要です。似たようなもの
auto_user = NOPASSWD: /bin/sed ... /etc/passwd
安全ではありません(sedはシェルを作成できます)!最善の解決策は、a)入力をフィルタリングし、b)必要なものを正確に実行する特別なプログラムを書くことです。
答え3
すべてのプログラム(例えば、対話型でも非対話型でもvi
)sed
は、システムがアクセス可能なファイルと実行できる操作(読み取り、書き込み、および/または実行)です。 (EUIDがファイル所有者と異なる場合は、同じ目的で使用されるグループIDのセットもあります。EUIDとGIDが一致しない場合は、「その他」権限ビットによってアクセスが制御されます。)
プログラムが(EUID 0)として実行されている場合は、すべての可能なroot
ものにアクセスできますが、まだ読み取り専用に設定できます。 (もちろん、root
これらの権限は変更される可能性があるため、読み取り専用は推奨事項のみですroot
。)
一部のユーザーまたはプログラムにのみアクセスを許可する一般的な方法は、ファイル所有者をこの目的のために作成された特別なユーザーに変更することです。たとえば、適切な構成ファイルを編集できるWeb管理者またはデータベース管理者ユーザーを作成することがよくあります。
あなたの場合は、特別なユーザーを作成してアクセスできるファイルの所有者を変更してから/etc
使用できますsu
。
別のアプローチは、編集可能なファイルを別の場所に移動します/etc
。
どの方法を使用しても、ファイルにアクセスできるユーザー/UID/GIDが機能に関係なく信頼できることを確認する必要があります。たとえば、root以外のユーザーはroot権限を簡単に取得できるため、パスワードファイルを編集できないようにしたいと思います。