現在のユーザーからログアウトせずに(同じ端末で)別のユーザーとしてログインしたいのですが。それ、どうやったら出来るの?
su
コマンドの使用についてはどうですか?
$ whoami
user1
$ su - user2
Password:
$ whoami
user2
$ exit
logout
Rootとしてログインする場合は、ユーザー名を指定する必要はありません。
$ whoami
user1
$ su -
Password:
$ whoami
root
$ exit
logout
通常、Sudo
を使用して、必要なユーザーとして新しいシェルを起動できます。 -u
フラグを使用すると、必要なユーザー名を指定できます。
$ whoami
user1
$ Sudo -u user2 zsh
$ whoami
user2
Ssh username @ localhostのように、Sudoアクセス権がない場合、より回路的な方法がありますが、Sudo
は、インストールされており、使用する権限があれば、おそらく最も簡単です。
一般に、Sudo
を使用して、必要なユーザーとして新しいシェルを起動します。 -u
フラグを使用すると、必要なユーザー名を指定できます。
[mrozekma@etudes-1 ~] % whoami
mrozekma
[mrozekma@etudes-1 ~] % Sudo -u nobody zsh
[nobody@etudes-1 ~] % whoami
nobody
ssh username@localhost
のように、Sudoアクセス権がない場合、より遠回りな方法がありますが、Sudo
は、インストールされており、使用する権限がある場合、おそらく最も簡単だと思います
$ whoami
このコマンドは、現在のユーザーを出力します。ユーザーを変更するには、次のコマンドを使用する必要があります(ユーザーのパスワードが後に続きます)。
$ su secondUser
Password:
正しいパスワードを入力すると、指定したユーザーとしてログインします(whoami
を再実行して確認できます)。
Ubuntuを実行していて、ログインしたいユーザーにパスワードが設定されていない場合:
Sudo su - username
自分のパスワードを入力すると、設定する必要があります。もちろん、これには、ユーザーがSudo
でroot権限を取得する権限を持っている必要があります。
端末セッションを別のユーザーに切り替えるには、そのユーザーは終了して元のユーザーに戻ることができないため、execを使用します。
$ |#exec su-[ユーザー名]
これにより、技術的に新しいユーザーが新しい期間プロセスにログインし、現在のユーザーが閉じられます。そうすることで、ユーザーが終了またはCtrl-Dを試行すると、そのユーザーはそれをインスタンス化したユーザーであるかのように端末が閉じます。つまり、ユーザーは元のユーザーの用語に戻ることはできません。彼らがまだ新しい端末セッションを開始して自動的に元のユーザー用語ログインに入ることができることを考えると、一種の無意味なものですが、それはあります。
編集:価値があるのは、〜/ .bashrcでlinux vlockコマンドを使用して、デフォルトでターミナルセッションをロックし、用語セッションユーザーのパスワードをロック解除するように要求することです。構成されているとおり、ユーザーのデフォルト以外の〜/ .bashrcを使用して用語がインスタンス化されていないことを考えると、これは前述の用語を元のユーザーコンテキストで再起動することを幾分妨げます。
Sudo -iu <your_username>
私がトリックをする
これを正しく実行してみましょう。ユーザーAとしてログインしていて、ユーザーBとして「ログイン」していくつかのコマンドを実行したいが、完了したらユーザーAに戻りたいと考えています。簡単にするために、UserBとしてls -l/tmpを実行するとします。 notを実行してUserAの現在のシェルを離れたいが、UserBとしてコマンドを実行し、それでもUserAとしてログインしたままにする場合は、次のようにします。
su - UserB -c "ls -l /tmp" <-- Just an example
これは、ユーザーBのパスワードがわかっていることを前提としています。ただし、UserBのパスワードがわからない場合は、rootパスワードを知っている必要があります。次に:
Sudo su - UserB -c "ls -l /tmp" <-- UserB's pw not needed here
一時的にUserBとしてログインして多数のコマンドを実行する場合は、次のようにします。
Sudo su - UserB
これにより、UserBの新しいシェルが表示されます(idと入力して確認します)。完了したら、ctrl-dを実行してログインに戻ることができます。
さらに別のルートは、別の(非root)ユーザーとして新しいシェルを起動して、そのユーザーとしてコマンドを実行することです。
ubuntu@aws-ip:~$ Sudo -u mongodb bash #<-- or zsh, etc...
mongodb@aws-ip:~$ mongod --configsvr --dbpath /data/configdb --fork
この例は、mongodb
ユーザーです。シャーディングされたMongoDBクラスターをデプロイする場合、必要なすべてのプロセスをmongodb
として実行する必要があり、数十のノードのinitスクリプトを使用してプロセスをデーモン化する必要はありません(またはまったく便利ではありません)。
単一のコマンドのみを実行する必要がある場合は、Sudoを使用できます:Sudo -u username command