プログラムに権限を付与する正しい方法

プログラムに権限を付与する正しい方法

職場には、より高いレベルの権限でタスク(IPパスの追加、Wi-Fi設定ファイルの設定、シリアルデバイスからの読み取り)を実行する必要がありますが、その「システムの他のタスクも開始できる「システム」(Python)エージェントがあります。プログラム、ファイルの読み取り/書き込み/ローカルデータベース。これまで、私は2つのオプションを知っています。

  1. 「デフォルト」ユーザーにより高いレベルの権限を追加し、一般ユーザーとして開始します。 「デフォルト」ユーザーは、エンジニアがログインしているユーザーです。
  2. 別の「テスト」ユーザーを作成し、これらの権限を持つ新しいグループを作成し、そのグループを「テスト」ユーザーに追加して、必要な権限を追加します。

私が知っている限り、オプション1はタスクを実行するための非常に「安全な」方法ではありません。
オプション2は、一般的なファイル権限と新しい端末の起動に困難があります(X11ディスプレイの問題)。これらのプログラムを実行すると、「テスト」ユーザーが使用され、デフォルトのユーザーはこれらのプログラムによって生成されたすべてのファイルにアクセスできません。さらに、「システム」はこのユーザーを自動的に設定できる必要があり、エージェントはUIを介して起動/停止できる必要があるため、「デフォルト」ユーザーとして起動する必要があり、パスワードが必要です。 「システム」ファイルに保存されます)

オプション2はそれほど価値がありますか、またはオプション1を選択する必要がありますか?また、この「システム」は職場の多くのコンピュータで使用されるので、これは私のパーソナルコンピュータだけではないことを指摘したいと思います。

答え1

オペレーティングシステム関連の操作(ルーティング構成など)に対する権限を委任するには、ファイル権限を広範囲に変更する必要があります。 OTOH権限を持たないユーザーがデータファイルにアクセスできるように権限を設定することは、毎日行うことです。

プログラム許可

プログラムが実行される権限は、プログラムを呼び出すユーザーから継承されます。いくつかの例外がありますが、Linux / Unix(特にsetuid、MAC、および機能)についてもっと知るまでは、これらの例外を避ける必要があります。

ルーティングの変更を許可する権限を変更しようとすると、システムのセキュリティが損なわれる可能性があり、次回のアップグレードを適用すると変更が元に戻される可能性があります。

これら2つの異なるものには2つの異なるソリューションが必要です。

まず、ルーティングとWi-Fiの設定:これを行うには、sudoをrootとして設定します。可能であれば、動作を非対話型シェルスクリプトにパッケージ化してください。これはsudoバックドアを防ぐのに役立ちます。

「基本」ユーザーに

あなたのシステムでは、「デフォルトユーザー」が何を意味するのかわかりません。

データアクセス(つまり、Linuxディストリビューションによって維持されていないファイル)の場合は、さまざまな種類のアクセス権を持つ必要があるユーザーカテゴリを説明するモデルを定義し、標準グループを使用してそのアクセスを許可する必要があります。人間に似ていない対話型ユーザーアカウントを追加するのは間違ったパターンです。実際の既存ユーザーのグループを追加/削除します。

ヒント:chmod g+s $DIRNAME$ DIRNAMEで作成された新しいファイル/ディレクトリのグループ所有権は維持されます。

答え2

@symcbeanを試しましたが、chmod g+s $DIRNAMEファイルグループのみを設定してユーザーを設定するオプションが見つかりませんでした。また、グループがログインしているユーザーと同じであっても、iircファイルはまだROモードで開きます。

Pythonプログラムを実行するために内部ENVを使用することについての私のsudo最初の説明は間違っているようです。これは、Python ENVバイナリへのフルパスを提供することでこれを正常に実行したためです。 @telcoMが提供したリンクを読み、プログラム内で実行しましたsetegidseteuidこれにより、プログラムは呼び出し元の権限でファイルを生成し、必要ですroot

私が持っていた最後の問題は、プログラムが別のターミナルから別のプログラムを起動しましたが、ルート所有のGNOMEターミナル(別のプロファイルとツールバーがある)のように見える場所で実行されたか、XAUTH問題の開始のためにまったく実行されなかったことです。戻る。これは--preserve-envパラメータを使用して解決されますsudo

だから私の現在の解決策は次のとおりです。

  1. ランチャーを使うsudo --preserve-env <python_env_binary> <python_program>
  2. (Pythonプログラム内部)実行中かsudo、envが保存されているかを確認(geteuid0か、$ HOME環境変数ではないか確認/root
  3. $ SUDO_UIDと$ SUDO_GIDから発信者IDを取得する
  4. 発信者IDを使用した設定setegidseteuidGIDが優先されます!)

この解決策が正しいかどうか教えてください。

関連情報