1つの端末でユーザーを切り替える方法は?


回答:


561

suコマンドを使用してはどうですか?

$ whoami
user1
$ su - user2
Password:
$ whoami
user2
$ exit
logout

ルートとしてログインする場合、ユーザー名を指定する必要はありません。

$ whoami
user1
$ su -
Password:
$ whoami
root
$ exit
logout

一般に、sudo新しいシェルを必要なユーザーとして起動するために使用できます。-uフラグは、あなたがしたいユーザ名を指定することができます:

$ whoami
user1
$ sudo -u user2 zsh
$ whoami
user2

ssh username @ localhostのようにsudoアクセスがない場合は、より多くの方法がありますが、sudoインストールされていて使用する許可がある場合は、おそらく最も簡単です。


17
また、su - [user]役に立つかもしれません-追加のダッシュはログインシェルを提供します。
一時的な

echo >>/dev/stderrログイン時にこのコマンドを実行した後、「-su:/ dev / stderr:Permission denied」というエラーが表示されsu --login ...ます。私はこれを見つけましたunix.stackexchange.com/questions/38538/…–
Aquarius Power

これにより、各新規ユーザーは、環境変数の異なるオーバーライド値を持つことができますか?ワークなど、オープンソース、例えばのためのGitの設定
ケビンSuttle

ある発見は、私がenvそれをリストしたとき、すべてが整然としていて、目視検査が行くことができるのを見ました; そして、1つ間違っていました: XAUTHORITY=/home/user1/.Xauthority'. Not sure _why_? So X-window doesn't work by default because the protection on 〜/ .Xauthority`ファイルは:-rw-------です。コピーを作成して、geditを実験として実行できるようにしました。
意志

1
「このアカウントは現在利用できません」という
メッセージが表示された

46

通常、使用sudoするユーザーとして新しいシェルを起動するために使用します。-uフラグは、あなたがしたいユーザ名を指定することができます:

[mrozekma@etudes-1 ~] % whoami
mrozekma
[mrozekma@etudes-1 ~] % sudo -u nobody zsh
[nobody@etudes-1 ~] % whoami
nobody

のようssh username@localhostにsudoアクセスを持っていない場合、もっと遠回りの方法がありますが、sudoインストールされていて、使用する許可があればおそらく最も簡単だと思います


システムにsshサーバーもsudoもありません 答えにその部分について言及してもらえますか?
シェパン

[OK]を、プラットは答えたその1
tshepang

4
sudo -sのようなシェルを提供しsusudo -iログインをシミュレートしますsu --u $userもちろん、と組み合わせることができます。
一時的な

はるかに効率的です。通常ログインできないユーザーとして「ログイン」できることは素晴らしい資産です。完全に権限またはSELinuxのいじりせずに、データベース・インスタンスを実行するために私を許可
フェリックス・ガニオン-グルニエ

20
$ whoami 

このコマンドは、現在のユーザーを出力します。ユーザーを変更するには、次のコマンド(ユーザーのパスワードが続く)を使用する必要があります。

$ su secondUser
Password:

正しいパスワードを入力すると、指定したユーザーとしてログインします(再実行して確認できます)whoami


あなたがsudoerではない場合に便利です。
マルコ・スッラ

15

Ubuntuを実行していて、ログインするユーザーにパスワードが設定されていない場合:

sudo su - username

自分のパスワードを入力すると、設定されます。もちろん、これには、ユーザーがでroot権限を取得する権限を持っている必要がありますsudo


8

端末セッションを別のユーザーに切り替えて、そのユーザーが元のユーザーに戻ることができない場合は、execを使用します。

$ |#exec su-[ユーザー名]

これにより、新しい期間プロセスで新しいユーザーに技術的にログインし、現在のユーザーを閉じます。そのようにして、ユーザーが終了またはCtrl-Dを試みると、ターミナルはそのユーザーがインスタンスを作成したユーザーであるかのように閉じます。つまり、ユーザーは元のユーザーの用語に戻ることができません。彼らはまだ新しいターミナルセッションを開始し、元のユーザー用語ログインに自動的に参加できることを考えると、無意味なものですが、そこにはあります。

編集:価値のあるものとして、〜/ .bashrcでlinux vlockコマンドを使用して、デフォルトでターミナルセッションをロックし、セッションユーザーというパスワードをロック解除する必要があります。これは、設定されたユーザーのデフォルト以外の〜/ .bashrcを使用して用語がインスタンス化されていない場合、元のユーザーコンテキストでの前述の用語の再起動をある程度防ぐことができます。



2

さらに別の方法は、別の(非ルート)ユーザーとして新しいシェルを起動して、そのユーザーとしてコマンドを実行することです。

ubuntu@aws-ip:~$ sudo -u mongodb bash          #<-- or zsh, etc... 
mongodb@aws-ip:~$ mongod --configsvr --dbpath /data/configdb --fork

この例はmongodbユーザーです。分割されたMongoDBクラスターをデプロイする場合、必要なすべてのプロセスを実行する必要があり、多数mongodbのノードのinitスクリプトを使用してプロセスをデーモン化する必要はありません(または完全に便利です)。


2

これを正しくしましょう:UserAとしてログインしており、UserBとして「ログイン」してコマンドを実行しますが、完了したらUserAに戻りたいと思います。簡単にするために、ls -l / tmpをUserBとして実行するとします。あなたがない場合ではないユーザーAとしてログインしたままユーザーAの現在のシェルを残すのではなく、まだユーザーBのようにコマンドを実行したい、あなたはこれを行う必要があります。

su - UserB -c "ls -l /tmp"   <-- Just an example

これは、UserBのパスワードを知っていることを前提としています。ただし、UserBのパスワードがわからない場合は、rootパスワードを知る必要があります。次に:

sudo su - UserB -c "ls -l /tmp"   <-- UserB's pw not needed here

一時的にUserBとしてログインして多くのコマンドを実行する場合は、次のようにします。

sudo su - UserB

これにより、UserBの新しいシェルが提供されます(idを入力して確認します)。完了したら、ctrl-dを実行してログインに戻ることができます。



-1
~$ sudo login

次に、sudoパスワード(現在ログインしているユーザーのパスワード)の入力を求められます。

また、現在のユーザーがsudoersファイルに含まれていることを確認してください!


2
問題は、別のユーザーとしてログインすることでした。
ミニックス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.