로그인이 비활성화 된 사용자로 명령을 실행하는 방법은 무엇입니까?


21

su 명령을 사용하여 다른 사용자로 응용 프로그램을 실행하려고합니다.

이 경우 irssi를 실행하려고합니다.

blah@ubuntu: su - [username] irssi
(enter password)

blah@ubuntu:
(nothing happens)

blah@ubuntu: su - [username] -c irssi
(nothing)

gksu를 실행하고 동일한 매개 변수를 설정하면 작동하며 사용자 비밀번호를 묻지 않습니다. 이슈가 뭐야? 어떻게 해결합니까?

사용자는 다음과 같이 생성되었습니다.

adduser --system --disabled-login [username]

차이가 있다면 ... 한숨.


irssi를 시작하기 위해 -c 플래그를 잊고 있지 않습니까? (su -c irssi)
eephyne

맨 페이지가 원하는대로 정확히 그게 전부 WTF 왜 그렇게 열심히에서 runas에 천 가지 ... 시도 ... 그것도 시도 ...하지만 아무것도 grrrr 발생하지 않습니다
user123361

irssi문제가 있고 su 명령이 작동하는 것일 수 있습니까?
Nanne

"[username]"에 irssi를 실행할 수있는 적절한 권한이 있습니까?
Doka

답변:


28

이 답변은 질문에 대한 수정 사항을 고려하더라도 여전히 도움이됩니다. 특히, --disabled-login비밀번호를 설정하지 않고 로그인 할 수있는 다른 방법이없는 계정으로 만들었지 만 sudo명령 또는 셸을 사용자로 실행 하는 데 여전히 아래 설명 된 방법 을 사용할 수 있습니다 . 사실 이것은 root우분투에서 계정이 설정되는 방식입니다.

이 명령에는 여러 가지 문제가 있습니다 su - irssi.

이 명령 은 이라는 사용자가 소유 한 시작 하려고합니다 .irssi

다음과 같은 경우 실패합니다.

  • irssi사용자 가 없습니다 .
  • irssi사용자의 계정을 사용할 수 없습니다.
  • irssi사용자의 계정이 대화 형 로그인에 사용할 수 없습니다. 때때로 계정은 FTP와 같은 서비스를 사용할 수 있지만 쉘을 다음과 같이 즉시 종료되는 것으로 설정하여 정상적으로 로그인 할 수 없습니다 /bin/false. 그런 다음 메시지없이 로그인이 즉시 종료됩니다.
  • 입력 한 비밀번호가 irssi사용자 에게 맞지 않습니다 .

-플래그는 쉘이 초기 로그인 쉘을 시뮬레이트하도록하므로 실제로로 로그온하는 것과 매우 유사 irssi합니다. -플래그가 없으면 su명령이 성공한 경우 여전히을 소유 한 쉘을 얻을 수 irssi있지만 환경 변수 HOME는 변경되지 않습니다.

대신 이라는 프로그램을 실행irssi 하려면 su다르게 호출해야합니다 .

su username - -c irssi

생략하면 --it 와 동일 하며 명령을 루트로 실행하려고합니다.-c username-c root

또는 쉘을 시작한 후 다음 명령을 실행할 수 있습니다 .

  1. 로 쉘을 시작하십시오 .su username -
  2. 셸에서 명령 ( irssi)을 실행하십시오 .
  3. 완료되면을 실행하여 셸을 그대로 두십시오 exit.

다음과 같이 명령 실행 root

당신이 실행하려는 경우 irssi와 같은 root, su그것을 할 수있는 방법은 없습니다. 루트 로그인은 우분투에서 기본적으로 비활성화되어 있으며 , 다시 활성화해야 할 이유는 거의 없습니다 . root로그인 을 활성화 한 경우을 사용 su하여 사용할 수 있어야합니다 root. root계정 을 활성화 할 필요가없는 이유 는 사용 여부에 관계없이으로 명령을 실행할 수 있기 때문 root입니다 sudo.

