В 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