Среда - Ubuntu Server 12.04.
Я хотел бы создать пользователя на сервере, который может использовать только ssh в оболочке, которая запускает tail -f в файле журнала и закрывает сеанс после завершения программы (ctrl + c).
Есть ли способ добиться этого?
На ум приходят принудительные команды ssh, если вы счастливы использовать аутентификацию на основе пары ключей.
man authorized_keys
/command=
Чтобы быть педантичным, это будет не 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
) и все равно обзавестись оболочкой. Если вы хотите таким образом ограничить пользователя, единственное реальное решение - хорошие разрешения файловой системы.
Вы можете настроить 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
.