이번 달에는 관리자가 아닌 Cygwin 사용자에게 로그인하거나 ssh를 사용할 수 없지만 지난달에는 관리자가 아닌 다른 사용자에게 로그인하거나 ssh를 사용할 수 있었습니다.

이번 달에는 관리자가 아닌 Cygwin 사용자에게 로그인하거나 ssh를 사용할 수 없지만 지난달에는 관리자가 아닌 다른 사용자에게 로그인하거나 ssh를 사용할 수 있었습니다.

이 문제에 대한 변형에 대한 거의 모든 Google 링크를 읽었지만 그 중 어느 것도 적용되지 않는 것 같아서 혼란스럽습니다.

많은 Linux 시스템 외에도 설치 파일을 통해 Windows 업데이트 및 Cygwin 업데이트로 완전히 업데이트되는 Cygwin이 설치된 Windows 10 노트북이 있습니다. 여기에는 관리 사용자(엄격히 유지 관리용)와 일상적인 작업을 위해 사용자 그룹(다른 그룹의 구성원이 아님)에 할당된 두 개의 비관리 사용자 계정이 있습니다. 세 계정 모두 수년 동안 완벽하게 작동했으며 Cygwin은 각각의 cygwin 터미널을 시작하거나 SSH를 통해 localhost에 로그인할 수 있었습니다. 이번 달에는 알 수 없는 이유로 User1 계정이 Cygwin 터미널을 시작할 수 없습니다. 대신 항상 관리 비밀번호를 묻는 메시지가 표시됩니다. "아니요"를 선택하면 Cygwin 터미널이 열리지 않습니다. "예"를 클릭하고 관리자 비밀번호를 제공하면 실제로 User1로 로그인되지 않습니다. 이는 User1이 관리자일 필요가 없고 푸시/푸시를 위해 자신의 git 파일, 리포지토리 등에 액세스해야 하기 때문에 문제가 됩니다. 업데이트를 가져옵니다.

관리자가 "ssh User1@localhost"를 실행하면 비밀번호 확인을 통과하지만 다음 유형의 메시지와 함께 즉시 쫓겨납니다.


Last login: Sat Apr  1 21:57:31 2017 from ::1
Connection to localhost closed.

마지막 로그인은 성공적인 로그인을 확인하지만 항상 즉시 로그아웃됩니다. User2와 동일한 명령을 실행하면 sshd가 제대로 작동하는지 확인하는 데 문제가 없습니다.

관리자 계정을 통해 cygwin 터미널에서 "login User1"을 실행하면 User1의 비밀번호를 입력하라는 메시지가 표시되고, 성공적으로 입력되면 다음 메시지와 함께 다시 쫓겨납니다.


Password:
Switching to user User1 failed!

User2는 이러한 작업을 수행하는 데 전혀 문제가 없습니다. User1은 지난 달과 지난 몇 년 동안 이 모든 작업을 수행할 수 있었습니다.

sshd를 다시 설치하고(Cygwin 설치 프로그램을 통해 업그레이드하기도 함) ssh-host-config를 다시 실행했지만 아무것도 도움이 되지 않는 것 같습니다. (ssh는 Admin 및 User2에서 작동합니다.) 제가 확인한 내용은 다음과 같습니다.

  • User1은 /etc의 블랙리스트에 없습니다. 신고된 파일을 확인하여 확인했습니다.

 find /etc -type f -exec grep -il User1 {} \;
  • 비밀번호 및 그룹 파일을 여러 번 다시 만들었습니다.

mkpasswd -l > /etc/passwd
mkgroup -l > /etc/group
  • User1의 쉘은 /bin/bash입니다(/bin/false 또는 기타 변형이 아님).

User1:*:197609:197121:U-Jack-VAIO\User1,S-1-5-21-2974605114-333831212-2175464639-1001:/home/User1:/bin/bash
User2:*:197610:197121:U-Jack-VAIO\User2,S-1-5-21-2974605114-333831212-2175464639-1002:/home/User2:/bin/bash
  • User1은 Windows에 정상적으로 로그인할 수 있습니다. (compmgmt.msc > 사용자는 비활성화되지 않으며 비밀번호는 만료되지 않습니다.)

  • /etc/passwd 및 /etc/group을 그대로 삭제했습니다.현재 Cygwin에서는 더 이상 필요하지 않습니다..

  • 로컬 사용자 및 그룹에서 User1의 설명이 비어 있음을 확인했습니다(이는 허용되며 /etc/passwd가 존재하지 않을 때 Cygwin이 /etc/passwd 필드를 찾는 대체 장소입니다).

  • "Cygwin Terminal.lnk" 단축키는 User2가 사용하는 단축키와 아무런 문제 없이 동일합니다. 이는 /cygdrive/c/Users/Public/Desktop에 있습니다. ("관리자 권한으로 실행" 확인란을 선택하지 않습니다. 단, User1에게는 관리자 비밀번호를 묻는 메시지가 표시됩니다.)

  • User1의 .bashrc 또는 .bash_profile에는 종료를 유발하는 내용이 없습니다. (다음 글머리 기호를 참조하세요.)

  • User1의 /home/User1 권한은 User2의 권한과 동일합니다. 실제로 /home/User1을 다른 이름으로 이동하고 아무것도 포함하지 않은 새 /home/User1을 만든 다음(동일한 결과), /etc/skel을 복사하고 권한을 chown으로 변경하려고 시도했습니다. - R User1: None(동일) 결과).


