Bagaimana cara beralih antar pengguna di satu terminal?

480

Saya ingin masuk sebagai pengguna yang berbeda tanpa keluar dari yang sekarang (di terminal yang sama). Bagaimana aku melakukan itu?

tepang
sumber
1
Saya mengajukan pertanyaan serupa, karena saya mengalami masalah dengan variabel lingkungan XDG ( $XDG_RUNTIME_DIRkhususnya) yang membuat saya gila. -> unix.stackexchange.com/questions/354826/…
Jonathan Komar

Jawaban:

562

Bagaimana dengan menggunakan superintah?

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

Jika Anda ingin masuk sebagai root, tidak perlu menentukan nama pengguna:

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

Secara umum, Anda dapat menggunakan sudountuk meluncurkan shell baru sebagai pengguna yang Anda inginkan; yang -ubendera memungkinkan Anda menentukan nama pengguna yang Anda inginkan:

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

Ada lebih banyak cara berputar jika Anda tidak memiliki akses sudo, seperti ssh username @ localhost, tetapi sudomungkin paling sederhana, asalkan itu diinstal dan Anda memiliki izin untuk menggunakannya.

Pratt
sumber
17
Juga, su - [user]semoga bermanfaat - dasbor tambahan memberi Anda shell login.
ephemient
Saya mendapatkan kesalahan ini "-su: / dev / stderr: Izin ditolak" setelah menjalankan perintah ini echo >>/dev/stderrpada login dengan su --login ..., tip? Saya menemukan ini btw unix.stackexchange.com/questions/38538/…
Aquarius Power
Apakah ini memungkinkan setiap pengguna baru untuk memiliki nilai-nilai utama yang berbeda untuk variabel lingkungan? mis. git config untuk pekerjaan, open source, dll.
Kevin Suttle
Satu temuan, ketika saya mendaftar envitu melihat bahwa semuanya dalam urutan serta inspeksi visual bisa berjalan; Dan satu hal yang tidak benar: XAUTHORITY=/home/user1/.Xauthority'. Not sure _why_? So X-window doesn't work by default because the protection on berkas ~ / .Xauthority` adalah: -rw-------. Saya membuat salinan dan itu memungkinkan saya menjalankan gedit sebagai percobaan.
akan
1
jika Anda mendapatkan "Akun ini saat ini tidak tersedia": su -s / bin / bash - www-data
max4ever
46

Umumnya Anda gunakan sudountuk meluncurkan shell baru sebagai pengguna yang Anda inginkan; yang -ubendera memungkinkan Anda menentukan nama pengguna yang Anda inginkan:

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

Ada lebih banyak cara berputar jika Anda tidak memiliki akses sudo, seperti ssh username@localhost, tapi saya pikir sudomungkin paling sederhana jika diinstal dan Anda memiliki izin untuk menggunakannya

Michael Mrozek
sumber
Bagaimana jika sistem saya tidak memiliki ssh server atau sudo? Bisakah Anda menyebutkan bagian itu pada jawabannya?
tshepang
ok, Pratt menjawab itu
tshepang
4
sudo -smemberi Anda shell like su, sudo -imensimulasikan login like su -. Dapat dikombinasikan dengan -u $user, tentu saja.
ephemient
jauh lebih efisien. bisa "masuk" sebagai pengguna yang biasanya tidak bisa masuk adalah aset yang bagus ..! benar-benar memungkinkan saya untuk menjalankan instance basis data tanpa mengacaukan izin atau selinux
Félix Gagnon-Grenier
20
$ whoami 

Perintah ini mencetak pengguna saat ini. Untuk mengubah pengguna, kita harus menggunakan perintah ini (diikuti oleh kata sandi pengguna):

$ su secondUser
Password:

Setelah memasukkan kata sandi yang benar, Anda akan masuk sebagai pengguna yang ditentukan (yang dapat Anda periksa dengan menjalankan kembali whoami.

Ashish Saini
sumber
Berguna jika Anda tidak sudoer.
Marco Sulla
15

Jika Anda menjalankan Ubuntu, dan jika pengguna yang ingin Anda masuki tidak memiliki kata sandi:

sudo su - username

Masukkan kata sandi Anda sendiri dan Anda harus mengaturnya. Tentu saja, ini mengharuskan pengguna Anda memiliki hak untuk mendapatkan hak akses root sudo.

Sundae
sumber
8

Untuk mengalihkan sesi terminal ke pengguna lain, di mana pengguna itu tidak bisa keluar kembali ke pengguna asli, gunakan exec:

$ | # exec su - [nama pengguna]

Ini secara teknis akan login pengguna baru dalam proses istilah baru, dan tutup yang sekarang. Dengan begitu ketika pengguna mencoba keluar atau Ctrl-D, terminal akan menutup seolah-olah pengguna yang membuat itu, yaitu, pengguna tidak dapat keluar kembali ke istilah pengguna asli. Agak tidak ada gunanya, mengingat mereka masih bisa memulai sesi terminal baru dan secara otomatis berada dalam login istilah pengguna asli, tapi itu dia.

EDIT: Untuk apa nilainya, Anda dapat menggunakan perintah linux vlock di ~ / .bashrc Anda untuk mengunci sesi terminal secara default, membutuhkan kata sandi dari sesi pengguna untuk membuka kunci. Ini agaknya akan mencegah restart istilah tersebut di bawah konteks pengguna asli, mengingat istilah tersebut tidak dipakai menggunakan non-default ~ / .bashrc dari pengguna, seperti yang dikonfigurasi.

SYANiDE
sumber
3

sudo -iu <your_username> bagi saya lakukan triknya

andilab
sumber
2

Namun rute lain adalah meluncurkan shell baru sebagai pengguna (non-root) yang berbeda untuk menjalankan perintah sebagai pengguna itu.

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

Contoh dari ini adalah mongodbpengguna. Ketika menggunakan cluster MongoDB yang terbelokkan, semua proses yang diperlukan harus berjalan sebagaimana mongodbmestinya dan tidak perlu (atau sepenuhnya nyaman) untuk mengubah proses menggunakan skrip init untuk puluhan node.

azatar
sumber
2

Mari kita selesaikan ini: Anda masuk sebagai UserA dan ingin "masuk" sebagai UserB untuk menjalankan beberapa perintah, tetapi ingin kembali ke UserA setelah selesai. Demi kesederhanaan, saya berasumsi bahwa Anda ingin menjalankan ls -l / tmp sebagai UserB. Jika Anda tidak ingin meninggalkan shell saat ini dari UserA tetapi menjalankan perintah sebagai UserB dan masih tetap masuk sebagai UserA, Anda harus melakukan ini:

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

Ini mengasumsikan Anda tahu kata sandi untuk UserB. Namun, jika Anda tidak tahu kata sandi UserB, Anda harus tahu kata sandi root. Kemudian:

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

Jika Anda lebih suka masuk sementara sebagai UserB untuk menjalankan banyak perintah, maka lakukan saja:

sudo su - UserB

Ini akan memberi Anda shell baru untuk UserB (periksa dengan mengetik id). Setelah selesai, Anda dapat melakukan ctrl-d dan kembali ke login Anda.

Melompat Kelinci
sumber
1

Jika Anda perlu menjalankan hanya satu perintah, Anda dapat menggunakan sudo: sudo -u username command

Maksim Luzik
sumber
-1
~$ sudo login

Kemudian akan muncul kata sandi sudo (kata sandi pengguna yang saat ini masuk).

Juga: pastikan bahwa pengguna saat ini ada di file sudoers!

Tshepo
sumber
2
Pertanyaannya adalah tentang masuk sebagai pengguna yang berbeda.
Minix