su 동안 다른 사용자에게 로그인 쉘로“터미널 프로세스 그룹을 설정할 수 없습니다”


16

참고 :이 게시물의 중간 지점 근처에서 "EDIT"로 시작하는 업데이트 된 정보를 읽으십시오.이 문제의 환경과 배경이 변경되었습니다.

데비안 테스팅 리포지토리로 사이드 그레이드하기로 결정한 늪지 표준 데비안 6.0 설치가 있습니다. 나는 source.list의 Squeeze repos에 대한 참조를 교체하여 Testing repos를 대신 사용 하여이 작업을 수행했습니다.

패키지 설치 및 재부팅 후 다른 사용자에게 su를 시도 할 때 다음 오류가 발생합니다.

root@skaia:~# su joebloggs -
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell

-를 생략하면 발생하지 않습니다.

사용자는 루트가 될 수 있습니다. 루트에서 다른 사람으로 전환하고-를 사용하여 해당 사용자의 환경을 얻을 때만 발생합니다.

여기서 구글은 대부분 쓸모가 없다. 내가 찾을 수있는 유일한 것은 sux패키지 와 관련하여 2011 년부터 참조 된 것으로 , 그 동안 수정 된 것으로 보입니다.

이것은 올바른 패키지를 올바른 방식으로 조정하여 해결할 수있는 업그레이드 오류와 매우 흡사합니다. 나는 어디서부터 시작 해야할지 전혀 모른다.이 외에도 시스템이 정상적으로 정상적으로 작동합니다.

편집하다

이것은 위에서 설명한 데비안 안정 머신 에서 나에게 지금 일어나고 있습니다. 이번에는 업그레이드 나 아무것도하지 않고 바로 위로 올립니다.

1 년 후 여전히 문제가 무엇인지 전혀 모른다.

현재 모습은 다음과 같습니다 (별로 변경되지 않음).

bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
terraria@skaianet:~$ tty
/dev/pts/0
terraria@skaianet:~$ ls -l /dev/pts/0
crw--w---- 1 root root 136, 0 Oct 10 19:21 /dev/pts/0
terraria@skaianet:~$ ls -l /dev/pts/
crw--w---- 1 root root 136, 0 Oct 10 19:21 0
crw--w---- 1 root root 136, 2 Sep 22 17:47 2
crw--w---- 1 root root 136, 3 Sep 26 19:30 3
c--------- 1 root root   5, 2 Sep  7 10:50 ptmx

다음과 같이 생성 된 strace :

root@skaianet:~$ strace -f -o tracelog su terraria -

.. 또한 혼란스러운 행동을하게됩니다. 이 메시지는 다소 혼란 스럽다. 일부 선택된 라인 :

readlink("/proc/self/fd/0", "/dev/pts/0", 4095) = 10
#Error code 10? 
15503 open("/dev/tty", O_RDWR|O_NONBLOCK) = -1 ENXIO (No such device or address)
#Yes there is, and I can interact with it normally
15503 ioctl(255, TIOCGPGRP, [32561])    = -1 ENOTTY (Inappropriate ioctl for device)

이 strace 세션의 전체 출력을 연결 했습니다 . su 명령을 실행 한 다음 터미널에서 즉시 ctrl + d를 수행하면됩니다.


1
안녕 마이크. 문제를 찾았습니까?
Mircea Vutcovici

답변:


33
  • su - usernamesu" 사용자 이름 의 쉘을 대화식 로그인 쉘로 실행"을 의미하는 것으로 해석됩니다.
  • su username -당신에 의해 해석된다 su"다음 실행을 의미하는 비 대화 형 (명령 -으로) 사용자 이름 "
  • 후자는 전혀 효과가 없었습니다.
    • 구문 분석 sush위해 후행 인수를 전달 합니다.
    • sh소요 -의미하는 "로그인 쉘로 실행 (읽기 /etc/profile, ...)"

