BASHスクリプト、単一コマンドのwww-dataへのsu


26

私が書いたこのブログ投稿で説明されているように、私は Subversionリポジトリと関連するWebサイトの作成の自動化に取り組んでいます。私はwww-dataユーザーにsuして次のコマンドを実行する部分で問題に直面しています。

svnadmin create /svn/repository

スクリプトの先頭には、rootまたはsudoとして実行されていることを確認するチェックがあり、それ以降のすべてのコマンドはrootとして実行する必要があります。その1つのコマンドをwww-dataとして実行してから、rootに戻って終了する良い方法はありますか?

回答:


24

su - www-data -c 'svnadmin create /svn/repository'rootで実行するスクリプトで使用するだけです。そのため、このコマンドのみがwww-dataユーザーによって実行されます。


将来の視聴者向けの更新

"This account is currently not available"エラーが発生した場合は、次の使用を検討してください。

su - www-data -s /bin/bash -c 'svnadmin create /svn/repository'

(ユーザーのログインポリシー-sに対応するためのフラグに関する@Petrの重要な言及www-data


1
ええ、スクリプトの基本的なルールを忘れたようです... RTFM。ありがとう!
ブレンドンデュガン

15
これを試してThis account is currently not available.
みると

私もこのエラーを受け取りますが、以下のfutbolsalas15の答えはうまくいきます。
アンドリュー

18
su - www-data -s /bin/bash -c 'your_command'この機能を使用するために使用します。ユーザーwww-dataにはシェルがある/usr/sbin/nologinため、-sパラメーターがないとエラーメッセージが表示されます。
ペトル

63

「su」ではおそらくパスワードを要求し、www-dataにはパスワードがありません。次のコマンドをお勧めしsudoます。

 sudo -u www-data command

条件は、ユーザーがrootであるか、sudoersファイルで構成されている必要があることです


4
うわー、なぜこれが選択された答えではないのですか?これを見つけるのに時間がかかりすぎた。
キャプテンハイパーテキスト

3

使用su

   su [options] [username]

   The options which apply to the su command are:

   -c, --command COMMAND
       Specify a command that will be invoked by the shell using its -c.

2
suコマンドは、ログインが無効になっているアカウント(www-dataなど)では機能しないことに注意してください。sudoを使用する必要があります。
-Frantumn

2

2可能なアプローチ


1)sudoコマンド:

ほとんどの場合、sudoコマンドにアクセスできるため、解決策は次のとおりです。

sudo -u target_user target_command


2)suコマンド(sudoがインストールされていない場合Ex. alpine-linux images)。

su - target_user -c 'target_command'

場合は、あなたが受け取る「このアカウントは現在使用できません」エラーを、ユーザーが実際にはありませんログイン(シェルアクセス)ポリシーを持っています。その場合、次の使用を検討してください。

su - target_user -s /bin/bash -c 'target_command'

(ユーザーのログインポリシー-sに対応するためのフラグに関する@Petrの貴重なコメントに基づくwww-data

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.