Как я могу временно отключить sftp без перезагрузки сервиса?
Я настроил пользователя с chroot, который имеет доступ только к 1 каталогу через sftd sshd, чтобы один из моих коллег мог загружать определенные типы файлов. Затем я собираюсь найти способ запустить команду через HTTP, которая будет запускать длинный процесс над файлами, и мне нужно отключить sftp во время выполнения процесса.
Есть ли команда, которую я могу использовать, чтобы отключить sftp без необходимости изменения файла sshd_config и перезагрузки службы? Я думал о блокировке портов, но мне все еще нужен доступ к SSH.
Я читал об отключении учетной записи пользователя с passwd -l
, но если он уже вошел в систему через sftp, он все равно разрешит модификацию.
Какие-либо предложения?
Редактировать:
После еще нескольких размышлений я узнал, что могу сделать ps -axl | grep $user@notty
и отправить kill -9
в PID, чтобы отключить пользователя от текущего сеанса, а затем либо сделать passwd -l username
чтобы пользователь не мог снова войти в систему или, как предложил Мартин, удалите символическую ссылку на двоичный файл sftp-server.
Но в итоге я воспользовался советом Майка и просто переместил файлы куда-то еще, вместо того, чтобы запустить процесс в каталоге chroot.
3 ответа
Вы можете временно удалить разрешения на запись в папку.
Если вы хотите полностью отключить 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 (и изменение двоичного файла на диске также может этого не сделать), поэтому убедитесь, что это обработано, прежде чем переходить к чувствительному процессу "not-have-sftp-running".
Вы можете перенастроить службы брандмауэра, чтобы заблокировать используемые порты sftp.