Я создал пользователя с chroot, у которого есть доступ только к 1 каталогу через sshd sftp, чтобы один из моих коллег мог загружать определенные типы файлов. Затем я собираюсь создать способ запускать команду через HTTP, которая будет запускать долгий процесс с файлами, и мне нужно отключить sftp во время выполнения процесса.
Есть ли команда, которую я могу использовать для отключения sftp без необходимости изменять файл sshd_config и перезагружать службу? Я думал сделать блокировку порта, но мне все еще нужен доступ к ssh.
Я читал об отключении учетной записи пользователя с помощью passwd -l
, но если он уже вошел в систему через sftp, он все равно разрешит изменение.
Какие-либо предложения?
Редактировать:
После еще нескольких попыток я обнаружил, что могу сделать ps -axl | grep $user@notty
и отправить kill -9
к PID, чтобы отключить пользователя от текущего сеанса, а затем либо passwd -l username
чтобы предотвратить повторный вход пользователя в систему, или как предложил Мартин удалить символическую ссылку на двоичный файл sftp-server.
Но в конце концов я последовал совету Майка и просто переместил файлы в другое место, вместо того, чтобы запускать процесс в каталоге chroot.
Вы можете временно удалить права на запись в папку.
Если вы хотите полностью отключить SFTP, вы можете создать символическую ссылку на sftp-server
двоичный. И настройте пользователя на использование этой символической ссылки как двоичного файла SFTP. Затем вы можете просто временно удалить символическую ссылку, что фактически отключит SFTP.
Match User theuser
ForceCommand /path/to/sftp/symlink
Обратите внимание, что отключение sftp в масштабе всей системы, вероятно, неидеально, поскольку тогда sftp становится полностью недоступным для всех других возможных задач (как с использованием текущего дизайна, так и с использованием будущего дизайна). Лучшая конструкция (сохраняющая долгосрочную гибкость), вероятно, состоит в том, чтобы контролировать разрешения на «запись» определенных данных (как отмечалось в первом решении Лучший ответ Мартина Прикрыла с несколькими решениями).
Я предпочитаю не дублировать (или пытаться дополнить) лучший ответ с несколькими решениями Мартина Прикрыла, который не включает изменение файла sshd_config или перезагрузку службы.
Однако для просвещения / знакомства поделюсь другим вариантом.
без необходимости изменять файл sshd_config и перезагружать службу?
Вы можете изменить файл sshd_config, но не перезагружать службу. (Итак, в соответствии с просьбой, вы не делаете и то и другое.)
Затем отправьте SIGHUP родительской службе sshd. (Убедитесь, что это родительский процесс: SIGHUP при вводе другой службы sshd может убить соединение.) Самый простой способ определить, какой процесс является родительским, - это использовать файл PID.
например, если sshd создает этот файл pid:
sudo kill -HUP $( sudo cat /var/run/sshd.pid )
(Имя / расположение файла PID по умолчанию может отличаться в зависимости от операционной системы.)
SIGHUP Если указать родительский объект, sshd перезагрузит файл конфигурации (потому что именно так был разработан sshd). Обратите внимание, что это может не остановить какие-либо текущие сеансы sftp (и изменение двоичного файла на диске также может не сделать этого), поэтому убедитесь, что это обработано, прежде чем переходить к вашему чувствительному процессу не может-иметь-sftp-running.
Вы можете перенастроить службы межсетевого экрана, чтобы заблокировать используемые порты sftp.