Есть ли способ настроить пользователя в Linux (в данном случае Centos 5.2), чтобы он мог использовать scp для извлечения файлов, но не мог войти на сервер с помощью SSH?
rssh оболочка (http://pizzashack.org/rssh/) предназначен именно для этой цели.
Поскольку RHEL / CentOS 5.2 не включает пакет для rssh, вы можете посмотреть здесь, чтобы получить RPM: http://dag.wieers.com/rpm/packages/rssh/
Чтобы использовать его, просто установите его как оболочку для нового пользователя, например:
useradd -m -d /home/scpuser1 -s /usr/bin/rssh scpuser1
passwd scpuser1
..или изменить оболочку на уже существующую, например:
chsh -s /usr/bin/rssh scpuser1
..и редактировать /etc/rssh.conf
для настройки rssh shell - особенно раскомментируйте allowscp
строка, чтобы разрешить доступ к SCP для всех пользователей rssh.
(Вы также можете использовать chroot, чтобы держать пользователей в своих домах, но это уже другая история.)
Я опаздываю к этому, но вы можете использовать ключи ssh и указать точную команду, разрешенную в их файле ~ / .ssh / authorized_keys, например.
no-port-forwarding, no-pty, command = "исходная цель scp" ssh-dss ...
Возможно, вам понадобится использовать ps to на цели, чтобы установить правильные настройки команды.
PS: Если вы запустите тестовую команду scp с "-v", вы увидите что-то вроде этого
debug1: Sending command: scp -v -t myfile.txt
Вы заметите, что «-t» - это недокументированная опция scp, используемая программой на дальнем конце. Это дает вам представление о том, что вам нужно поместить в authorized_keys.
РЕДАКТИРОВАТЬ: Вы можете найти более подробную информацию (с несколькими ссылками) в этот вопрос StackOverflow.
Вот рабочий пример этого для пользователя с именем backup_user
на стороне сервера.
~backup_user/.ssh/authorized_keys
контент на стороне сервера (с некоторыми дополнительными ограничениями безопасности):
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="scp -v -r -d -t ~/CONTENT" ssh-rsa AAAAMYRSAKEY...
Создайте в ~ backup_user / ссылку на каталог, в котором должно быть доступно содержимое.
$ ln -s /path/to/directory/with/accessible/content ~backup_user/CONTENT
Теперь со стороны клиента должна работать следующая команда:
scp -v -r -P 2222 -i .ssh/id_rsa_key_file path/to/data backup_user@SERVER:~/CONTENT
Что делает эта команда:
-v
из файла command и authorized_keys)-r
из файла command и authorized_keys, если вы не хотите делать рекурсивную копию)-P 2222
из команды)-i .ssh/id_rsa_key_file
path/to/data
будет скопирован в /path/to/directory/with/accessible/content/
Чтобы сделать копию файла (или нескольких) с сервера на клиент, вы должны создать сценарий оболочки, который обрабатывает это как описано здесь
Я немного опоздал на вечеринку, однако предлагаю вам взглянуть на ForceCommand
директива OpenSSH.
Subsystem sftp internal-sftp
Match group sftponly
ForceCommand internal-sftp
Конечно, это SFTP, а не SCP, но он достигает той же цели, но более безопасно, чем с помощью оболочки с ограничениями. Кроме того, вы можете заблокировать пользователя, если хотите.
Я бы рекомендовал использовать scponly.
Это ограниченная оболочка, которая позволяет пользователям делать то, что они звучат, файлы SCP на сервере, но фактически не входить в систему. Доступна загрузка информации и исходного кода для программного обеспечения Вот а предварительно скомпилированные пакеты RPM доступны через EPEL YUM Репозитории.
После установки вам необходимо настроить каждую учетную запись пользователя, доступ к которой вы хотите ограничить, для использования только что установленной оболочки с ограничениями. Вы можете сделать это вручную через / etc / passwd или использовать следующую команду: usermod -s /usr/bin/scponly USERNAME
Для этого я использую MySecureShell. Вы также можете настроить другие ограничения.
https://github.com/mysecureshell/mysecureshell
Ограничивает подключения только к SFTP / SCP. Нет доступа к оболочке.
Очень поздно для вечеринки, но просто установите оболочку пользователя git на / usr / bin / git-shell. Это ограниченная оболочка, которая не позволяет интерактивный вход. Вы по-прежнему можете подключиться к пользователю с помощью su -s / bin / bash git или любого другого имени пользователя git.
Мы используем псевдоболочку под названием scponly на наших защищенных ftp-серверах для пользователей мы хотим иметь возможность только scp-файлов, но не авторизоваться.
Я нашел хороший способ - использовать функцию command = "..." файла authorized_keys. (Предложено мне эта страница)
Команда, которую вы запустите, будет проверять аргументы, начинающиеся с scp (и rsync).
Вот файл authorized_keys:
# authorized_keys
command="/usr/local/bin/remote-cmd.sh" ssh-rsa.....== user@pewpew
Вот содержимое remote-cmd.sh:
#!/bin/bash
# /usr/local/bin/remote-cmd.sh
case $SSH_ORIGINAL_COMMAND in
'scp'*)
$SSH_ORIGINAL_COMMAND
;;
'rsync'*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Access Denied"
;;
esac
Я предполагаю, что вам, вероятно, все равно потребуется защитить файл authorized_keys пользователя, но моей целью было иметь ключ без пароля, который я мог бы использовать для резервного копирования, без необходимости создавать целого нового пользователя, и чтобы ключ не давал оболочку (хорошо, легко)
Измените оболочку входа пользователя на что-то ограничительное, что позволяет пользователю запускать только scp, sftp-сервер и rsync только, а также проверяет, что небезопасные аргументы не разрешены (например, scp -S ... и rsync -e ... небезопасны, см. здесь: http://exploit-db.com/exploits/24795). Пример такой ограничительной оболочки входа:
Вы можете захотеть запустить один из них в chroot или в другой ограниченной среде (например, nsjail в Linux), чтобы отключить доступ к сети и упростить (занесение в белый список) контроль над тем, какие каталоги можно читать и / или писать.
Я не рекомендую использовать command="..."
в ~/.ssh/authorized_keys
, потому что без тщательной дополнительной защиты (например, chmod -R u-w ~
для пользователя) злоумышленник может загрузить новую версию ~/.ssh/authorized_keys
, ~/.ssh/rc
или ~/.bashrc
, и, таким образом, может включать и выполнять произвольные команды.
Это не самое изящное решение, но вы можете бросить что-то подобное пользователям .bashrc
if [ "$TERM" != "dumb" ]; then
exit
fi
Я обнаружил, что пользователи SCP получают СРОК «тупой», а другие обычно получают vt100.
Я предполагаю, что пользователь, вероятно, мог бы scp поверх нового .bashrc, что делает это не лучшим решением, но для быстрого и грязного решения это сработает