วิธีการสลับระหว่างผู้ใช้ในหนึ่งขั้ว?


480

ฉันต้องการลงชื่อเข้าใช้ด้วยชื่อผู้ใช้อื่นโดยไม่ต้องออกจากระบบปัจจุบัน (ในเทอร์มินัลเดียวกัน) ฉันจะทำอย่างไร


1
ฉันถามคำถามที่คล้ายกันเพราะฉันพบปัญหาเกี่ยวกับตัวแปรสภาพแวดล้อม XDG ( $XDG_RUNTIME_DIRโดยเฉพาะ) ที่ทำให้ฉันรู้สึกแย่ -> unix.stackexchange.com/questions/354826/…
Jonathan Komar

คำตอบ:


561

วิธีการเกี่ยวกับการใช้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

มีวิธีวนรอบมากขึ้นหากคุณไม่สามารถเข้าถึง sudo ได้เช่น ssh username @ localhost แต่sudoอาจจะง่ายที่สุดหากติดตั้งแล้วและคุณได้รับอนุญาตให้ใช้งาน


17
นอกจากนี้su - [user]อาจมีประโยชน์ด้วย - เครื่องหมายขีดกลางพิเศษจะให้เชลล์ล็อกอินให้คุณ
ephemient

ฉันได้รับข้อผิดพลาดนี้ "-su: / dev / stderr: การอนุญาตถูกปฏิเสธ" หลังจากดำเนินการคำสั่งนี้echo >>/dev/stderrในการเข้าสู่ระบบด้วยsu --login ...เคล็ดลับใด ๆ ? ฉันพบ btw unix.stackexchange.com/questions/38538/
กุมภ์กุมภ์

สิ่งนี้อนุญาตให้ผู้ใช้ใหม่แต่ละรายมีค่าที่แตกต่างกันแทนที่สำหรับตัวแปรสภาพแวดล้อมหรือไม่ เช่นการกำหนดค่า git สำหรับการทำงานโอเพนซอร์สและอื่น ๆ
Kevin Suttle