그러나 당신이 정말로 관심있는 것은 : 왜 비 대화식 인가? 권한있는 부모와 권한이없는 자식간에 제어 터미널을 공유하면 버그 라고 하는 " TTY 푸시 백 권한 에스컬레이션 "에 취약하게 TIOCSTI되므로 실제로 su 분리 할 필요가 없다면 말입니다 . su username -양식 을 사용할 때 su 제어 터미널이 필요하지 않은 것으로 추정되었습니다 .

제어 터미널이있는 프로세스 만 프로세스 그룹을 조작하는 세션 리더를 가질 수 있습니다 (작업 제어 수행). 당신이 준 추적 bash은 세션 리더가 될 수 없다는 것을 감지하고 있습니다.

당신은 언급 :

익숙하지 않은 곳은 Ubuntu와 CentOS 6에서 두 형식이 모두 잘 작동하지만 바닐라 데비안에서는 첫 번째 형식 만 오류없이 작동합니다.

무시 변종 좋아 sux하고 sudo, 적어도 세 가지가있다 [1] 버전의 su리눅스에 : coreutils, util-linux그리고 shadow-utils데비안의 올있는가. 후자의 맨 페이지는 다음을 지적합니다.

이 버전의 su에는 많은 컴파일 옵션이 있으며 그 중 일부만 특정 사이트에서 사용 중일 수 있습니다.

그리고 데비안에는 깃발이 붙어 있습니다 old_debian_behavior. 다른 버전에는 비슷한 컴파일 시간 / 런타임 옵션이있을 수 있습니다. 변화에 대한 또 다른 이유는 몇 가지가 있다고 할 수도 논쟁 [2] 의 여부에 su적 특권이 방법을 드롭하는 데 사용되어야하며 여부 TIOCSTI(레드햇 원래 버그 따라서 전혀 버그입니다는 "고치지 않을 것 (wontfix)"를 폐쇄 ).

[1] : 편집 : 추가 SimplePAMApps하고 hardened-shadow그것.

[2] : 솔라 디자이너는 읽을만한 가치가 있다고 생각되는 (오래된) 의견을 가지고 있습니다 .


2
그것은 훌륭한 답변이며 무엇보다도 이유를 정확하게 설명합니다. 나는 당신이 1 년 전에 여기 있었으면 좋겠다 :)
Mikey TK

1

업그레이드 프로세스 중에 대체되지 않은 / dev / pts * 또는 / dev / pts 장치와 관련된 udev의 새 구성에 대한 소유권 및 권한을 확인합니다.

루트로 실행하여 syscal이 오류를 생성하는 원인을 찾으려고 시도 할 수도 있습니다.

strace -f su - username 2>stderr.log

2
-fsu가 쉘을 하위 프로세스로 실행하기로 결정한 경우 현재 strace에 추가 하는 것이 좋습니다. 터미널의 포 그라운드 프로세스 그룹을 설정하는 syscall은 ioctl(..., TIOCSPGRP, ...)이미 ENOTTY (장치에 부적절한 ioctl)로 실패하여 strace의 일부가 크게 도움이되지 않는다는 것을 이미 알고 있습니다. 그러나 TIOCSPGRP가 실패한 이유- 를 찾기 위해 두 버전의 명령 (을 포함하거나 포함하지 않음 )을 비교할 수 있습니다 .
Alan Curry

유망한 리더처럼 보입니다. 내 / dev / pts 폴더를 보면 정확히 두 가지 항목, 즉 0, 내가 로그인 한 사용자가 600으로 설정 한 ptmx권한과 권한이 0 인 루트 가 소유 한 권한이 있습니다.
Mikey TK

1
메시지 후에 쉘 프롬프트가 No job control표시되면 명령을 실행 tty하면 어떤 tty가 있는지 알려줍니다. 그런 다음 ls -l.
Alan Curry

@AlanCurry, 맞습니다 -f. 추가하겠습니다 . 감사합니다!
Mircea Vutcovici

@AlanCurry-다시 돌아 왔습니다. Mircea가 제안한 정보로 원래 질문을 업데이트했습니다.
Mikey TK
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.