당신이 명령을 실행하면 sudo, 당신은에 넣어 당신 , 비밀번호 하지 정체성을 실행할 수있는 명령을 기원에서 사용자의 암호를. 관리자 만으로 임의의 명령을 실행할 수 있습니다 rootsudo(다시 구성하지 않는 한 sudo물론, 다른 사람들이 그렇게 할 수 있도록). 따라서 시스템을 관리 할 수없는 사용자는 root자신의 암호 로 명령을 실행할 수 없습니다 .

실행하려면 irssirootsudo:

sudo irssi

메시지가 표시되면 비밀번호가 아닌 비밀번호를 입력 합니다root .

입력 한 비밀번호를 제외하고 다음과 같은 기능을 수행합니다.

su -c irssi

계정을 활성화 sudo하지 않아도되기 때문에 버전을 제외하고 성공할 수 있습니다 root.

와 마찬가지로 su, 사용자가 아닌 다른 사용자 로 명령sudo실행할root 수 있습니다 . 실행하려면 irssiusernamesudo:

sudo -u username irssi

당신이 원하는 경우 sudo 같은 행동 su -에 대해서HOME 입니다 --that, 당신은 대상 사용자의 사용하려는 HOME실행할 수있는 환경 변수를 sudo-H플래그 :

sudo -H irssi
sudo -H -u username irssi

sudo에서처럼 전체 쉘을 시작할 수 있습니다 su. 비밀번호를 입력 한 경우를 제외하고이 명령은 다음과 같은 효과가 있습니다 su.

sudo -s

이 명령은 다음과 같은 효과가 있습니다 su -.

sudo -i

( 초기 로그인 쉘을i 나타냅니다 .)

다른 사용자로 쉘을 시작할 수도 있습니다.

sudo -u username -s
sudo -u username -i

추가 자료 sudo

에 대해 자세히 알아 보려면sudo 다음을 살펴보십시오.

왜 안 gksu작동했을 su까요?

gksu아마을 실행하여sudo 일했을 것입니다 .

gksu에 대한 프론트 엔드 모두 susudo. 우분투에서는 기본적으로 사용합니다 sudo(우분투에서는 su일반적으로 사용되지 않고 root다른 비 root사용자 가되는 두 번째 방법 일뿐이므로 ).

를 실행하여 프런트 엔드로 gksu사용할 수 있습니다 .sugksu --su-mode

를 실행 gksu하여 su모드 또는 sudo모드 인지 여부를 확인 하고 원하는 경우이 설정을 변경할 수 있습니다 gksu-properties. 이것은 사용자 별 설정입니다.

gksusudo모드는 같은 동작합니다 gksudo.

추가 자료 gksu


사후 분석

궁극적으로 다음을 사용하여 필요한 명령을 실행할 수 있음을 발견했습니다.

sudo -u username irssi

(위에 나열된 기술 중 하나입니다.)

