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

Как я могу временно отключить sftp, не перезагружая службу?

Я создал пользователя с 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.