Старый прием механика задворок может пригодиться для такого рода вещи. Я однажды видел старого механика, старого длинная прямая палка трудно против ладони его руки, и затем нажмите его сустав против его уха. Он поместил другой конец палки на частях механизма и мог услышать, какой цилиндр не стрелял правильно. Древесина проводит звук хорошо, если он не имеет никакого воздушного зазора разрыва для перехода. Если Ваше достаточно взрослое, которое Вы могли бы помнить в фильмах ковбоя, прикладывающего его ухо к железнодорожным путям, чтобы сказать, прибывает ли поезд или индиец, слушающий землю для слушания буйвола. Тот же принцип применяется здесь. Столь же сумасшедший, как это звучит, можно использовать его, чтобы разыскать звук нажатия, дать ему попытку.
На 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.
Возможное решение состоит в том, чтобы chroot-заключить-в-тюрьму их, с помощью ssh фиктивной оболочки.
http://www.ssh.com/support/documentation/online/ssh/adminguide-zos/53/ssh-dummy-shell.html
http://en.wikipedia.org/wiki/Chroot_jail
Я видел это успешно реализованное прежде в этом контексте, хотя я не сделал его сам.
SSH предоставляет механизм для создания пар ключей, которые могут быть ограничены одной командой или набором команд. Обратитесь к этой статье на веб-сайте linuxjournal , чтобы получить хорошую статью , в которой рассказывается, как создавать специальные ключи ssh для использования в сценариях и, например, для заданий cron. Это также можно применить для предоставления пользователю возможности беспарольного доступа к серверу и удаленного выполнения определенной команды.
Этот вопрос о переполнении стека также содержит несколько хороших примеров того, как делать то же самое, что обсуждается в статье lj. В частности, вы используете файл authorized_keys для добавления ключей, к которым разрешен доступ, но ограничивая эти ключи, включая команды в одно из полей в файле authorized_keys.