การค้นพบหนึ่งเมื่อฉันแสดงรายการenvมันเห็นว่าทุกอย่างเป็นระเบียบเช่นเดียวกับการตรวจสอบภาพสามารถไป; และสิ่งหนึ่งที่ไม่ถูกต้อง: XAUTHORITY=/home/user1/.Xauthority'. Not sure _why_? So X-window doesn't work by default because the protection on ไฟล์ ~ / .Xauthority` -rw-------คือ: ฉันทำสำเนาและให้ฉันเรียก gedit เป็นการทดลอง
จะ

1
หากคุณได้รับ "บัญชีนี้ไม่สามารถใช้งานได้ในปัจจุบัน": su -s / bin / bash - www-data
max4ever

46

โดยทั่วไปคุณใช้sudoเพื่อเปิดเปลือกใหม่เป็นผู้ใช้ที่คุณต้องการ; -uธงช่วยให้คุณระบุชื่อผู้ใช้ที่คุณต้องการ:

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

มีวิธีวนมากขึ้นหากคุณไม่สามารถเข้าถึง sudo ได้ssh username@localhostแต่ฉันคิดว่าsudoอาจจะง่ายที่สุดหากติดตั้งไว้และคุณได้รับอนุญาตให้ใช้


ถ้าระบบของฉันไม่มีเซิร์ฟเวอร์ ssh หรือ sudo ล่ะ? คุณสามารถพูดถึงส่วนนั้นในคำตอบได้หรือไม่?
tshepang

ตกลงแพรตต์ตอบว่าหนึ่ง
tshepang

4
sudo -sช่วยให้คุณมีเปลือกเช่นsu, จำลองเช่นการเข้าสู่ระบบsudo -i su -สามารถใช้ร่วมกับ-u $userแน่นอน
ephemient

มีประสิทธิภาพมากขึ้น ความสามารถในการ "เข้าสู่ระบบ" ในฐานะผู้ใช้ที่ปกติไม่สามารถเข้าสู่ระบบเป็นสินทรัพย์ที่ดี .. ! ทั้งหมดอนุญาตให้ฉันเรียกใช้อินสแตนซ์ฐานข้อมูลโดยไม่ต้องยุ่งกับการอนุญาตหรือ selinux
Félix Gagnon-Grenier

20
$ whoami 

คำสั่งนี้พิมพ์ผู้ใช้ปัจจุบัน ในการเปลี่ยนผู้ใช้เราจะต้องใช้คำสั่งนี้ (ตามด้วยรหัสผ่านของผู้ใช้):

$ su secondUser
Password:

หลังจากป้อนรหัสผ่านที่ถูกต้องคุณจะเข้าสู่ระบบในฐานะผู้ใช้ที่ระบุ (ซึ่งคุณสามารถตรวจสอบโดยเรียกใช้whoamiอีกครั้ง


มีประโยชน์ถ้าคุณไม่ได้ sudoer
Marco Sulla

15

หากคุณใช้งาน Ubuntu และหากผู้ใช้ที่คุณต้องการเข้าสู่ระบบเนื่องจากไม่มีชุดรหัสผ่าน:

sudo su - username

ป้อนรหัสผ่านของคุณเองและคุณควรตั้งค่า แน่นอนสิ่งนี้ต้องการให้ผู้ใช้ของคุณมีสิทธิ์ในการรับสิทธิ์รูsudo


8

ในการสลับเซสชันเทอร์มินัลเป็นผู้ใช้อื่นซึ่งผู้ใช้นั้นไม่สามารถออกจากกลับไปเป็นผู้ใช้เดิมให้ใช้ exec:

$ | # exec su - [ชื่อผู้ใช้]

เทคนิคนี้จะเข้าสู่ระบบผู้ใช้ใหม่ในกระบวนการคำศัพท์ใหม่และปิดผู้ใช้ปัจจุบัน ด้วยวิธีดังกล่าวเมื่อผู้ใช้พยายามออกหรือ Ctrl-D เทอร์มินัลจะปิดราวกับว่าผู้ใช้นั้นเป็นผู้สร้างอินสแตนซ์นั่นคือผู้ใช้จะไม่สามารถย้อนกลับไปสู่คำศัพท์ดั้งเดิมของผู้ใช้ได้ ค่อนข้างไม่มีจุดหมายการพิจารณาว่าพวกเขายังคงสามารถเริ่มต้นเซสชันเทอร์มินัลใหม่และอยู่ในการเข้าสู่ระบบของผู้ใช้เดิมโดยอัตโนมัติ แต่มี

แก้ไข: สำหรับสิ่งที่คุ้มค่าคุณสามารถใช้คำสั่ง linux vlock ใน ~ / .bashrc ของคุณเพื่อล็อคเซสชันเทอร์มินัลโดยค่าเริ่มต้นต้องการรหัสผ่านของคำที่ผู้ใช้เซสชันปลดล็อค สิ่งนี้จะป้องกันการเริ่มต้นคำดังกล่าวภายใต้บริบทผู้ใช้เดิมเนื่องจากคำว่าไม่ได้ถูกสร้างอินสแตนซ์โดยใช้ ~ / .bashrc ที่ไม่ใช่ค่าเริ่มต้นของผู้ใช้ตามที่กำหนดค่าไว้



2

อีกเส้นทางหนึ่งคือการเปิดตัวเชลล์ใหม่ในฐานะผู้ใช้ที่แตกต่าง (ไม่ใช่รูท) เพื่อรันคำสั่งในฐานะผู้ใช้นั้น

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

ตัวอย่างนี้คือmongodbผู้ใช้ เมื่อปรับใช้คลัสเตอร์ MongoDB ที่ถูกแบ่งใช้กระบวนการที่จำเป็นทั้งหมดจะต้องรันmongodbและไม่จำเป็น (หรือสะดวกทั้งหมด) เพื่อ daemonize กระบวนการโดยใช้สคริปต์เริ่มต้นสำหรับหลายสิบโหนด


2

ให้เราได้รับสิทธินี้: คุณเข้าสู่ระบบในฐานะผู้ใช้และต้องการ "เข้าสู่ระบบ" ในฐานะผู้ใช้เพื่อเรียกใช้คำสั่งบางอย่าง แต่ต้องการที่จะกลับมาที่ UserA เมื่อทำ เพื่อความเรียบง่ายฉันถือว่าคุณต้องการรัน ls -l / tmp เป็น UserB หากคุณไม่ต้องการออกจากเชลล์ปัจจุบันของ UserA แต่ให้รันคำสั่งเป็น UserB และยังคงอยู่ในระบบในฐานะ UserA คุณควรทำสิ่งนี้:

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

สิ่งนี้จะถือว่าคุณรู้รหัสผ่านสำหรับ UserB อย่างไรก็ตามหากคุณไม่ทราบรหัสผ่านของผู้ใช้คุณต้องรู้รหัสผ่านรูท แล้ว:

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

หากคุณต้องการเข้าสู่ระบบในชื่อ UserB ชั่วคราวเพื่อรันคำสั่งมากมายให้ทำดังนี้

sudo su - UserB

สิ่งนี้จะทำให้คุณมีเชลล์ใหม่สำหรับ UserB (ตรวจสอบด้วยการพิมพ์ id) เมื่อเสร็จแล้วคุณสามารถทำ ctrl-d และกลับสู่การเข้าสู่ระบบของคุณ


1

หากคุณต้องการเรียกใช้เพียงคำสั่งเดียวคุณสามารถใช้ sudo: sudo -u username command


-1
~$ sudo login

จากนั้นจะแจ้งให้คุณใส่รหัสผ่าน sudo (รหัสผ่านของผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน)

ตรวจสอบให้แน่ใจว่าผู้ใช้ปัจจุบันอยู่ในไฟล์ sudoers!


2
คำถามคือเกี่ยวกับการเข้าสู่ระบบในฐานะผู้ใช้อื่น
Minix
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.