다른 사용자 및 실행 화면으로 Sudo


167

오늘 내가 실행 한 다른 사용자로 실행중인 화면이 작동하지 않는다는 것을 알았습니다!

ssh bob@server         # ssh into server as bob
sudo su "monitor" -
screen                 # fails: Cannot open your terminal '/dev/pts/0'

"모니터"사용자로 실행되는 스크립트가 있습니다. 화면에서 출력을보기 위해 화면 세션에서 실행합니다. 문제는, 우리는 자신의 계정 (예 : bob, james, susie 등)으로 로그인 한 다음 "모니터"사용자로 sudo하는 많은 사용자가 있다는 것입니다. "모니터"사용자에게 액세스 권한을 부여하는 것은 의문의 여지가 없습니다.


13
이 오류가 발생합니까? "터미널 '/ dev / pts / 0'을 (를) 열 수 없습니다. 확인하십시오."
Jim

그렇습니다. 왜 그런 일이 발생하는지 이해하지만 해결 방법이 있습니까?
luckytaxi

4
당신의 명령에 대한 의견 – 나는 사람들이 계속 달리는 것을 본다 sudo su "user" -. 왜 사용하지 sudo -u user -s않습니까?
Andrew Aylett

2
@Jim : 누락 된 오류 메시지를 제공 한 경우 +1입니다.
Dennis Williamson

1
@Andrew 내가 아는 대부분의 사람들 sudo su-나는 사람들이 익숙해 져 sudo su있다고 생각합니다.
voretaq7

답변:


245

화면을 시작하기 전에 script /dev/null사용자로 실행 해보십시오 su. 빈민굴 작은 해킹이지만 화면이 행복해야합니다.


5
Re : 보안 관련 사항, 내가 아는 바 없음 (그러나 이것이 존재하지 않음을 의미하는 것은 아닙니다.)-IIRC 이것은 사용자가 호출 한대로 새 터미널 장치를 여는 "스크립트"의 부작용에 의존합니다. 스크립트 출력을 / dev / null로 보내므로 캡처 할 항목이 없습니다. 또한 tty 그룹 (IMHO)에 사용자를 추가하는 것보다 확실히 안전합니다
voretaq7

2
말했다 - 당신은 유닉스 시스템 관리자 인 경우 @nalply 솔직히 당신은 혼란 여러 조개를 찾을해야 script실행하는 데 사용할 수 있습니다 screen. 그런 다음 두 번만 종료하면됩니다 (한 번 screen, 한 번 su). (이것은 script당신이 그것을 읽을 시간이
걸리면

10
아니면 그냥 실행하십시오 sudo -u bob script -q -c 'screen -dr myscreen' /dev/null. 그런 다음 종료 / 분리 할 터미널이 하나만 있습니다.
Andy Shulman

4
고마워, 이것은 나를 구했다. 그런데 왜이 문제가 해결됩니까? 내가 이해 한 것부터 stdout에서 ... 아무데도 모든 것을 인쇄합니다. 그리고 그것은 어떻게 든 화면을 수정합니다.
sudo

3
그 일을하기 위해 @sudo는 script그것 (에 보면 실행 한 사용자가 소유 한 자신의 tty 장치 열립니다 /dev당신은 당신이 실행 한 후이 나타납니다 볼을 script). screen그런 다음 해당 tty 장치를 가져옵니다 (사용자가 소유하고 screen있으므로 액세스하는 데 문제가 없음). 완전히 해킹 작업이지만 작동합니다. 내 컴퓨터 중 일부를 보면 새 버전의 화면이 setuid-root를 설치하는 것처럼 보이지만 다른 setuid-root 바이너리가 떠 다니는 것은 일부 사람들이 정당하게 불편하게 만듭니다.
voretaq7

33

나는 screen사용자 에게 래퍼 함수를 ​​사용하고 sudo su있습니다. 이것은 사용자에게 추가 한 래퍼 함수입니다 ~/.bashrc.

기능 화면 () {
  / usr / bin / script -q -c "/ usr / bin / screen $ {*}"/ dev / null
}

이를 통해 사용 screen하려는 모든 옵션과 매개 변수 를 사용할 수 있습니다. 이 기능을 시스템 전체에 배치하려고합니다.


1
완벽하게 작동합니다. 이 시스템 전체를 원하는 사람들을 위해 /etc/bash.bashrc에 추가하는 것이 좋습니다-모든 사용자에게 적용됩니다.
Someguy123

2
이것은 올바르게 화면을 표시하는 인수를 인용하지 않으며 그렇지 않으면 좋은 해결책입니다.
augurar

7

어쨌든 호스트에 SSH로 접속한다고 가정하면 ~ monitor / .ssh / authorized_keys 파일에서 모니터 계정에 액세스해야하는 각 사용자에 대해 공개 ssh 키를 추가 할 수 있습니다. 그런 다음 각 사용자의 원격 컴퓨터에서 실행할 수 있습니다.

ssh -t monitor@remote.machine 화면 -RD


이것은 또 다른 좋은 접근 방법입니다. 그러나 권한이 부여 된 키 파일에 강제 명령을 지정해야합니다. (luckytaxi의 " '모니터'사용자에게 액세스 권한을 부여하는 것은 당연하지 않습니다") 참고-강제 명령은 명령을 스크린 세션 첨부)
voretaq7

