nologinシェルを持つユーザーとしてスクリプトを実行します


87

必要なのは、でnologin/false示されているシェルを持つ特定のユーザーとして特定のスクリプトを実行することだけです/etc/passwd

スクリプトをルートとして実行し、これは別のユーザーとして実行する必要があります。ランニング:

~# su -c "/bin/touch /tmp/test" testuser

動作しますが、テストユーザーには有効なシェルが必要です。パスワードを無効にしpasswd -d testuserてシェルを/bin/bashこの方法のままにしておくと少し安全になることはわかっていますが、シェルが必要nologin/falseです。

基本的に私が必要なのはcrontab、特定のユーザーがnologin/falseシェルを持っているかどうかに関係なく、特定のユーザーとしてジョブを実行するように設定した場合の処理です。

psこのスレッドはnologinユーザーとしてコマンドを実行していることがわかりましたが、実行する必要があるスクリプトへconcatenateのコマンドのsu -s /bin/sh $user実行方法がわかりません。

回答:


119

-sスイッチを使用してsuを実行すると、特定のシェルを実行できます

su -s /bin/bash -c '/path/to/your/script' testuser

(パスワードのないユーザーのsudo場合testuserは上記をお勧めします。)


suがroot:root -rwsr-x---どうなるか?
パトリク

1
ユーザーがパスワードを持っていない場合はどうなりますか?
CMCDragonkai

3
@Wesleyパスワードなしのユーザーに対してそのコマンドを実行するには、rootになる必要があることがわかりました。
CMCDragonkai

1
@lain、ユーザーがシェルを持たないことになっている場合、コマンドに関連するプロセスはbashプロセスの子であってはなりません。したがって、execを使用してシェルをスクリプトに置き換える必要もあります。そして、あなたは、スクリプトのinitの子作るのが好きならば、あなただけの一例として、使用&su -s /bin/bash -c 'exec /path/to/your/script &' test
ファクンドビクター

1
を使用して同じ結果を達成する方法を見つけるために最後の20分を費やしてきたのでrunusersu -s SHELLパラメータがrunuserコマンドをほとんど役に立たないことを指摘したいと思います:)ありがとう!
ジルカ

12

sudo -uインストール済みの場合、これを行うことができます。

# whoami
root
# sudo -u apache whoami
apache
# getent passwd apache
apache:x:48:48:Apache:/var/www:/sbin/nologin

どのようにパラメータを渡しますsudo -u apache whoamiか?
CMCDragonkai

@CMCDragonkaiコマンドの後のすべてのパラメーターが渡されます。「sudo [-u apache] [whoami <param1> <param2>]」のように考えることができます。
便利屋

sudo -unologinユーザーとしてコマンドを実行することは、おそらくコマンドを実行SUDO_USERする実際のユーザーを公開するため、使用することはおそらく良い考えではないと思います。たぶん私はそれを考え直しているだけかもしれません。
ニャー

5

/ bin / shに実行する引数としてスクリプトを提供することにより:

su -s "/bin/sh /your/script/location" username

2

ちょうど実現:

su -s "/ bin / bash" -c "/ bin / touch / tmp / testuser" testuser

おそらくもっと良い方法がありますか?!


0

実際には、これを行う最良の方法はrunuserを使用することです

詳細については、manページを参照してください

このツールは、開発者が彼のボーグで言ったように状況に対処するために使用されます

サービスがrootとして実行されており、シェルを使用してUIDを変更する場合は、runuserを使用する必要があります。

http://danwalsh.livejournal.com/55588.html

私はこの答えを多くの宮殿に投稿しました。


リンクの腐敗を防ぐために、リンクのみの回答を投稿しないでください。代わりに、リンクから最も関連性の高い情報を回答に追加するか、回答の代わりにリンクをコメントとして投稿してください。詳細については、serverfault.com / help / how-to-answerヘルプセンターの記事をご覧ください。
フェデリコガリ

@FedericoGalli最も関連性の高い情報が既に追加されています。使用法をコピーして貼り付ける必要はありません。マニュアルページで十分な情報が提供されます
Z-Y00

-1

sudo -uを使用してユーザーを指定します。-iフラグも使用して、ターゲットユーザーの環境変数も設定します。

sudo -i -u user command

1
これにより、This account is currently not available.
ノクテット

-3

suコマンドをシェル-sおよび-cコマンドとともに使用します。以下に示すように

 su  exec -l -c '/bin/bash /etc/update_conf.sh' -s /bin/bash

2
それがまさに最高評価の回答のソリューションです。
ジェラルドシュナイダー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.