Начнём с того, что если Вы озаботились использованием SFTP протокола — Вы на правильном пути!
Дело в том, что в отличии от привычного всем FTP протокола, который работает в большинстве случаев без шифрования передаваемых данных, SFTP (SSH file transfer protocol) работает поверх надёжного и безопасного (зашифрованного) SSH соединения. Что полностью исключает возможность кражи пароля в момент авторизации на удалённом сервере. Есть и другие плюсы у этого протокола, но это повод для отдельной статьи.
Самый универсальный способ соединиться с сервером по SFTP протоколу — попросить провайдера включить для Вашего аккаунта доступ к серверу по ssh и прислать данные для этого подключения. Далее просто указываем эти данные в профиле подключения в WinSCP клиенте. Примерно так:
Если SSH доступ к серверу у Вас включён, в 99% случаев WinSCP будет работать. Надо сказать, что данный подход позволит решить проблемы подключения и в других SFTP клиентах (Filezilla, CyberDuck, FireFTP, GFTP, Chrome sFTP Client и прочих).
Если не получилось подключиться, напишите в нашу службу поддержки (онлайн чат справа внизу). Всем читателям этой статьи наши специалисты будут рады помочь, даже если Ваш сайт находится на другом хостинге.
- Печать
Страницы: [1] Вниз
Тема: Не могу подключиться по SFTP (Прочитано 13820 раз)
0 Пользователей и 1 Гость просматривают эту тему.
neonox
Доброго времени суток. Прошу помочь разобраться в проблеме.
Дано: VPS – Ubuntu Server 12.04SSH серверПользователь которому нужно получить доступ к серверу по SFTP
Требуется подключиться к серверу используя WinSCP по протоколу SFTP. При попытке подключиться получаю ошибку
Cannot initialize SFTP protocol. Is the host running a SFTP server?
Вот конфиг sshd_config
AnrDaemon
И показывайте найтройки WinSCP.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.
fisher74
видимо параноя требует порт 2222, так что надо просто перепроверить что в настройках соответствие в WinSCPИ ещё один вопрос. А ssh работает? пробовали подключатьсячто показывает телнет
telnet ip-server 2222
Принимаю благодарности в WMR и WMZ на кошельки:R158160676909 и Z313280060764
ArcFi
И на самом сервере проверяйте:
neonox
Изменил порт на 22, т.к. и через SSH не смог подключиться. Через SSH подключаюсь нормально, но через WinSCP так и не могу подключиться. Ошибка происходит на этапе ввода пароля пользователя
ArcFi
От меня пишет, что порт открыт:
$ nmap 146.185.166.31 -p22 -sV | grep ^22
22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1.1 (Ubuntu Linux; protocol 2.0)
AnrDaemon
через WinSCP так и не могу подключиться. Ошибка происходит на этапе ввода пароля пользователя
Тогда, вероятно, проблема не в настройках?
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.
neonox
Тогда, вероятно, проблема не в настройках?
Собственно, какая картина сейчас. Подключиться под рутом получается. При попытке подключиться одним из указанных пользователей через Putty после ввода пароль программа вылетает. WinSCP так же не подключается.
Вот что в логах, при попытке подключиться через Putty
Пользователь решил продолжить мысль 27 Октября 2013, 16:06:33:
Всем спасибо за помощь. Решил проблему. Дело было в оболочке. Вместо /bin/bash была /bin/date.
« Последнее редактирование: 27 Октября 2013, 16:06:33 от neonox »
fisher74
Подключиться под рутом получается.
Эммм, так ведь
Вот конфиг sshd_config
..
PermitRootLogin no
Или уже и до этого параметра дошли в процессе изыскания?Не забудьте вернуть назад
Дело было в оболочке. Вместо /bin/bash была /bin/date.
Принимаю благодарности в WMR и WMZ на кошельки:R158160676909 и Z313280060764
neonox
Или уже и до этого параметра дошли в процессе изыскания?
Не забудьте вернуть назад
Да, пробовал, проверял. Уже вернул обратно.
Этож как надо изголиться, чтобы /bin/date в качестве оболочки выставить….?
создавал пользователей через ISPmanager
- Печать
Страницы: [1] Вверх
Я пытаюсь использовать SFTP с Filezilla, но он не может подключиться к серверу, и я думаю, что это связано с правилами брандмауэра?
Я могу SSH абсолютно нормально. Порт для SSH – 6128. Может кто-нибудь сказать мне, какие изменения я должен сделать, чтобы разрешить FTP-соединение через SSH, учитывая, что SSH уже работает?
(Вот мои правила IPtables)
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere loopback/8 reject-with icmp-port-unreachable
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT udp -- anywhere anywhere udp dpt:9987
ACCEPT tcp -- anywhere anywhere tcp dpt:10011
ACCEPT tcp -- anywhere anywhere tcp dpt:30033
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:6128
ACCEPT icmp -- anywhere anywhere icmp echo-request
LOG all -- anywhere anywhere limit: avg 5/min burst 5 LOG level debug prefix "iptables denied: "
DROP all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
Chain fail2ban-ssh (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Ответы:
Чтобы получить доступ к вашему sftp с других хостов, пожалуйста, убедитесь, что следующее установлено и настроено правильно.
- Установленные серверы OpenSSH
- Настроил sshd_config
- PubkeyAuthentication да
- Подсистема sftp internal-sftp
-
Добавил ваш открытый ключ в ~ / .ssh / authorized_keys
-
Запустите сервер ssh с открытым портом 22 / TCP
# /etc/init.d/sshd start # iptables -I INPUT -j ACCEPT -p tcp --dport 22
В моем случае пользователь имел zshверхнюю часть своего файла .bashrc, чтобы он мог перейти в оболочку zsh вместо bash.
Ваше антивирусное программное обеспечение также может вызвать это. Мы столкнулись с этим недавно. sshчерез PuTTY работал нормально, но WinSCP не смог подключиться. Начал работать после настройки исключения в Антивирусе.
Если вы используете filezilla, мне помог следующий ответ:
В Filezilla выберите в меню «Правка» -> «Настройки», на левой панели – «Соединение» -> «SFTP». На правой стороне убедитесь, что у вас есть правильный файл закрытого ключа, или добавьте, если отсутствует правильная запись.
Мой ответ на аналогичный вопрос по serverfault :
Я просто столкнулся с этой проблемой (специально для sftp, но не для ssh, где я мог подключиться без проблем), и ни одно из решений здесь не помогло мне. В моем случае это было связано с слишком большим количеством ключей ssh (IdentityFile) ~/.ssh/. Кажется, что, когда у вас нет записи хоста ~/.ssh/configдля хоста, к которому вы пытаетесь подключиться с помощью правильного ключа, он просто отправляет все ваши ключи один за другим. У меня было более 6 ключей, и, конечно же, по умолчанию MaxAuthTriesустановлено 6 (по крайней мере, в Ubuntu).
Решением было отредактировать сервер /etc/ssh/sshd_configи увеличить его MaxAuthTries. Я установил мой на 10.
#MaxAuthTries 6
MaxAuthTries 10
Почему есть два способа настройки SFTP с OpenSSH и когда использовать какой? Есть ли разница между ними?
Я имею в виду, что первый использует lib из OpenSSH, а второй говорит «использовать внутреннее», так что это тоже OpenSSH?
Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Ответы:
Оба sftp-serverи internal-sftpявляются частью OpenSSH. sftp-serverэто отдельный бинарный файл internal-sftpэто просто ключевое слово конфигурации, которое указывает sshdиспользовать встроенный код сервера SFTP sshdвместо запуска другого процесса (обычно sftp-server).
С функциональной точки зрения sftp-serverи internal-sftpпрактически идентичны. Они построены из одного и того же исходного кода.
Основным преимуществом internal-sftpявляется то, что он не требует поддержки файлов при использовании с ChrootDirectoryдирективой .
Цитаты из sshd_config(5)справочной страницы :
-
Для Subsystemдирективы :
Команда sftp-serverреализует подсистему передачи файлов SFTP.
Альтернативно, имя internal-sftpреализует внутрипроцессный SFTP-сервер. Это может упростить использование конфигурации, ChrootDirectoryчтобы принудительно установить другой корень файловой системы на клиентах.
-
Для ForceCommandдирективы :
Указание команды internal-sftpзаставит использовать внутрипроцессный SFTP-сервер, который не требует файлов поддержки при использовании с ChrootDirectory.
-
Для ChrootDirectoryдирективы :
Он ChrootDirectoryдолжен содержать необходимые файлы и каталоги для поддержки сеанса пользователя. Для интерактивного сеанса для этого требуется , по меньшей мере оболочка, как правило sh, и основные /devузлы , такие как null, zero, stdin, stdout, stderr, и ttyустройство. Для сеансов передачи файлов с использованием SFTP дополнительная настройка среды не требуется, если используется внутрипроцессный sftp-сервер, хотя /dev/logв некоторых операционных системах сеансы, использующие ведение журнала, могут потребоваться внутри каталога chroot ( sftp-serverподробности см. ).
Еще одним преимуществом internal-sftpявляется производительность, так как для этого не нужно запускать новый подпроцесс.
Он internal-sftpбыл добавлен намного позже (OpenSSH 4.9p1 в 2008 году?), Чем автономный sftp-serverбинарный файл, но сейчас он используется по умолчанию.
Я считаю, что нет причин использовать sftp-serverдля новых установок.
Может показаться, что его sshdможно автоматически использовать internal-sftp, когда он встречается sftp-server, так как функциональность идентична и internal-sftpимеет даже вышеуказанные преимущества. Но есть крайние случаи, когда есть различия.
-
Администратор может полагаться на конфигурацию оболочки входа, чтобы предотвратить вход определенных пользователей. Переключение на режим internal-sftpобойдет ограничение, так как оболочка входа больше не используется.
-
Используя sftp-serverбинарный файл (будучи автономным процессом), вы можете использовать некоторые хаки, такие как запуск SFTPsudo .
-
Для SSH-1 (если кто-то все еще его использует) Subsystemдиректива вообще не задействована. SFTP-клиент, использующий SSH-1, в явном виде сообщает серверу, какой двоичный файл должен выполнять сервер. Таким образом, устаревшие SFTP-клиенты SSH-1 имеют sftp-serverжестко запрограммированное имя.
Вы можете заблокировать авторизованный ключ к внешнему sftp-серверу.
command = "/ usr / libexec / openssh / sftp-server" ssh-rsa AAAA… == user@host.com
Когда вы это сделаете, ваш пользователь может sftp, но не может scp или ssh:
Хост $ sftp: / etc / group / tmp Подключение к хосту ... Извлечение / etc / group в / tmp / group / etc / group 100% 870 0,9 КБ / с 00:00
Попытка сделать что-нибудь еще будет просто зависать:
$ scp host: / etc / group / tmp Убит по сигналу 2. $ ssh host uptime Убит по сигналу 2.
Увы, нет простого способа заблокировать ключ в chroot, если sshd_config не изменен. Это было бы здорово, если бы пользователь мог обходиться без вмешательства системного администратора.
Моим Сервером является Ubuntu 14.04.5 LTS, и я могу соединиться через SSH с PuTTY, но я не могу соединиться через WinSCP.
Когда я пытаюсь соединиться через WinSCP, он дает ошибку:
Соединение было неожиданно закрыто. сервер отправил статус выхода команды 127
Ниже файл журнала
. 2019-01-23 15:40:22.694 --------------------------------------------------------------------------
. 2019-01-23 15:40:22.694 WinSCP Version 5.13.7 (Build 9125) (OS 6.1.7601 Service Pack 1 - Windows 7 Professional)
. 2019-01-23 15:40:22.694 Configuration: HKCU\Software\Martin Prikryl\WinSCP 2\
. 2019-01-23 15:40:22.695 Log level: Normal
. 2019-01-23 15:40:22.695 Local account: D146\Subhash
. 2019-01-23 15:40:22.695 Working directory: C:\Program Files (x86)\WinSCP
. 2019-01-23 15:40:22.695 Process ID: 6672
. 2019-01-23 15:40:22.696 Command-line: "C:\Program Files (x86)\WinSCP\WinSCP.exe"
. 2019-01-23 15:40:22.696 Time zone: Current: GMT+5:30 (India Standard Time), No DST
. 2019-01-23 15:40:22.696 Login time: 23 January 2019 PM 3:40:22
. 2019-01-23 15:40:22.696 --------------------------------------------------------------------------
. 2019-01-23 15:40:22.696 Session name: winscp testing (Site)
. 2019-01-23 15:40:22.696 Host name: 71.6.186.24 (Port: 22)
. 2019-01-23 15:40:22.697 User name: root (Password: Yes, Key file: No, Passphrase: No)
. 2019-01-23 15:40:22.697 Tunnel: No
. 2019-01-23 15:40:22.697 Transfer Protocol: SFTP
. 2019-01-23 15:40:22.697 Ping type: Off, Ping interval: 30 sec; Timeout: 15 sec
. 2019-01-23 15:40:22.697 Disable Nagle: No
. 2019-01-23 15:40:22.697 Proxy: None
. 2019-01-23 15:40:22.697 Send buffer: 262144
. 2019-01-23 15:40:22.697 SSH protocol version: 2; Compression: No
. 2019-01-23 15:40:22.697 Bypass authentication: No
. 2019-01-23 15:40:22.697 Try agent: Yes; Agent forwarding: No; TIS/CryptoCard: No; KI: Yes; GSSAPI: Yes
. 2019-01-23 15:40:22.697 GSSAPI: Forwarding: No; Libs: gssapi32,sspi,custom; Custom:
. 2019-01-23 15:40:22.697 Ciphers: aes,chacha20,blowfish,3des,WARN,arcfour,des; Ssh2DES: No
. 2019-01-23 15:40:22.697 KEX: ecdh,dh-gex-sha1,dh-group14-sha1,rsa,WARN,dh-group1-sha1
. 2019-01-23 15:40:22.697 SSH Bugs: Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto
. 2019-01-23 15:40:22.697 Simple channel: Yes
. 2019-01-23 15:40:22.697 Return code variable: Autodetect; Lookup user groups: Auto
. 2019-01-23 15:40:22.697 Shell: default
. 2019-01-23 15:40:22.697 EOL: LF, UTF: Auto
. 2019-01-23 15:40:22.697 Clear aliases: Yes, Unset nat.vars: Yes, Resolve symlinks: Yes; Follow directory symlinks: No
. 2019-01-23 15:40:22.697 LS: ls -la, Ign LS warn: Yes, Scp1 Comp: No
. 2019-01-23 15:40:22.697 SFTP Bugs: Auto,Auto
. 2019-01-23 15:40:22.697 SFTP Server: default
. 2019-01-23 15:40:22.698 Local directory: C:\Users\Subhash\Documents, Remote directory: /, Update: Yes, Cache: Yes
. 2019-01-23 15:40:22.698 Cache directory changes: Yes, Permanent: Yes
. 2019-01-23 15:40:22.698 Recycle bin: Delete to: No, Overwritten to: No, Bin path:
. 2019-01-23 15:40:22.698 DST mode: Unix
. 2019-01-23 15:40:22.698 --------------------------------------------------------------------------
. 2019-01-23 15:40:22.722 Looking up host "71.6.186.24" for SSH connection
. 2019-01-23 15:40:22.722 Connecting to 71.6.186.24 port 22
. 2019-01-23 15:40:22.977 We claim version: SSH-2.0-WinSCP_release_5.13.7
. 2019-01-23 15:40:23.234 Server version: SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u2
. 2019-01-23 15:40:23.235 We believe remote version has SSH-2 channel request bug
. 2019-01-23 15:40:23.235 Using SSH protocol version 2
. 2019-01-23 15:40:23.235 Have a known host key of type ecdsa-sha2-nistp256
. 2019-01-23 15:40:23.491 Doing ECDH key exchange with curve nistp256 and hash SHA-256
. 2019-01-23 15:40:23.822 Server also has ssh-dss/ssh-rsa host keys, but we don't know any of them
. 2019-01-23 15:40:23.822 Host key fingerprint is:
. 2019-01-23 15:40:23.822 ecdsa-sha2-nistp256 256 f0:39:24:5c:63:12:5a:0d:e3:35:08:3d:91:d2:9f:53 7HbkGPzNm6tuAiqUoEpiHX4jxoNzxJgXQjWOgjuKGM8=
. 2019-01-23 15:40:23.871 Host key matches cached key
. 2019-01-23 15:40:23.871 Initialised AES-256 SDCTR client->server encryption
. 2019-01-23 15:40:23.871 Initialised HMAC-SHA-256 client->server MAC algorithm
. 2019-01-23 15:40:23.871 Initialised AES-256 SDCTR server->client encryption
. 2019-01-23 15:40:23.871 Initialised HMAC-SHA-256 server->client MAC algorithm
! 2019-01-23 15:40:24.426 Using username "root".
. 2019-01-23 15:40:24.744 Server offered these authentication methods: publickey,password,keyboard-interactive
. 2019-01-23 15:40:24.745 Attempting keyboard-interactive authentication
. 2019-01-23 15:40:25.002 Server refused keyboard-interactive authentication
. 2019-01-23 15:40:25.002 Server offered these authentication methods: publickey,password,keyboard-interactive
. 2019-01-23 15:40:25.002 Prompt (password, "SSH password", <no instructions>, "&Password: ")
. 2019-01-23 15:40:25.002 Using stored password.
. 2019-01-23 15:40:25.059 Sent password
. 2019-01-23 15:40:25.331 Access granted
. 2019-01-23 15:40:25.331 Opening session as main channel
. 2019-01-23 15:40:25.585 Opened main channel
. 2019-01-23 15:40:26.134 Started a shell/command
. 2019-01-23 15:40:26.148 --------------------------------------------------------------------------
. 2019-01-23 15:40:26.148 Using SFTP protocol.
. 2019-01-23 15:40:26.149 Doing startup conversation with host.
. 2019-01-23 15:40:26.149 Server sent command exit status 127
. 2019-01-23 15:40:26.150 Disconnected: All channels closed
* 2019-01-23 15:40:26.187 (EFatal) **Connection has been unexpectedly closed.** Server sent command exit status 127.
задан
24 January 2019 в 18:00
поделиться
исправить
Зачем нужен sftp В протоколе FTP есть 2 ключевые проблемы - во первых, пароли и данные передаются в открытом виде, во вторых - для каждой передачи устанавливается дополнительное соединение. Для шифрования данных и контрольного соединения был написан FTPS, но с ним проблем еще больше - все также требуется дополнительное соединение при передаче, а главное - контрольный канал теперь зашифрован и firewall никак не может помочь в прохождении FTP трафика через NAT. Кроме того - существуют различия в реализации, что добавляет еще больше проблем при использовании FTPS. SFTP - полностью новый протокол разработанный IETF SECSH, предлагающий аналогичные FTP возможности для удаленных операций и использующий SSH (обычно SSH2) для обеспечения шифрования и аутентификации. Известность получил в основном из-за того, что был встроен в SSH сервера, в частности - в OpenSSH 2.3.0 и выше. Недостатки sftp в OpenSSH До OpenSSH 4.9 sftp сервер требовал запуска внешнего исполняемого файла и построение chroot окружения было связанно с дополнительными действиями. Невозможно ограничить скорость передачи для конкретного пользователя. Сложно сделать отличную от SSH базу с пользователями. В целом - sftp сервер в OpenSSH всегда был лишь приятным дополнением к OpenSSH предоставляя на порядок меньшие возможности чем, например, proftpd. Впрочем, недавно необходимость выбора между удобством и безопасностью отпала так как был написан и реализован модуль mod_sftp для proftpd, о нем и пойдет речь. Использование модуля Впервые модуль появился в версии 1.3.2rc2, но на мой взгляд - уже вполне пригоден к использованию. Он не компилируется по умолчанию, так что для его использования надо указать его на этапе configure. Вы можете собрать proftpd из исходников, или если у вас redhat based OS - воспользоваться моим src.rpm. Модуль имеет множество возможностей полный список которых можно [[http://www.castaglia.org/proftpd/modules/mod_sftp.html посмотреть на сайте]]. Для минимальной настройки достаточно внести такие дополнения в файл конфигурации по умолчанию: Port 8022 SFTPEngine on SFTPHostKey /etc/ssh/ssh_host_dsa_key SFTPHostKey /etc/ssh/ssh_host_rsa_key и запустить proftpd. Теперь можно подключаться к порту 8022 любым sftp клиентом, например - мультиплатформенной FileZilla или command line sftp из комплекта OpenSSH. Используя виртуальные сервера можно сделать одновременную работу SFTP и FTP(S), ограничить доступ, сделать chroot для всех или некоторых сайтов и так далее. За примерно месяц использования я не обнаружил каких либо минусов данного решения по сравнению с OpenSSH sftp.
Корень / Администратору / Сетевые сервисы / FTP, Bittorrent
|
+/– |
В русском языке слово “сервер” во множественном числе звучит как “серверы”, а не “сервера”. |
|
|
|
+/– |
А по делу кто-нить скажет, или мы будем и дальше учить друг друга русскому языку? |
|
|
|
|
+/– |
![]() mod_sftp/0.9.8: error reading passphrase for SFTPHostKey ‘/root/.ssh/id_rsa’: (unknown) mod_sftp/0.9.8: unable to use key in SFTPHostKey ‘/root/.ssh/id_rsa’, exiting читал доку, но так и не понял что туда нужно вводить, у кого есть рабочий пример поделитесь плиз! |
|
|
Я искал жизнеспособный ответ на этот вопрос, и большинство ответов содержат советы о том, почему не следует этого делать. Тем не менее, вот сценарий, и что делает это необходимым:
У меня есть консольное приложение, и в .profile каждого пользователя есть команда запуска для приложения, и непосредственно после команды, которая его запускает, есть команда «exit», которая выводит их из системы. Я только хочу, чтобы они могли получить доступ к этому консольному приложению через предоставленный им интерфейс. После запуска приложение предоставляет пользователю список клиентов, к которым можно получить доступ через приложение, причем каждый клиент имеет свой собственный каталог данных. Пользователям предоставляется доступ только к тем клиентам, к которым им потребуется доступ.
Это было так просто сделать при использовании комбинации telnet / FTP, но теперь, когда я хочу предоставить пользователям доступ из любого места в Интернете, я не смог найти способ отключить их от SFTP, хотя по-прежнему позволяя им получить доступ к оболочке, где они могут запустить приложение.
Ответы:
Редактировать:
Теперь перейдем к исходному ответу:
Закомментируйте поддержку sftp в sshd_config (и, конечно, перезапустите sshd):
#Subsystem sftp /usr/lib/openssh/sftp-server
Как уже упоминали другие, отключение sftpдалеко не достаточно – пользователь с неограниченным sshдоступом может просматривать любой файл, доступ к которому имеет его учетная запись, может изменять все, что он имеет право изменять, и может легко загружать все, что он может читать, для своих собственных машина. Единственный способ помешать им сделать это – фактически ограничить их доступ. Также не стоит полагаться на .profileограничение пользователей, поскольку это не то, для чего это (Правка: как упоминает Алекси в своем ответе, на самом деле тривиально обойтись .profile; суть в том, .profileчто это для удобства, а не безопасности, поэтому это не так. предназначен для ограничения пользователей. Используйте средства, разработанные для обеспечения безопасности (например, приведенные ниже, для обеспечения безопасности).
Есть два основных способа сделать это: вы можете ограничить их с помощью прав доступа к файлу или заставить их выполнять только ваше консольное приложение. Второй способ лучше: назначить группу пользователей, которые должны быть ограничены консольным приложением (например customers); затем sshd_configдобавьте следующие строки:
Match Group customers
ForceCommand /path/to/app
Это делает так, чтобы все соединения от пользователей в этой группе открывали консольное приложение; они не могут запускать что-либо еще, включая sftpинструмент сервера. Это также мешает им делать что – либо еще с системой, и, в отличие от этого .profile, делает это с использованием самого SSH-сервера ( .profileограничивает их в оболочке, а ForceCommandтакже предотвращает другие действия, не связанные с запуском оболочки). Также в отличие от .profileэтого, это разработано как вещь безопасности; это специально сделано, чтобы противостоять злоумышленнику, уклоняющемуся от него.
Альтернатива (вероятно, низшая) может включать создание нового пользователя для запуска консольного приложения. Затем вы ограничите каталоги данных этим пользователем, установите консольное приложение, принадлежащее этому пользователю, и включите u+sпрограмму. Это setuidбит; это означает, что тот, кто запускает консольную программу, делает это с разрешениями владельца программы. Таким образом, пользователь сам не имеет доступа к каталогам, он получает его только через программу. Тем не менее, вы, вероятно, должны просто использовать ForceCommand, поскольку это ограничивает весь доступ к «просто запустить эту программу».
Не пытайтесь делать это, .profileпотому что это не обеспечивает никакой безопасности и абсолютно ничего не ограничивает!
Как говорили cpast и некоторые комментаторы, вы должны использовать надлежащие механизмы для ограничения доступа. То есть,
- Использовать
ForceCommand
вsshd_config
- Используйте логин без пароля и
command="..."
в.ssh/authorized_keys
- Измените оболочку пользователя на что-то, что ограничивает возможности пользователя
command="..."
применяется только к одному ключу, поэтому он не ограничивает ssh вход в систему для пользователя, использующего пароль или другой ключ- Возможно, вы также захотите ограничить переадресацию портов и т. Д. (О которых я слышал – переадресация портов, пересылка x11, переадресация агентов и распределение pty)
AllowTcpForwarding
и т. д. вsshd_config
no-port-forwarding
и т. д. в.ssh/authorized_keys
- Если у вас запущены другие демоны (например, FTP), вы должны убедиться, что они не впускают пользователя (некоторые демоны принимают это решение на основе оболочки пользователя, поэтому, если вы измените это, вы можете захотеть еще раз проверить это)
- Вы можете изменить оболочку пользователя на скрипт, который делает то, что вы хотите; это либо без аргументов, либо как
script -c 'command-the-user-wanted-to-run'
- Обе команды
ForceCommand
иcommand="..."
запускают команду через пользовательскую оболочку, чтобы они не работали, если для пользовательской оболочки установлено, например,./bin/false
или/sbin/nologin
Отказ от ответственности: я ни в коем случае не являюсь экспертом в этом вопросе, поэтому, хотя я могу сказать, .profileчто это небезопасно, я не могу обещать, что с другими методами, которых я не знаю, нет никакой «ошибки» около. Насколько я знаю, они в безопасности, но я не был бы первым, кто ошибся в Интернете.
Можно включить SSH и отключить SFTP как глобально, так и для каждого пользователя / группы.
Лично мне это нужно, потому что я хочу предоставить доступ к некоторым git-репозиториям через SSH, и мне нравится отключать ненужные системы. В этом случае SFTP не нужен.
глобально
Вы можете отключить SFTP для всех пользователей несколькими способами.
Недостающая подсистема
SFTP-демон, используемый SSH, можно настроить через Subsystemключевое слово. Из sshd_config(5)руководства:
Subsystem
Configures an external subsystem (e.g. file transfer daemon).
Arguments should be a subsystem name and a command (with optional
arguments) to execute upon subsystem request.
The command sftp-server(8) implements the “sftp” file transfer
subsystem.
Alternately the name “internal-sftp” implements an in-process
“sftp” server. This may simplify configurations using
ChrootDirectory to force a different filesystem root on clients.
By default no subsystems are defined.
Последняя строка предполагает, что этого должно быть достаточно, чтобы не определять подсистему для «sftp».
Ложная ложь
Вы также можете отключить SFTP, установив демон SFTP, используемый SSH, на что-то непригодное. Например, настройте подсистему “sftp” на /bin/false:
Subsystem sftp /bin/false
На пользователя / группу
Также возможно отключить SFTP для пользователя, группы или нескольких других критериев.
Это не работает, если вы хотите, чтобы ваш пользователь получал обычную подсказку оболочки. Это также не имеет смысла, так как вы можете обойти большинство вещей, если у вас есть доступ к оболочке.
Это будет работать, только если вы хотите предоставить доступ к определенной программе.
согласование
Чтобы соответствовать группе пользователей, вы можете настроить SSH с Matchключевым словом. Из sshd_config(5)руководства:
Match
...
The arguments to Match are one or more criteria-pattern pairs or the
single token All which matches all criteria. The available criteria
are User, Group, Host, LocalAddress, LocalPort, and Address. The
match patterns may consist of single entries or comma-separated
lists and may use the wildcard and negation operators described in
the PATTERNS section of ssh_config(5).
...
Match User eva
соответствует пользователю “eva”Match User stephen,maria
соответствует пользователям “Стивен” и “Мария”Match Group wheel,adams,simpsons
соответствует группам “колесо”, “адамс”, “симпсоны”
Если вы хотите получить больше информации, в sshd_config(5)руководстве есть грузы .
Принудительная команда
Обычно вы получаете пользовательскую оболочку входа в систему при подключении через SSH, но SSH может быть настроен для принудительного выполнения определенной команды. Команда принудительна для любого соединения SSH, включая SFTP, и, таким образом, у вас может быть возможность принудительно ввести нужную команду.
Команду force можно настроить с помощью ForceCommandключевого слова. Из
sshd_config(5)руководства:
ForceCommand
Forces the execution of the command specified by ForceCommand,
ignoring any command supplied by the client and ~/.ssh/rc if
present. The command is invoked by using the user's login shell
with the -c option. This applies to shell, command, or subsystem
execution. It is most useful inside a Match block. The command
originally supplied by the client is available in the
SSH_ORIGINAL_COMMAND environment variable. Specifying a command of
“internal-sftp” will force the use of an in-process sftp server that
requires no support files when used with ChrootDirectory. The
default is “none”.
Таким образом, вы можете использовать ограниченную команду, которую хотите использовать ForceCommand . Например:
Match User kim
ForceCommand echo 'successful login man, congrats'
пример
В моем случае, когда я хочу дать доступ к git, мне нужен только доступ к пользователю git-shell. Это раздел, который отключает SFTP для моих пользователей git, а также некоторые параметры безопасности:
Match Group git
# have to do this instead of setting the login shell to `git-shell`,
# to disable SFTP
ForceCommand /usr/bin/git-shell -c "$SSH_ORIGINAL_COMMAND"
# disable stuff we don't need
AllowAgentForwarding no
AllowTcpForwarding no
AllowStreamLocalForwarding no
PermitOpen none
PermitTunnel no
PermitTTY no
X11Forwarding no
1 ответ
Для доступа к sftp от других хостов удостоверьтесь, что следующее установлено и настроено правильно.
- Установленные серверы OpenSSH
- Настроенный sshd_config
- PubkeyAuthentication да
- Подсистема sftp внутренний-sftp
-
Добавленный Ваш открытый ключ к ~/.ssh/authorized_keys
-
Запустите ssh сервер с порта, 22/TCP открытый # /etc/init.d/sshd start
# iptables -I INPUT -j ACCEPT -p tcp --dport 22
Наконец, тест $ sftp <login>@<hostname>
ответ дан Jay
7 December 2019 в 13:19
поделиться