'script'를 / dev / null /으로 리디렉션하면 왜 다른 사용자로 인해 'screen'이 작동합니까?


36

특정 장기 실행 스크립트를 실행하기 위해 사용자에게 고소당했습니다. 화면을 사용하고 싶지만 "터미널 '/ dev / pts / 4'을 (를) 열 수 없습니다. 확인하십시오"라는 오류 메시지가 나타납니다.

그래서 나는 Googled를 둘러보고 실행하도록 지시 한 포럼 게시물을 발견했습니다 $ script '/dev/null/'. 그렇게하고 나서 화면을 볼 수있었습니다.

왜 이것이 작동합니까? 해당 사용자가 해당 화면을 실행할 수없는 이유는 무엇입니까? 'script'를 / dev / null로 리디렉션하는 것이 다른 방법으로 방지되는 이유는 무엇입니까? 스크립트를 사용하여 원래 사용자로 로그를 작성합니까?


2
클리너는 su스크린 세션 내 에서 실행 됩니다.
justarobert

여러 사용자가 서비스 / 배치 스크립트 실행 계정의 동일한 화면에 연결할 수있게하려면 @justarobert가 아닙니다.
Ashley

답변:


40

글쎄, 기술적으로 당신은 여기에 아무것도 리디렉션하지 않습니다.

호출 script /dev/null하면 실제로 script전체 내용 을 저장 한다는 의미 로 전체 타이프 스크립트 가 저장 /dev/null됩니다.

참조 man script자세한 정보를 원하시면 및 폴더의 유틸리티 - 리눅스-ng를 구현 패키지를 ( misc-utils/script.c).

이것은 screen실제로 는 아무 관련이 없습니다 . 이것이 작동하는 이유는 script에서 의사 터미널을 생성하는 부작용이 있습니다 /dev/pts/X. 이렇게하면 사용자가 직접 할 필요가 없으며 화면에 권한 문제가 없습니다. su사용자 A 에서 사용자 B 로 직접 액세스 screen하면 사용자 A 의 의사 터미널을 소유하려고합니다 . 루트 가 아닌 이상 성공하지 못합니다 . 따라서 오류 메시지가 나타납니다.


6

터미널 창에 직접 출력하려면 실행중인 프로그램을 제어 터미널에 쓸 수 있어야합니다. xterm 또는 ssh 또는 다른 가상 연결을 사용하는 경우 (실제 라이브로 직접 연결된 터미널이 아닌) 제어 터미널은 의사 tty (pty)입니다.

당신의 pty는 당신이 로그온 할 때 당신에게만 쓰기 권한으로 설정됩니다, 그렇지 않으면 다른 사용자가 당신의 디스플레이에 낙서를하거나 읽을 수 있습니다. 따라서 다른 사용자에게 접근 할 때 (그리고 해당 사용자가 루트가 아닌 경우) 해당 사용자는 기본 pty에 액세스 할 수 없습니다.

그러나 화면과 같은 더 복잡한 I / O는 전체 화면을 제어하는 ​​마술처럼 작동하려면 pty에 직접 액세스해야합니다. 제어 터미널에 대한 적절한 액세스 권한이없는 명령을 실행하는 사람과 관련된 문제가 발생했을 때입니다.

스크립트를 / dev / null로 리디렉션하면 화면이 제어 터미널에 쓰려고하지 않으므로 권한 문제가 발생하지 않습니다.


2
그렇다면 / dev / null로 넘어 가면 어떤 화면이 기록되는지 어떻게 알 수 있습니까? 나는 내가 잘못 이해했다고 확신하고 실제로 / dev / null로 가지는 않지만 어디로 가나 요?
user63623

화면 출력을 의미하는 "it"은로 이동하지 않습니다 /dev/null. 첫째, 스크립트는 세션 (맨 페이지 참조)를 기록, 당신은 전혀 필요하지 않은 : 그래서 에게는 / dev / null로 이동합니다. 그러나 그것은 부작용이 없습니다 : 그것은 의사 터미널을 만들고 이제는 이것을 사용하고 있으며 화면은 이것에 쓸 수 있습니다. @ karol-piczak의 anwer를 참조하십시오.
Nanne
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.