web-dev-qa-db-ja.com

ファイルをルートでのみ実行でき、ルートとしては実行できないようにする方法は?

ルート権限を持っていない限り、人々に開かせたくない特定のアプリケーションがありますが、プログラムにルート権限を与えたくありません。だから、rootだけが特定のアプリケーションを実行できるようにするにはどうすればよいですか?アプリケーションが実際にrootとして実行されないようにするにはどうすればよいですか? Ubuntu GNOME 15.04、GNOME Shell、およびGNOME 3.16を実行しています。

7
user364819

パッケージsetuidからsuperを使用してみてください。 Sudo apt-get install superを実行してから、rootとしてのみ実行できるシェルスクリプトを作成します。そのシェルスクリプトに1つのコマンドのみを実行させます。

#!/bin/sh
setuid $ORIG_USER applicationcommand
exit 0

次に、applicationcommandが各.bashrcファイルに追加して作成したシェルスクリプトを指すように、各ユーザーのエイリアスを設定します。

alias applicationcommand="sh /path/to/Shell/script"

または、aliasを作成するだけでなく、実行するアプリケーションの.desktopファイルを編集できます。アプリケーションに.desktopファイルがある場合(それがGUIで実行されますが、CLIでは.desktopファイルを持たない可能性が高いため、Exec=行の後にsh /path/to/Shell/scriptが付いているか、エイリアスの名前がそれを作成することにしました。 .desktopおよび/usr/share/applicationsには~/.local/share/applicationsファイルがあります。

7
user323419

この答えは Heather's one (これでうまくいきます)を補完します。

まず、、Unix(およびLinux)でroot権限を取得できる場合は何でもできることを考慮してください。ヘザーの回答の場合、ユーザーをSudo /usr/bin/applicationcommand(実際のパスなどを少し検索して)だけに止めることはできません。しかし、これは大丈夫だと思います。

その場合、なぜ単純にしないのですか(1)

Sudo chgrp Sudo /usr/bin/applicationcommand
Sudo chmod 750 /usr/bin/applicationcommand

?ユーザーがSudoを使用できる場合、それは意味します(2) それらはSudoグループに属します。上記のコマンドは、applicationcommandグループのメンバーに対してのみSudoを読み取り可能/実行可能にします。ただし、他のコマンドと同様に、実際のユーザーとして実行します。

ただし、「古典的な」Unixソリューションは次のとおりです。

  1. グループを作成し、privilegedと呼びます。
  2. Sudo chgrp privileged /usr/bin/myapp、次にSudo chmod 750 /usr/bin/myapp
  3. ユーザーを追加 (非特権!)グループprivilegedに対してアプリを実行できるようにしたい

これで、ユーザーはmyapp特権を持つ必要なしに、そのユーザーとしてSudoを実行します。

アプリケーションを別のユーザーとして実行したい場合は、 set-uidメカニズムを使用できます 上記の手法と組み合わせてください。


脚注:

(1):アプリケーションにset-gidフラグがある場合、これを実行できないことに注意してください(たとえば、一部のメーラーで発生します)。バイナリのグループを変更する前に確認してください。

(2):ほとんどの構成で。 Sudoは無数の方法で微調整(man sudoersを参照)できるため、この単純なハックの有効性は、カスタマイズの程度によって異なります。

8
Rmano