Назад | Перейти на главную страницу

Как отключить доступ sftp к пользователю с уже отключенным ssh (пользовательская оболочка = / bin / false, но соединение по-прежнему работает с sftp)

В sshd_configпо умолчанию вход разрешен для всех групп и пользователей. Директивы allow / deny обрабатываются в следующем порядке: DenyUsers, AllowUsers, DenyGroups и, наконец, AllowGroups. (находится на странице руководства).

Итак, мне нужно настроить сервер в режиме «черного списка» (все разрешены, затем я четко определяю, кому в доступе может быть отказано).

Есть ли способ сделать наоборот? Я хочу, чтобы, если пользователь не может подключиться к ssh, в sftp-соединении будет отказано, за исключением случаев, когда он соответствует правилу.

Я установил оболочку по умолчанию на /bin/false (поэтому классическое ssh-соединение отключено).

Блокировка пользователя (usermod -L usersftp1) явно мешает пользователю использовать как sftp, так и ssh (что меня устраивает).

Я пытался использовать DenyGroups !sftp директива, запрещающая сопоставление пользователей, отличных от sftp, но usersftp1 (который не принадлежит к группе sftp (основной или дополнительный), но это не сработало.


Я настроил свой сервер для управления доступом к sftp (начиная с Subsystem sftp internal-sftp)

В / etc / passwd строка usersftp1:x:5001:5001::/home/sftp/usersftp1:/bin/false

Соединение ssh не работает (это то, что я хочу), но я могу подключиться через sftp (кроме того, что я еще не разрешил этого пользователя).

Я хочу, чтобы поведение по умолчанию было «соединение не разрешено», если у пользователя есть /bin/false оболочка.

РЕДАКТИРОВАТЬ: дополнительные сведения о конфигурации:

file /etc/passwd:
    usersftp1:x:50001:5001::/home/sftp/usersftp1:/bin/false
file /etc/group:
    usersftp1:x:5001

file /etc/ssh/sshd_config:
    …
    Subsystem sftp internal-sftp -l INFO
    # This is commented, so no rules will be set for user "usersftp1"
    #   Match user usersftp1
    #   X11Forwarding no
    #   ChrootDirectory %h
    #   AllowTcpForwarding no
    #   ForceCommand internal-sftp  

      # This config works as expected
      Match user usersftp2
      X11Forwarding no
      ChrootDirectory %h
      AllowTcpForwarding no
      ForceCommand internal-sftp  

в auth.log, Я вижу, что пользователь использует sftp:

Starting session: subsystem 'sftp' for usersftp1 from xxx.xxx.xxx.xxx port 55552

В этой конфигурации после service ssh restart, пользователи usersftp1 и usersftp2 оба могут подключаться с помощью sftp (помимо того, что 1-й прокомментирован)

Я не думаю, что Match User работает так, как вы думаете.

Соответствие
Вводит условный блок. Если все критерии в строке Match удовлетворены, ключевые слова в следующих строках переопределяют те, которые заданы в глобальном разделе файла конфигурации, до тех пор, пока не появится другая строка Match или не будет конец файла. Если ключевое слово появляется в нескольких удовлетворяемых блоках Match, применяется только первый экземпляр ключевого слова.

Итак, в вашем конкретном случае Подобрать пользователя usersftp2 применяется только к конфигурации usersftp2 и отменяет ее.

Когда ваш usersftp1 подключается, программа sftp запускается для них sshd, и никакие пользовательские конфигурации не применяются.


Если я правильно понимаю ваш вопрос, вы сможете делать с группой все, что хотите.

создать группу, например sftpusers (groupadd ...), а затем добавьте пользователей, которых вы хотите разрешить (usermod -G ...)

Затем настройте sshd, чтобы разрешить sftp только для пользователей в этой группе.

Match Group sftpusers
  # Force the connection to use SFTP
  ForceCommand internal-sftp
  # Disable tunneling, authentication agent, TCP and X11 forwarding.
  PermitTunnel no
  AllowAgentForwarding no
  AllowTcpForwarding no
  X11Forwarding no