Я пытаюсь защитить исходящий сервер с помощью решения Google 2FA.
На данный момент я сначала настраиваю все на локальной машине Vagrant, и как только все заработает, как задумано, я запускаю ее как плейбук Ansible на удаленной исходящей машине.
Я настроил /etc/ssh/sshd_config
вот так:
Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 1024
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin without-password
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication yes
PasswordAuthentication no
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes
Match User rescue
AuthenticationMethods publickey
Match Group gauth
AuthenticationMethods publickey,keyboard-interactive
и /etc/pam.d/sshd
вот так:
auth required pam_google_authenticator.so nullok
account required pam_nologin.so
@include common-account
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
session required pam_loginuid.so
session optional pam_keyinit.so force revoke
@include common-session
session optional pam_motd.so motd=/run/motd.dynamic noupdate
session optional pam_motd.so # [1]
session optional pam_mail.so standard noenv # [1]
session required pam_limits.so
session required pam_env.so # [1]
session required pam_env.so user_readenv=1 envfile=/etc/default/locale
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
@include common-password
По какой-то причине пользователи, не входящие в gauth
group могут войти в систему, вообще не вводя пароль, при просмотре журнала я вижу следующие строки:
Jun 15 13:35:57 vagrant-ubuntu-trusty-64 sshd[9836]: Accepted keyboard-interactive/pam for ubuntu from 10.0.2.2 port 55495 ssh2
Jun 15 13:35:57 vagrant-ubuntu-trusty-64 sshd[9836]: pam_unix(sshd:session): session opened for user ubuntu by (uid=0)
Поскольку это бродячая машина, важно отметить, что когда я подключаюсь к машине для тестирования, я запускаю:
ssh localhost -p 2222 -l username
и нет
vagrant ssh machine_name
Я также пробовал редактировать /etc/ssh/sshd_config
и измените директиву PermitRootLogin с «без пароля» на «нет», но безрезультатно.
Я все еще могу автоматически входить в систему без ввода пароля.
Когда я удаляю «nullok» из строки auth в pam, тогда ни один пользователь не может подключиться вообще, и появляется сообщение об ошибке:
Permission denied (publickey,keyboard-interactive).
Еще одна вещь, о которой стоит упомянуть, - это то, что между моей хост-машиной и моей бродячей машиной не происходил обмен ssh-ключами.
По какой-то причине пользователи, которые не являются членами группы gauth, могут войти в систему, вообще не вводя пароль.
Вы удалили из стека PAM @include common-auth
строка в начале, которая заботится о нормальной аутентификации. Если я прав, PAM проверяет все механизмы аутентификации в стеке PAM, и если один из них "разрешает" соединение (pam_google_authenticator.so nullok
очевидно, делает), это позволяет соединение. Это выходит за рамки openssh, чтобы узнать, как аутентификация PAM прошла успешно.
Я также пробовал редактировать
/etc/ssh/sshd_config
и отредактируйтеPermitRootLogin
указание вместо "без пароля" на "нет", но безрезультатно.
Ты пытался root
пользователь? Это следует отрицать.
Когда я удаляю "nullok" из строки auth в pam, тогда ни один пользователь не может подключиться вообще
В этом случае единственным методом аутентификации PAM был pam_google_authenticator.so
(с флагом required
) и если это не удалось. Вы явно отвергнуты.
Однако в этом случае должно работать использование открытого ключа.