ssh-host-config가 Windows 8.1의 Cygwin에서 두 명의 사용자를 작성하는 이유는 무엇입니까? However, this requires a non-privileged

Windows 8.1에서 Cygwin + SSH 사용과 관련된 일부 문제를 해결하려고 할 때 ssh-host-config스크립트가 OpenSSH를 처음부터 구성 하는 두 개의 새 계정을 만드는 이유를 알고 싶습니다 . (필요합니까?)

기본 선택 + 권한 에스컬레이션 및 서비스 설치를 사용할 때 두 계정은 다음 cyg_server과 같습니다 sshd. 첫 번째는 Cygwin SSHd 서비스를 시작하는 데만 사용된다는 것을 이해하지만 두 번째 서비스의 기능을 이해하지 못합니다. Cygwin 자료실을 검색 한 결과 개발자의 설명은 “그것이 그렇게 설계 되었기 때문”이었습니다. 실제 로그인에 사용하지 않는 것이 좋습니다.

내 설치는 다음과 같습니다.

-----------------------------------------------------------
ssh-keygen: generating new host keys: RSA1 RSA DSA ECDSA ED25519
*** Info: Creating default /etc/ssh_config file
*** Info: Creating default /etc/sshd_config file
*** Info: Privilege separation is set to yes by default since OpenSSH 3.3.
*** Info: However, this requires a non-privileged account called 'sshd'.
*** Info: For more info on privilege separation read /usr/share/doc/openssh/README.privsep.
*** Query: Should privilege separation be used? (yes/no) yes
*** Info: Note that creating a new user requires that the current account have
*** Info: Administrator privileges.  Should this script attempt to create a
*** Query: new local account 'sshd'? (yes/no) yes
*** Info: Updating /etc/sshd_config file

*** Query: Do you want to install sshd as a service?
*** Query: (Say "no" if it is already installed as a service) (yes/no) yes
*** Query: Enter the value of CYGWIN for the daemon: []
*** Info: On Windows Server 2003, Windows Vista, and above, the
*** Info: SYSTEM account cannot setuid to other users -- a capability
*** Info: sshd requires.  You need to have or to create a privileged
*** Info: account.  This script will help you do so.

*** Info: You appear to be running Windows XP 64bit, Windows 2003 Server,
*** Info: or later.  On these systems, it's not possible to use the LocalSystem
*** Info: account for services that can change the user id without an
*** Info: explicit password (such as passwordless logins [e.g. public key
*** Info: authentication] via sshd).

*** Info: If you want to enable that functionality, it's required to create
*** Info: a new account with special privileges (unless a similar account
*** Info: already exists). This account is then used to run these special
*** Info: servers.

*** Info: Note that creating a new user requires that the current account
*** Info: have Administrator privileges itself.

*** Info: No privileged account could be found.

*** Info: This script plans to use 'cyg_server'.
*** Info: 'cyg_server' will only be used by registered services.
*** Query: Do you want to use a different name? (yes/no) no
*** Query: Create new privileged user account 'cyg_server'? (yes/no) yes
*** Info: Please enter a password for new user cyg_server.  Please be sure
*** Info: that this password matches the password rules given on your system.
*** Info: Entering no password will exit the configuration.
*** Query: Please enter the password:
*** Query: Reenter:

*** Info: User 'cyg_server' has been created with password 'XXXXXXXXXX'.
*** Info: If you change the password, please remember also to change the
*** Info: password for the installed services which use (or will soon use)
*** Info: the 'cyg_server' account.

*** Info: Also keep in mind that the user 'cyg_server' needs read permissions
*** Info: on all users' relevant files for the services running as 'cyg_server'.
*** Info: In particular, for the sshd server all users' .ssh/authorized_keys
*** Info: files must have appropriate permissions to allow public key
*** Info: authentication. (Re-)running ssh-user-config for each user will set
*** Info: these permissions correctly. [Similar restrictions apply, for
*** Info: instance, for .rhosts files if the rshd server is running, etc].


*** Info: The sshd service has been installed under the 'cyg_server'
*** Info: account.  To start the service now, call `net start sshd' or
*** Info: `cygrunsrv -S sshd'.  Otherwise, it will start automatically
*** Info: after the next reboot.

*** Info: Host configuration finished. Have fun!
-----------------------------------------------------------

또한 ‘cyg_server’는 눈에 보이는 계정으로 Windows 로그인에 사용할 수 있지만 ‘sshd’는 숨겨져 있습니다. 따라서 SSH를 올바르게 사용하려면 또 다른 세 번째 계정을 추가해야한다는 결론에 도달했습니다.


편집 -1 : sshd 계정에는 설치 후 40 일로 설정된 암호 만료 날짜와 암호 ( WMIC 에 따름 )가 있습니다. (ssh 설정 중에이 계정의 비밀번호를 입력하라는 요청을받은 적이 없습니다.)

하기 : wmic useraccount get AccountType,...,Status:

AccountType  Disabled  Lockout  Name           PasswordChangeable  PasswordExpires  PasswordRequired  Status
512          FALSE     FALSE    cyg_server     TRUE                FALSE            TRUE              OK
512          TRUE      FALSE    sshd           TRUE                TRUE             TRUE              Degraded

그리고 net user sshd:

User name                    sshd
Full Name                    sshd privsep
Comment
User's comment
Country/region code          000 (System Default)
Account active               No
Account expires              Never
Password last set            2014-03-01 23:20:19
Password expires             2014-04-12 23:20:19
Password changeable          2014-03-01 23:20:19
Password required            Yes
User may change password     Yes
Workstations allowed         All
Logon script
User profile
Home directory               C:\cygwin64\var\empty
Last logon                   Never
Logon hours allowed          All
Local Group Memberships      *Users
Global Group memberships     *None
The command completed successfully.

