web-dev-qa-db-ja.com

シェルスクリプトでSetUIDを使用して、root以外のユーザーとして実行するにはどうすればよいですか?

当社のサーバーはUbuntu12.04(Precise)とApache2を実行しています。カスタムの内部Webアプリケーションがインストールされています。そのアプリの更新をソース管理からサーバーにプルするbashスクリプトがあります。システム上の1人のユーザー(スクリプトファイルの所有者)だけがソース管理に接続するために必要なSSHキーを持っていますが、システム上のすべてのユーザーがこのスクリプトを実行してアプリケーションを更新できるようにしたいと思います。

私はいくつかの調査を行いましたが、これがsetuidビットが設計された目的であるように見えます。これにより、システム上のすべてのユーザーがスクリプトを実行でき、スクリプトはスクリプトの所有者のユーザーIDで実行されます。 。ただし、rootが所有するスクリプトが実行された場合にセキュリティ上のリスクが生じるため、最近のディストリビューションはスクリプトのsetuidビットを無視しているようです。

しばらくはPerlスクリプトにすることで回避できると思っていましたが、Preciseの時点では、suid-Perlパッケージもありません。これは非推奨になっているようです。

Sudoersファイルにユーザーを追加してこれを回避することを推奨するサイトをいくつか見つけましたが、スクリプトを実行するためにroot権限は必要なく、Webサイト以外のファイルシステムのどの部分にも変更を加えないので、私はだれにもsudoer特権を与えたくない。スクリプトを正しく実行するには、スクリプト所有者の権限が必要です。

では、(異なる、root以外、Sudo以外の)ユーザーのUIDを使用してスクリプトを実行するための、推奨される最新のアプローチは何ですか?

4
Jazz

Sudoを構成して、特定のrootユーザーなしでコマンドを実行できるようにすることができます。 sudoersで

user1   (ALL) = (appuser) /path/to/yourapp

ユーザーuser1がアプリをappuserとして実行できるようになります

Sudo -u appuser /path/to/yourapp

同様に

%somegroup    (ALL) = (appuser) /path/to/yourapp

sudoersでは、somegroupグループのユーザーがアプリをappuserとして実行できるようになります。

Sudo -u appuser /path/to/yourapp
4
user9517