web-dev-qa-db-ja.com

スクリプトから現在のユーザーをログアウトする

次のスクリプトを作成したいと思います。

  1. いくつかのコマンドを実行する
  2. sudo suを実行します-[他のユーザー名]
  3. [他のユーザー名]を終了した後->ログアウト

例:test.sh

echo "test script"
Sudo su
logout

このようなスクリプトを実行する場合:

echo "test"
Sudo su
whomai

必要な結果が得られます。

[wolfy@ubuntusrv ~ ]# ./test.sh
test
[root@ubuntusrv wolfy]# date
Fri 19 Jun 10:56:52 CEST 2015
[root@ubuntusrv wolfy]# echo bla
bla
[root@ubuntusrv wolfy]# exit
wolfy
[wolfy@ubuntusrv ~ ]#

ご覧のとおり、スクリプトはechoコマンドを実行し、次にSudo sをrootに実行します。ここで、必要なことを実行でき、rootセッションを終了した後、スクリプトを実行します最後の(whoami)コマンドを実行します。

私の問題は、このスクリプトの最後に自分でログアウトできないことです。

ルート権限なしでこれを行う方法が必要です。

誰かが私を助けることができますか?

追加説明:

  1. sudo su-username(userA)を実行すると、他のユーザー(userA)としてログインするためのパスワード(wolfy)を入力する必要があります。次に、そのユーザー(userA)とのセッション全体で作業し、そのユーザー(userA)からログアウトするときに、(wofly)ユーザーから自動ログアウトしたいと思います。
  2. sudoコマンドの使用はオプションではありません
1
Wolfy

おそらくあなたがやりたいことは:

exec ./test.sh

これにより、現在のシェルプロセスがスクリプトに置き換わるため、終了時に実行するものがなくなります。

5
meuh

logoutはログインシェルに対してのみ機能し、スクリプトは通常ログインシェルとして実行されないため、スクリプト内のlogoutは何にも影響しません。

SSH(または何か)経由でログオンし、別のユーザーとして実行してすぐにログアウトしているように思えます。その場合、コマンドを現在のシェルで実行できるように、スクリプトをソースするだけです。その後、logoutが機能します。

または、execを使用できますが、その場合、有効なのはlogoutではありません-logoutは失敗し、スクリプトの終了により終了します。違いのない区別だと思います。

または、. ./scriptを使用するのが面倒な場合は、中括弧で関数を定義します。

switchuser () {
  echo "test script"
  Sudo su -
  exit
}

中括弧内のコマンドは現在のシェルで実行され、括弧内のコマンドはサブシェルで実行されます。これを.bashrcに追加すれば、簡単にできます:

switchuser
1
muru

通常、ルートとしてコマンドを実行するには、Sudoで十分です。

#!/bin/bash
echo test
Sudo whoami

suの使用を主張する場合は、何らかの理由で-cフラグを使用できます。

#!/bin/bash
echo test
Sudo su -c whoami

そして、両方のケースで同じ結果が得られます:

$ ./test.sh                                                                                                                           
test
[Sudo] password for xieerqi: 
root

ルートシェルに入る場合は、Sudo -iを使用します

serg@ubuntu[/home/xieerqi] 
$ Sudo -i
# date
Fri Jun 19 13:16:15 EEST 2015
# whoami
root
# exit
serg@ubuntu[/home/xieerqi] 
$ 

Suを使用:

serg@ubuntu[/home/xieerqi] 
$ Sudo su -c /bin/bash
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this Shell
root@anaconda:/home/xieerqi# date
Fri Jun 19 12:41:06 EEST 2015
root@anaconda:/home/xieerqi# echo blah
blah
root@anaconda:/home/xieerqi# exit
exit
serg@ubuntu[/home/xieerqi] 
$ whoami
xieerqi

Rootだけでなく別のユーザーとしてコマンドを実行する場合は、Sudo -u username commandを使用できます

$ Sudo -u testuser whoami
testuser

suと同じアイデア:

serg@ubuntu[/home/xieerqi] 
$ Sudo su -c bash testuser
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this Shell
testuser@anaconda:/home/xieerqi$ whoami
testuser
testuser@anaconda:/home/xieerqi$ exit
exit
serg@ubuntu[/home/xieerqi] 
$ whoami
xieerqi
1