Вопрос: Разрешить SCP, но не фактический вход с использованием SSH


Есть ли способ сконфигурировать пользователя в ящике Linux (в этом случае Centos 5.2), чтобы они могли использовать scp для извлечения файлов, но не могут фактически войти на сервер с помощью SSH?


58
2017-11-12 02:44


Источник


Я попробовал установить оболочку входа в / bin / false, но это просто прекращает работу scp. - DrStalker


Ответы:


Оболочка 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, чтобы держать пользователей в своих домах, но это еще одна история.)


41
2017-11-12 03:14



это потрясающе - я искал что-то вроде этого какое-то время, тоже - warren
идея rssh хороша, но iirc rssh не был точно чудом безопасности в терминах программирования. Простой google на «rssh exploit» дает больше результатов, чем мне удобно ... - wzzrd
scponly более или менее то же самое, а также и, по-видимому, менее эксплойты: sublimation.org/scponly/wiki/index.php/Main_Page - François Feugeas
похоже, переместился в github. Сублимационная связь мертва. github.com/scponly/scponly/wiki - spazm


Я опоздал на это, но вы можете использовать ssh-ключи и указать точную команду, разрешенную в файле ~ / .ssh / authorized_keys, например.

no-port-forwarding, no-pty, command = "scp source target" ssh-dss ...

Возможно, вам нужно будет использовать ps для цели, чтобы установить правильные параметры команды.

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

Что делает эта команда:

  • Он отображает подробную информацию (optionnal: вы можете удалить -v из файла команды и authorized_keys)
  • Он рекурсивно копирует содержимое пути / в / data. (optionnal: вы можете удалить -r из файла команды и authorized_keys, если вы не хотите делать рекурсивную копию)
  • Он использует порт 2222 для подключения к серверу (optionnal: вы можете удалить -P 2222 из команды)
  • Он использует и удостоверяет файл для автоматизации соединения (optionnal: вы можете удалить -i .ssh/id_rsa_key_file
  • Содержание path/to/data будут скопированы в /path/to/directory/with/accessible/content/

Чтобы сделать копию файла (или нескольких) с сервера на клиент, вы должны создать сценарий оболочки, который обрабатывает это как описано здесь


33
2017-11-27 17:52



Что должно остановить пользователя, пробивающего файл authorized_keys? Могут ли они быть запрещены не самим пользователем? - Dan
@Dan. Должно быть возможно установить разрешения только для чтения в файле authorized_keys, т. Е. chmod 400 ~/.ssh/authorized_keys, - Roger Dueck
Также вы должны сделать ~/.bashrc (и что бы ни делал Bash) и ~/.ssh/rc только для чтения. Но если злоумышленник имеет доступ к rsync или sftp, он все равно может удалить ~/.bashrc, и загрузите новый. Поскольку это трудно защитить, я рекомендую против этого метода (command="..."). - pts


Я немного опаздываю на вечеринку, однако я предлагаю вам взглянуть на ForceCommand директива OpenSSH.

Subsystem sftp internal-sftp

Match group sftponly
         ForceCommand internal-sftp

Конечно, это SFTP, а не SCP, но он достигает той же цели, более надежно, чем с ограниченной оболочкой. Кроме того, вы можете chroot пользователь, если хотите.


29
2017-11-12 10:56



добавить chrootDirectory %h а также AllowTcpForwarding no  после раздела матча, чтобы заставить пользователей sftponly chroot к их дому. обратите внимание, что совпадение должно (должно быть!) быть последним разделом в конфигурации ssh и параметрами, после чего это параметры только для согласованных пользователей - higuita
ForceCommand internal-sftp -u 0077 -d /uploaddir может более упрочить его, заставив umask в каталоге загрузки. В сочетании с «ChrootDirectory» он создает очень контролируемую изолированную среду для загрузки. Бонусная записка: резидентный каталог по умолчанию и umask должен быть установленным в ForceCommand, а не в Subsystem если вы хотите, чтобы они работали. - Marcin
Более длинная статья, объясняющая это, доступна в debian-administration.org/article/590/... - koppor


Я бы рекомендовал использовать scponly.

Это ограниченная оболочка, которая позволяет пользователям делать именно то, что это звучит, файлы SCP на сервере, но фактически не входить в систему. Доступны загружаемые файлы и программное обеспечение для программного обеспечения Вот и предварительно скомпилированные пакеты RPM доступны через Репозитории EPEL YUM,

После установки вам нужно будет настроить каждую учетную запись пользователя, к которой вы хотите ограничить доступ, использовать недавно установленную ограниченную оболочку. Вы можете сделать это вручную через / etc / passwd или использовать следующую команду: usermod -s /usr/bin/scponly USERNAME


5
2018-01-25 20:30



Я второй это. scponly предназначен для этой цели. - UtahJarhead
Скот, кажется, мертв. debian, кажется, удалил его: packages.debian.org/search?keywords=scponly и код на githubтоже мертв. Последующее обсуждение: serverfault.com/questions/726519/... - koppor


Для этого я использую MySecureShell. Вы можете настроить и другие ограничения.

https://github.com/mysecureshell/mysecureshell

Ограничивает только соединения с SFTP / SCP. Нет доступа к оболочке.


5
2017-11-12 07:21





Очень поздно вечеринке, но просто установите оболочку пользователя git для / usr / bin / git-shell. Это ограниченная оболочка, которая не позволяет интерактивный вход в систему. Вы все еще можете подключиться к пользователю с помощью «su -s / bin / bash git» или любого другого вашего имени пользователя git.


2
2017-10-01 19:54





Мы используем оболочку psudo, называемую scponly на наших безопасных ftp-серверах для пользователей мы хотим только иметь возможность scp-файлов, но не входить в систему.


1
2017-11-27 18:05