Custom Openssh Shell

8

Среда является Ubuntu Server 12.04

Я хотел бы создать пользователя на сервере, который может только ssh войти в оболочку, которая запускает tail -f в файле журнала и закрывает сеанс после завершения программы (ctrl + c).

Есть ли способ добиться этого?

Синий
источник

Ответы:

8

Чтобы быть педантичным, это не будет Ctrl + C, но SIGHUP(ближе к Ctrl + D), который убивает приложение.

Вы можете поместить практически все, что хотите, в оболочку пользователя /etc/passwd. Просто замените значение по умолчанию в строке passwd пользователя (возможно /bin/bash) другой программой. Эта программа может быть скриптом, например /usr/bin/tail_log_file, с этим содержимым, принадлежащим root: root, с umode 0755:

#!/bin/rbash
tail -f /path/to/logfile

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

Чтобы быть крайне педантичным, вы должны добавить путь к скрипту /etc/shells, но я обычно нахожу, что он работает в любом случае.

Имейте также в виду, что пользователь может поместить сценарий в фоновый режим или использовать некоторые параметры ( ssh username@host bash) и при этом получить оболочку. Если вы хотите таким образом ограничить пользователя, хорошие разрешения для файловой системы - единственное реальное решение.

Сокол Момот
источник
отлично работает, большое спасибо за ваш быстрый и точный ответ.
Ablue
2
Единственная причина, по которой вы захотите добавить что-то, /etc/shells- это позволить пользователям, у которых есть что-то еще в качестве оболочки, установить свою оболочку на это; superuser ( root) всегда может изменить чью-либо оболочку на что угодно.
Джонатан Каллен
1
Чтобы добавить то, что сказал @JonathanCallen: на самом деле добавление этого сценария к утечке безопасности /etc/shellsпозволило бы пользователю изменить свою оболочку (потому /usr/bin/tail_log_fileчто тогда она будет считаться «неограниченной оболочкой»)!
Иоахим Зауэр
Хорошо, я удалю.
Ablue
1
Это слишком сложно; принудительные команды (см. ответ по @tink) являются способом сделать это.
Восстановить Монику - М. Шредер
10

Команды ssh принудительно приходят на ум, если вы счастливы использовать аутентификацию на основе пар ключей.

man authorized_keys
/command=
Дзынь
источник
2

Вы можете настроить ssh для запуска выбранной вами команды при входе в систему с использованием аутентификации с открытым ключом. Для этого сгенерируйте пару ключей:

djs@sardinia:~$ ssh-keygen -f restricted-key 
Generating public/private rsa key pair. 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in restricted-key. 
Your public key has been saved in restricted-key.pub. 
The key fingerprint is: b1:8f:26:47:c2:c5:f2:8d:ed:a0:c4:bd:9a:30:9d:08 djs@sardinia 
[...]

restricted-key.pubсодержит строку, подходящую для помещения в ~/.ssh/authorized_keysфайл пользователя :

ssh-rsa AAAA...UDz47Nl djs@sardinia

но вы можете добавить команду к этому, и ssh запустит эту команду при входе в систему с ключом:

command="tail -f /my/interesting/file" ssh-rsa AAAA...UDz47Nl djs@sardinia

Затем пользователь может ssh к машине, используя ssh -i restricted-key.

Дэн
источник