drwxr-xr-x+ 1 Admin   None 0 Apr  1 22:07 Admin
drwxr-xr-x+ 1 User1    None 0 Apr  1 21:52 User1
drwxr-xr-x+ 1 User1    None 0 Apr  1 21:56 User1.001
drwxr-xr-x+ 1 User1    None 0 Apr  1 18:05 User1.old
drwxr-xr-x+ 1 User2    None 0 Oct 21 09:36 User2

drwxr-xr-x+ 1 User1  None    0 Apr  1 21:52 .
drwxrwxrwt+ 1 Admin None    0 Apr  2 06:48 ..
-rw-r--r--  1 User1  None 1494 Jan 16 15:07 .bash_profile
-rw-r--r--  1 User1  None 6054 Jan 16 15:07 .bashrc
-rw-r--r--  1 User1  None 1919 Jan 16 15:07 .inputrc
-rw-r--r--  1 User1  None 1236 Jan 16 15:07 .profile
  • compmgmt.msc > 사용자 및 그룹에서 관리자가 아닌 새 User3을 만들고 비밀번호를 설정한 다음 User2처럼 성공적으로 ssh를 사용할 수 있습니다. Cygwin은 /etc/skel.conf에서 User3의 홈을 자동으로 생성합니다. User1의 /home/User1 디렉토리를 삭제하면 SSH를 통해 로그인할 때 자동으로 다시 생성되지 않으며 물론 관리자 셸로 돌아갑니다.

이것이 ssh -vvv User1@localhost가 User2의 모습입니다. 차이점을 확인하실 수 있도록 유효성 검사가 성공한 후에만 해당 부분을 포함시켰습니다.


사용자 1:


debug1: Next authentication method: password
User1@localhost's password:
debug3: send packet: type 50
debug2: we sent a password packet, wait for reply
debug3: receive packet: type 52
debug1: Authentication succeeded (password).
Authenticated to localhost ([::1]:22).
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug3: send packet: type 90
debug1: Requesting [email protected]
debug3: send packet: type 80
debug1: Entering interactive session.
debug1: pledge: network
debug3: receive packet: type 80
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug3: receive packet: type 91
debug2: callback start
debug2: fd 3 setting TCP_NODELAY
debug3: ssh_packet_set_tos: set IPV6_TCLASS 0x10
debug2: client_session2_setup: id 0
debug2: channel 0: request pty-req confirm 1
debug3: send packet: type 98
debug2: channel 0: request shell confirm 1
debug3: send packet: type 98
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 0
debug2: PTY allocation request accepted on channel 0
debug2: channel 0: rcvd adjust 2097152
debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 0
debug2: shell request accepted on channel 0
Last login: Sun Apr  2 06:43:18 2017 from ::1
debug3: receive packet: type 96
debug2: channel 0: rcvd eof
debug2: channel 0: output open -> drain
debug2: channel 0: obuf empty
debug2: channel 0: close_write
debug2: channel 0: output drain -> closed
debug3: receive packet: type 98
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug3: receive packet: type 98
debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0
debug2: channel 0: rcvd eow
debug2: channel 0: close_read
debug2: channel 0: input open -> closed
debug3: receive packet: type 97
debug2: channel 0: rcvd close
debug3: channel 0: will not send data after close
debug2: channel 0: almost dead
debug2: channel 0: gc: notify user
debug2: channel 0: gc: user detached
debug2: channel 0: send close
debug3: send packet: type 97
debug2: channel 0: is dead
debug2: channel 0: garbage collecting
debug1: channel 0: free: client-session, nchannels 1
debug3: channel 0: status: The following connections are open:
  #0 client-session (t4 r0 i3/0 o3/0 fd -1/-1 cc -1)

debug3: send packet: type 1
Connection to localhost closed.
Transferred: sent 2248, received 2868 bytes, in 0.1 seconds
Bytes per second: sent 15979.1, received 20386.1
debug1: Exit status 255

Admin@Jack-VAIO ~
$


사용자 2:


debug1: Next authentication method: password
User2@localhost's password:
debug3: send packet: type 50
debug2: we sent a password packet, wait for reply
debug3: receive packet: type 52
debug1: Authentication succeeded (password).
Authenticated to localhost ([::1]:22).
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug3: send packet: type 90
debug1: Requesting [email protected]
debug3: send packet: type 80
debug1: Entering interactive session.
debug1: pledge: network
debug3: receive packet: type 80
debug1: client_input_global_request: rtype [email protected] want_reply 0
debug3: receive packet: type 91
debug2: callback start
debug2: fd 3 setting TCP_NODELAY
debug3: ssh_packet_set_tos: set IPV6_TCLASS 0x10
debug2: client_session2_setup: id 0
debug2: channel 0: request pty-req confirm 1
debug3: send packet: type 98
debug2: channel 0: request shell confirm 1
debug3: send packet: type 98
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 0
debug2: PTY allocation request accepted on channel 0
debug2: channel 0: rcvd adjust 2097152
debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 0
debug2: shell request accepted on channel 0
Last login: Sat Apr  1 20:56:04 2017 from ::1

User2@Jack-VAIO ~
$
  • 업데이트: 최근 로깅이 활성화된 SSHD 재설치에서 User1로 SSH를 시도할 때 다음과 같은 특정 메시지가 표시됩니다.

setreuid 197609: Operation not permitted
setresuid 197609: Operation not permitted

그래서 거기에 있습니다. 나는 완전히 혼란스러워요. 한 가지 주목할 점은 Windows에서 User1을 삭제하고 다시 생성하는 것은 수년 동안 구성 설정을 지정해 왔고 특히 User1과 User2의 다른 모든 것이 제대로 작동하는 경우 다시 생성하지 않기 때문에 옵션이 아니라는 것입니다. User1은 더 이상 Cygwin 계정에 액세스할 수 없습니다.

나는 그것들을 제거하고 있기 때문에 무엇을 더 확인해야할지에 대한 아이디어가 있습니다.

PS 이 글을 읽어주셔서 감사합니다.

답변1

추가 조사 후 (여기그리고여기) 문제는 Cygwin이 아니라 Windows 10에 있다고 생각하는 경향이 있습니다. 어제 User2의 Windows 계정을 사용하고 UAC 프롬프트 없이 작업 관리자를 시작할 수 있다는 것을 알았을 때 머릿속에 뭔가가 클릭되었습니다. User1이 항상 Windows 8에서 Windows 10으로 업그레이드하라는 메시지를 받았다는 것을 알았습니다(업그레이드는 약 1년이 걸렸지만). 이전에 Win 10 프로모션으로 무료 업그레이드하는 동안). 나는 이것이 Windows 10의 문제라고 생각했고 그것에 대해 많이 생각하지 않았습니다. User2에서 이런 일이 발생하고 있음을 깨닫고 User1의 문제를 해결하기 위한 솔루션을 Google에서 검색했을 때 User1의 Cygwin 문제에 대해 동일한 해결 방법을 사용할 수 있음을 발견했습니다. 처음에 User1의 계정이 어떻게 엉망이 되었는지, 실제로 올바른 방법으로 수정하는 방법에 대해서는 여전히 대답하지 못하지만 이제 User1에 대한 git 변경을 완료할 수 있으므로 이 해결 방법에 만족합니다.

긴 이야기 짧게

해결책:

  • 명령줄(CMD.EXE)을 열고 이 변수를 설정하여 UAC 팝업 표시를 중지합니다.

set __compat_layer=runasinvoker
  • Cygwin을 시작하여 동일한 터미널에서 환경 변수를 설정합니다.

c:\cygwin64\bin\mintty.exe
  • 해당 사용자를 영구적으로 만들고 데스크탑 아이콘을 다시 작동하게 만듭니다.

setx __compat_layer "runasinvoker"
  • 컴퓨터 전체의 모든 사용자에 대해 이 설정을 영구적으로 적용하려면 관리 명령줄을 열고 다음을 수행합니다.

setx /m __compat_layer "runasinvoker"
  • 마지막으로 Cygwin을 수정하지 않고 git에 액세스하려면 "Git Bash"를 설치하십시오.

경고하다:User1 계정은 여전히 ​​기술적으로 손상되었기 때문에 여전히 ssh를 사용하여 로그인할 수는 없지만 최소한 User1로 로컬 Cygwin 터미널에 액세스할 수는 있습니다. 또한 이 해결 방법은 sysdm.cpl GUI를 통해 User1의 Windows 사용자 환경 변수를 수정하는 기능을 수정하지 않지만(여전히 UAC 프롬프트가 표시되고 User1 대신 관리자의 ENV 변수만 표시됨) 이는 이제 Windows 관련 Stack Exchange From입니다. 포럼에 따르면 이것이 Cygwin 문제가 아니라 Windows 계정 문제라는 것을 알고 있습니다. SETX를 사용하면 명령줄에서 사용자 및 기계 ENV 변수를 변경할 수 있습니다.

관련 정보