따라서 이것에 대한 두 가지 질문이 더 있습니다.

  1. 비밀번호는 무엇이며 사용자에게 왜 이에 대해 알리지 않았습니까?
  2. 이 비밀번호에 만료 날짜가있는 이유는 무엇입니까?

편집 2 : Cygwin 개발자 목록을 볼 수 없으므로 스스로 더 조사해야했습니다. 지금까지 질문 1에 대한 답변은 없지만 설정에 사용되는 ssh-host-config 스크립트와 관련된 몇 가지 다른 문제가 있습니다. 결론적으로, 항상 sshd 및 cyg_server 계정을 모두 제거하고 해당 설정을 참조로 사용하여 하나의 적절한 관리자 계정을 설정할 수 있습니다.

질문 2 : Windows 8.1의 기본 암호 만료는 42 일로 설정되어 있습니다. 일반적인 Windows 도구 (UI, WMIC, net user 등)를 사용하여 변경하거나 비활성화해야합니다.



답변

2019 업데이트 :이 답변과 질문은 더 이상 사용되지 않습니다. Bill_Stewart의 답변을 참조하십시오.

에서 man 5 sshd_config

 UsePrivilegeSeparation
     Specifies whether sshd separates privileges by creating an
     unprivileged child process to deal with incoming network traffic.
     After successful authentication, another process will be created
     that has the privilege of the authenticated user.  The goal of
     privilege separation is to prevent privilege escalation by con-
     taining any corruption within the unprivileged processes.  The
     default is "yes".

따라서 sshd에는 두 가지 유형의 계정이 필요합니다.

  1. 능력을 가진 사람 setuid.
  2. 권한이없는 계정 1 개

설치 스크립트는 일반적인 SYSTEM 계정에 setuid권한 이 없으므로 추가 권한있는 계정이 필요하다고 설명합니다.


답변

ssh-host-config두 개의 사용자 계정을 만드는 이유 는 Dan이 주로 대답합니다. 더 많은 별도의 계정이 필요한 이유에 대한 정보는 다음의 제품에 setuid찾을 수 있습니다 그것은 복잡한 과정이다, 여기 .

첫 번째 하위 질문 /usr/share/csih/cygwin-service-installation-helper에 대해서는 ssh-host-config에서 사용 하는 암호 만료와 같은 기본값도 사용자가 다음과 같이 생성됩니다 (Windows net 명령 사용). 여기서 ${unpriv_user}이름은 sshd를 선택 ${dos_var_empty}했으며 Windows / DOS 스타일 경로는 /var/empty다음과 같습니다.

net user "${unpriv_user}" /add /fullname:"${unpriv_user} privsep" \
"/homedir:${dos_var_empty}" /active:no

Microsoft의 문서에 따르면 /passwordreq암호가 필요한 경우에 대한 기본값 은 예이며 Windows가 일부 기본 암호를 지정하는 것으로 보입니다 (아마도 암호가 지정되지 않았기 때문에, 특히 /active:no).

그리고 두 번째 편집에서 말한 것처럼 두 번째 하위 질문의 경우 적어도 Windows 8.1 Pro의 기본값은 42 일 후에 비밀번호 만료 인 것 같습니다. 비록 내 계정이나 새 cyg_server계정 에서 확실히 활성화되어 있지 않습니다 . 이것은 아마도 같은 조합 때문일 것입니다- cyg_server암호를 지정하고 활성화되어 있지만 sshd는 암호를 지정하지 않고 활성화되어 있지 않습니다 (아마도 이것은 계정이 활성화 된 경우 암호를 강제로 지정하는 것입니다). 정확한 세부 정보를 알고 싶다면 암호 만료 / 지정 및 암호 변경으로 더 유사한 계정을 만들려고합니다.


답변

원래 답변

sshdCygwin에서는 별도의 비활성화 된 계정이 실제로 사용되지 않습니다 (한 가지 예외가 있지만 아래 참조). Cygwin 메일 링리스트에서 이에 대해 물었습니다.

sshd 비활성화 된 사용자 계정이 여전히 필요합니까?

Corinna Vinschen (Cygwin 관리자)은 다음과 같이 응답했습니다.

아니요, 실제로는 그렇지 않습니다. 요즘 sshd 서버는 privsep chrrot [sic] 환경을 사용해야하며 프로세스가 “root : root”에서 시작되는지 확인합니다. Cygwin에서는 결코 일치하지 않으므로 sshd 사용자 요구 사항을 삭제할 수 있습니다.

( https://cygwin.com/ml/cygwin/2019-01/msg00120.html 참조 )

sftp 전용 관련 업데이트

위의 내용은 sshd계정이 꼭 필요한 것은 아닙니다. 계정을 SFTP로만 제한 하기 위해 ChrootDirectory설정 을 사용하려는 경우에만 필요할 수 있습니다 sshd_config.

FWIW에서는 Cygwin 버전의 OpenSSH (및를 포함한 몇 가지 다른 도구 rsync) 를 구성하는 사용하기 쉬운 설치 프로그램을 제공하는 패키지를 만들었습니다 . 누군가 관심이 있다면 GitHub에 있습니다.

https://github.com/Bill-Stewart/CygSSH

패키지의 설명서는 sshd계정이 사용되는 환경을 설명합니다 .


답변