궁극적으로 두 가지 정보를보고했는데 다른 정보가 실패했지만 성공한 이유를 설명하기에 충분합니다.

  1. username계정이 함께 생성 --disabled-login이없는하게 플래그 비밀번호 (로깅 및 다른 수단을). 비밀번호가 없다고해서 빈 비밀번호 로 로그인 할 수있는 것은 아닙니다 . 인증하기에 충분한 암호없음을 의미 합니다. 다른 인증 수단의 제거와 함께, 이것은 username전혀 인증 할 수 없음을 의미 합니다.

    따라서 모든 su기반 솔루션이 출시되었습니다. sudo하지만 sudo가장하려는 사용자로 인증하지 않기 때문에 작동 할 수 있습니다 . 대신 자신을 가장 할 수있는 권한부여 받아야 하며 자신으로 인증해야합니다 (예 : 자신의 암호가 아닌 자신의 암호를 입력).

    계정에 비밀번호를 설정하면 로그인에 대한이 장벽을 제거 할 수 있습니다.

    sudo passwd username

    그러나 사용자가 로그인 할 수없는 적절한 이유가있을 수 있습니다. 예를 들어,이 사용자가 로그인 할 수 있고 그래픽으로 로그인 한 경우, 사용자 환경에서 나쁜 문제가 발생하거나 X11 앱을 실행하기에 권한이 부적절합니다. ? 이 사용자가 로그온 할 수 있다면 해당 사용자 (네트워크 서비스가 노출 된 시스템의 경우)로 원격으로 로그온 할 수 있습니까?

    다시 비활성화하려면 다음을 수행하십시오.

    sudo passwd -dl username

    관련 : 계정을 일시적으로 활성화 한 후 계정을 다시 비활성화 root합니다.

  2. username계정이 /bin/false자사의 로그인 쉘로.

    같은 쉘이 bash로그인 쉘로 실행될 때 환경을 설정하고 기계를 제어 할 대화식 프롬프트를 제공합니다.

    /bin/false실행, 다른 한편으로는, 그것은 아무것도하지 않는다 , 그리고 실패를보고합니다 . ( /bin/true아무것도하지 않으며 성공을보고합니다.)

    falsetrue명령은 스크립트에서 유용하고 다양한 테스트 목적뿐만 아니라, 그래서 계정을 비활성화하는 경우, 자신의 로그인 세션을 즉시 끝에서 누군가 로그인합니다. 그렇게하면 암호 (또는 다른 인증 수단)를 활성화 할 수 있으며 쉘 액세스가 아닌 사람들이 로그인 할 수 있습니다 . 예를 들어 FTP 서버가 있으면 FTP를 통해 계정에 계속 액세스 할 수 있습니다. SSH 서버가 있으면 SSH를 통해 쉘을 얻을 수 없지만 여전히 파일을 사용 sftp하고 scp전송할 수 있습니다.

    이후 username의 로그인 쉘이 작동하지 않는했다, 명령 좋아 , , , 및 수 없었다 작업을.su usernamesu - usernamesudo -u username -ssudo -u username -i

    그러나 쉘을 제공하지 않는 명령은 작동 하거나 작동 하지 않을 수 있습니다.sudo -u username commandsu username -c 'command'

    때문에 명령을 실행할 수 있습니다, 당신은 수있는 기능 무언가에 사용자의 로그인 쉘을 변경 :

    sudo chsh -s /bin/bash username

    그러나 사용자에 대한 대화 형 로그인을 비활성화해야 할 적절한 이유가있을 수 있으므로주의해야합니다.

여기에서 username비밀번호 "비활성화 된"셸을 모두 비활성화했습니다 . 작동하는 암호가 없으면 모든 su기반 솔루션이 작동하지 않는 반면, 대화식 로그인 쉘이 작동하지 않으면 셸 생성 솔루션이 작동하지 않습니다 (예 :) (예 : 셸을 수동으로 호출 ).sudo -u username bash

sudo -u username command 남아있는 것입니다.


답변을 처리하는 동안 많은 수정을하신 것에 대해 죄송합니다. 와우. 고맙습니다. cat / etc / passwd를 수행하면 내가 구성한 사용자의 끝에 / bin / false가 있습니다. 이것이 실패하는 이유는 무엇입니까? 어떤 아이디어를 어떻게 고칠 수 있습니까?
user123361

어떤 이유로 든 sudo -u username irssi를 사용하면 문제가 해결됩니다. 길고 잘 설명 된 답변에 감사드립니다!
user123361

@db 나는 그것이 효과가있어서 기쁘다! (Btw, 편집에 사과 할 필요가 없으며 편집은 매우 훌륭하며 편집 결과로 다른 사람들에게도 귀하의 질문이 유용 할 것입니다.) 다른 질문에 대해서는 끝에 분석 섹션을 포함하십시오.
Eliah Kagan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.