Чому ssh-host-config створює двох користувачів у Cygwin в Windows 8.1?


12

Намагаючись вирішити деякі проблеми із використанням Cygwin + SSH в Windows 8.1, я хотів би знати, чому 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" здається прихованим. Тож мені залишається висновок, що мені доведеться додати ще 3-й обліковий запис, щоб мати можливість правильно використовувати SSH, які здаються досить божевільними!


EDIT-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. Чому цей пароль має термін придатності?

EDIT-2 : Не маючи можливості пройти до списку розробників Cygwin, мені довелося самостійно провести додаткове розслідування. Поки що у мене немає відповіді на питання 1, але є кілька інших проблем зі скриптом ssh-host-config, який використовується для налаштування. Підсумок полягає в тому, що ви завжди можете видалити як sshd & cyg_server акаунти, так і налаштувати один власний обліковий запис адміністратора, використовуючи їх параметри як орієнтири.

Питання 2 : У Windows 8.1 встановлено термін дії пароля за замовчуванням на 42 дні. Це потрібно змінити або вимкнути, використовуючи звичайні інструменти Windows (інтерфейс користувача, WMIC, мережевий користувач тощо)

Відповіді:


4

Оновлення 2019 року: ця відповідь і питання застаріли. Дивіться відповідь Білла Стеварта.

З 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. Один непривілейований рахунок.

Сценарій налаштування пояснює, що звичайний обліковий запис SYSTEM не має setuidпривілеїв, тому необхідність додаткового привілейованого облікового запису.


Я приймаю це як відповідь, хоча це трохи банально, і мені хотілося б, щоб хтось відповідав на мої інші 2 запитання.
not2qubit

1
Дякую. Я просто не знав відповіді на ці підпитання, але хотів поділитися тим, що знав.
Dan Garthwaite

Чи зламається ssh на Windows 8.1 через 42 дні?
Dan Garthwaite

4

Щодо того, чому ssh-host-configстворює два облікові записи користувачів, здебільшого відповідає Дан. Детальніше про те, чому потрібен окремий обліковий запис, setuidможна знайти тут, це складний процес .

Що стосується вашого першого питання, я вважаю, що він також є типовими за замовчуванням, як, наприклад, термін дії пароля - у /usr/share/csih/cygwin-service-installation-helper, використовуваний ssh-host-config, користувач створюється (за допомогою команди net 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 не вказує пароль і не є активним (можливо, це змушує призначати пароль, якщо / коли активовано акаунт). Якщо ви хочете дізнатися точні деталі, я, мабуть, спробую створити більше подібних облікових записів із закінченням терміну дії / вказівкою пароля та побаченням того, що відбувається.


1

Оригінальний відповідь

Окремий відключений sshdобліковий запис фактично не використовується в Cygwin (за одним винятком; див. Нижче). Я запитав про це у списку розсилки Cygwin:

Чи все-таки потрібен обліковий запис користувача-інваліда sshd?

Корінна Віншен (керівник Cygwin) відповіла наступним чином:

Ні, насправді це не так. Цього дня сервер sshd перевіряє, чи слід використовувати середовище privsep chrrot [sic] і чи запускається процес під "root: root". Це ніколи не відповідає Cygwin, щоб ми могли скинути вимогу користувача sshd.

(Див. Https://cygwin.com/ml/cygwin/2019-01/msg00120.html )

Оновлення Що стосується лише sftp

Сказане вище правильно, оскільки sshdобліковий запис суворо не вимагається. Єдиний раз вам це все одно знадобиться, якщо ви хочете використовувати ChrootDirectoryналаштування, sshd_configщоб обмежити обліковий запис лише SFTP.

FWIW, я створив пакет, який забезпечує простий у користуванні інсталятор, який налаштовує Cygwin версію OpenSSH (та ще пару інших інструментів, у тому числі rsync). Це на GitHub, якщо когось цікавить:

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

Документація в пакеті описує обставини, в яких використовується sshdобліковий запис.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.