한 터미널에서 사용자 간을 전환하는 방법은 무엇입니까?


답변:


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]유용 할 수 있습니다. 추가 대시는 로그인 쉘을 제공합니다.
ephemient

echo >>/dev/stderr으로 로그인 할 때이 명령 을 실행 한 후 "-su : / dev / stderr : Permission denied"오류가 발생 su --login ...합니다. 이 btw unix.stackexchange.com/questions/38538/…를
Aquarius Power

이로 인해 각 새로운 사용자가 환경 변수에 대해 다른 대체 값을 가질 수 있습니까? 예 : 작업, 오픈 소스 등을위한 git config
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

Ok, Pratt는 다음 중 하나에 답했습니다
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를 시도 할 때 터미널은 마치 해당 사용자가 인스턴스화 한 사용자 인 것처럼 닫힙니다. 즉, 사용자는 원래 사용자의 용어로 다시 종료 할 수 없습니다. 무의미한 사람들은 여전히 ​​새로운 터미널 세션을 시작하고 자동으로 원래 사용자 용어 로그인에있을 수 있다는 점을 고려하지만 무의미합니다.

편집 : 가치있는 것을 위해 ~ / .bashrc에서 linux vlock 명령을 사용하여 기본적으로 터미널 세션을 잠글 수 있습니다. 세션 사용자의 암호를 잠금 해제해야합니다. 이렇게하면 용어가 구성된 기본이 아닌 ~ / .bashrc를 사용하여 인스턴스화되지 않는 경우 원래 사용자 컨텍스트에서 위에서 언급 한 용어가 다시 시작되지 않을 수 있습니다.


3

sudo -iu <your_username> 나를 위해 속임수를 쓰다


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의 비밀번호를 모르면 루트 비밀번호를 알아야합니다. 그때:

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.