Как предоставить кому-то ssh доступ для загрузки файлов удаленно?

Старый прием механика задворок может пригодиться для такого рода вещи. Я однажды видел старого механика, старого длинная прямая палка трудно против ладони его руки, и затем нажмите его сустав против его уха. Он поместил другой конец палки на частях механизма и мог услышать, какой цилиндр не стрелял правильно. Древесина проводит звук хорошо, если он не имеет никакого воздушного зазора разрыва для перехода. Если Ваше достаточно взрослое, которое Вы могли бы помнить в фильмах ковбоя, прикладывающего его ухо к железнодорожным путям, чтобы сказать, прибывает ли поезд или индиец, слушающий землю для слушания буйвола. Тот же принцип применяется здесь. Столь же сумасшедший, как это звучит, можно использовать его, чтобы разыскать звук нажатия, дать ему попытку.

2
задан 21 July 2009 в 23:28
4 ответа

На Ubuntu/Debian можно установить scponly оболочка для ограничения их scp/sftp только. Просто установите пакет и измените их оболочку на /usr/bin/scponly:

sudo aptitude install scponly
sudo usermod -s /usr/bin/scponly USERNAME

Проблема дискового пространства, вероятно, лучше всего решена с квотами файловой системы. К сожалению, у меня есть небольшой опыт с ними.

Если Вы хотите стать более необычными (ограничение типов файлов, и такой) необходимо будет, вероятно, записать собственный сценарий для проверки команд, передаваемых от клиента. Самый простой сценарий был бы сценарием оболочки, который выполняет тест, подобный этому:

if [[ $SSH_ORIGINAL_COMMAND = "scp -f *txt" ]]
then
   exec $SSH_ORIGINAL_COMMAND
fi

Это позволило бы загружать .txt файлы. Быстрые тесты указывают, что имя файла не передается как часть команды scp при отправке. Таким образом, это не может быть возможно в этом случае.

Сценарий был бы установлен как принудительная команда для ключа пользователя. (''Управляют = "вздор"'' поле в authorized_keys.) Это может также быть установлено как опция "ForceCommand" для группы Соответствия в sshd_config, как так:

Группа scponly ForceCommand/usr/local/sbin/scpwrapper соответствия

Затем добавьте пользователей, чтобы быть так ограниченными "scponly" группой.

Править: Запросом вот сценарий, который я использую для осуществления rsync-только доступа:

#!/bin/bash
# 
# Verify that rsync command appears to be a legitimate rsnapshot command.
# Requires >= bash 3.x
#
# Ben Beuchler
# 6/4/07

# rsync needs to be operating in "server" mode.
re_server='rsync --server'

# Match both -x and --word options
re_options=' +-{1,2}[[:alpha:]-]+'

# Match legal paths
re_paths=' +[-[:alnum:]_./]+'

# Build the full regex
r="^${re_server}(${re_options})+(${re_paths}){2}$"

echo $SSH_ORIGINAL_COMMAND >> ssh_log

if [[ $SSH_ORIGINAL_COMMAND =~ $r ]]
then
        exec $SSH_ORIGINAL_COMMAND
else
        echo "Invalid rsync command."
fi

Используйте тот сценарий в качестве принудительной команды (или "командой =" в ~/.ssh/authorized_keys или использованием блока "Соответствия" в sshd_config, как отмечено выше), и это отклонит все кроме команд rsync. С небольшой тонкой настройкой его мог быть сделан только принять определенные команды rsync.

7
ответ дан 3 December 2019 в 08:45
  • 1
    Вы побеждаете меня к нему (был прерван). scponly также доступен в EPEL для RHEL/CentOS и в ядре repo для Fedora. –  Chad Huneycutt 22 July 2009 в 00:05
  • 2
    scponly работал бы с rsync? –  Rory 22 July 2009 в 01:12
  • 3
    Нет; но принудительный метод команды работает отлично для этого. I' ll изменяют мой ответ выше для включения сценария I' ve используется для этого. –  Insyte 22 July 2009 в 02:17

Возможное решение состоит в том, чтобы chroot-заключить-в-тюрьму их, с помощью ssh фиктивной оболочки.

http://www.ssh.com/support/documentation/online/ssh/adminguide-zos/53/ssh-dummy-shell.html

http://en.wikipedia.org/wiki/Chroot_jail

Я видел это успешно реализованное прежде в этом контексте, хотя я не сделал его сам.

2
ответ дан 3 December 2019 в 08:45

SSH предоставляет механизм для создания пар ключей, которые могут быть ограничены одной командой или набором команд. Обратитесь к этой статье на веб-сайте linuxjournal , чтобы получить хорошую статью , в которой рассказывается, как создавать специальные ключи ssh для использования в сценариях и, например, для заданий cron. Это также можно применить для предоставления пользователю возможности беспарольного доступа к серверу и удаленного выполнения определенной команды.

Этот вопрос о переполнении стека также содержит несколько хороших примеров того, как делать то же самое, что обсуждается в статье lj. В частности, вы используете файл authorized_keys для добавления ключей, к которым разрешен доступ, но ограничивая эти ключи, включая команды в одно из полей в файле authorized_keys.

1
ответ дан 3 December 2019 в 08:45

Мне не удалось заставить сценарий bash работать и правильно дезинфицировать ввод rsync, возможно, я что-то пропустил, вместо этого я обнаружил программу на Perl под названием authprogs

Это делает то же более сложным способом, но он идет намного дальше и позволяет также защитить его от IP.

0
ответ дан 3 December 2019 в 08:45

Теги

Похожие вопросы