2
"답변에 액세스 권한을 부여하는 것은 문제가 없다"고 말했지만 "... 모니터 사용자에게 sudo"라고 말했기 때문에 내 대답에서 그 문제를 해결하는 방법을 잘 모르겠습니다. 그러나 authorized_keys에서 명령 제한을 강제로 처리해야한다는 데 동의합니다.
Alex

7

우리 가이 오류에 대해 이야기한다고 가정합니다.

$ sudo su - bob
$ screen
Cannot open your terminal '/dev/pts/5' - please check.

다음은 하나의 라이너입니다 (예 : "별칭 gobob"으로 사용될 수 있음).

sudo su - bob -c "script -c bash /dev/null"'

설명:

이것은 사용자 bob으로 쉘 (로그인 쉘과 같은)을 시작합니다. bob 사용자가 시작 script하여 bash (대시 또는 ksh 일 수 있음)를 호출하라는 메시지가 표시되고 세션 사본이 삭제됩니다.


0

아마도 해당 장치에 대한 권한을 변경하거나 해당 장치를 읽을 권한이있는 그룹에 모니터를 추가해야 할 것입니다. 그러나 보안에 미치는 영향을 고려해야합니다.


0

당신은 당신이 말한다 :

sudo su "monitor" -

후행 대시에 대해 궁금합니다. 나는 보통 :

sudo su - username

대시 보드 (su 매뉴얼 페이지 당)는 su에게 "쉘을 로그인 쉘로 만들도록"지시합니다. 이것은 모든 일반적인 쉘 시작 스크립트를 소싱하고 PATH 및 HOME과 같은 것을 올바르게 설정한다는 것을 의미합니다.


3
아니. sudo su - usernamesudo su username -같은 일을한다.
Tim Ludwinski 20시 59 분

-4

방금이 문제를 겪었습니다. chmod +rw $(tty)sudo를 실행하기 전에 해결했습니다 . 이 솔루션의 문제점은 누구나 그 후에 터미널에서 연결하고 스누핑 할 수 있다는 것입니다.


2
훌륭한 솔루션 인 것 같습니다.
Evan Carroll

10
@EvanCarroll 전세계 에 자신의 터미널에 대한 읽기 및 쓰기 액세스 권한을 부여 하는 부분을 ​​제외하고는 훌륭한 솔루션 입니다. 단지 사소한 보안 문제-비밀번호를 수락하기 전에 터미널 보안을 검사하는 것을 제외하고는 어떤 프로그램도 신경 쓰지 않습니다 gpg. 그리고 그는 악의적 인 사용자가 tty암호를 보거나 냄새를 맡을 수있는 시스템을 사용하지 않을 것입니다 .
voretaq7

경고 : 집에서 절대로 시도하지 마십시오! 이것은 위험하다 !!!
ruizpauker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.