ユーザーではなく、スクリプトのみがファイルにアクセスできるようにできますか?


11

システムへのアクセスが制限されたユーザーがいます(つまり、彼はsudoerではありません)。彼をボブと呼びましょう。

私はシステム管理者である私が信頼するスクリプトまたはバイナリを持っているので、それをrootとして実行しても問題はありません。スクリプトを呼び出しましょうget-todays-passphrase.sh。このスクリプトの仕事は、にある「プライベート」(Bob以外のユーザー/グループ、またはrootでも所有)ファイルからデータを読み取り/srv/daily-passphrases、ファイルから特定の行のみを出力することです。今日の日付に対応する行。

Bobのようなユーザーは、ファイルにリストされていても、明日のパスフレーズを知ることはできません。このため、ファイル/srv/daily-passphrasesはUnixパーミッションで保護されているため、Bobなどの非rootユーザーはファイルに直接アクセスできません。ただし、get-todays-passphrase.shスクリプトの実行はいつでも許可されており、「フィルタリングされた」データが返されます。


要約すると(TL; DRバージョン):

  1. ボブは保護されたファイルを読み取ることができません
  2. スクリプトは保護されたファイルを読み取ることができます
  3. ボブはいつでもファイルを読み取ることができるスクリプトを実行できます

Unixファイルの権限内でこれを行うことは可能ですか?または、Bobがスクリプトを開始した場合、そのスクリプトは常にBobと同じ権限で実行されるように運命づけられますか?

回答:


13

これは実際には一般的で、非常に簡単です。 sudoユーザーが起動できる特定のアプリケーションを制限できます。言い換えれば、それらにすべてのルートを与える必要も、何も与える必要もありません。特定のコマンドを実行するsudo許可与えることができます。これはまさにあなたが望んでいることであり、ユーザーがSSHなどを介してGitリポジトリをプッシュできるようにするなどの非常に一般的な方法です。

これを行うには/etc/sudoers、次のような行を追加するだけです。

bob ALL=(root) NOPASSWD: /path/to/command/you/trust

(このNOPASSWD:部分は必須ではありませんが、この状況では非常に一般的です。)その時点で、sudo bob/path/to/command/you/trust介して呼び出すことができますが、それ以外は何もできません。

とはいえ、誰かにルートを与えること(ここで何をしているのか)は、あなたが望んでいることとは異なる場合があります。特に、スクリプトになんらかの欠陥があると、ボックスがルート化されるリスクがあります。そのため、あなたの代わりに、特殊なファイル・発言権を所有するために特別にユーザーを作成することを好むかもしれspecialuser-then chown彼らにファイルを、と持っている/etc/sudoersmakeはbobその特別なユーザーです。その場合、追加する行は次のようにsudoersなります

bob ALL=(specialuser) NOPASSWD: /path/to/command/you/trust

7
「ルート」の方法を使用しないことをお勧めします-この目的のために特別なユーザー/グループを作成します。
guntbert 2014

いい視点ね; 答えをあげます。
Benjamin Pollack 2014

7

序文:

コメントで指摘されているように、この回答で説明されている理由により、Linuxカーネルはスクリプトを処理するときにsetuid / setguidビットを無視します。私はベンジャミンの答えを複製するつもりはありませんが、代わりに私の答えを正しくするためにスクリプトエグゼキュータで置き換えます。


短い答え:setgidを使用してください

詳細な手順:

  1. 新しいグループを作成します(例:readpass)
  2. そのグループをパスフレーズファイルの所有者にする sudo chown :readpass thatfile
  3. グループのみがファイルを読み取り可能にする sudo chmod g=r,o= thatfile
  4. 実行可能なsgidリードパスを作成します。sudo chmod g+s thatfile

これにより、実行可能ファイルは所有グループの権限で実行され、ファイルを読み取ることができます。


2
Setgidとsetuidはスクリプトで簡単に実行できませんよね?
muru

1
Linuxではスクリプトsetgidを作成できません。setgidビットは無視されます。代わりに、sudoルールを追加して、bob thatfileがグループで実行できるようにしますreadpass
Gilles「SO-邪悪なことをやめなさい」2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.