Питання 1
Моє запитання полягає в тому, як я обмежую команду лише цією передачею SFTP у відкритому відкритому ключі?
Для цього є 2 методи.
1. - обмеження через sshd
Цей метод включає в себе настройку функції SFTP в межах вашого SSH - демона, sshd. Це контролюється через /etc/ssh/sshd_configфайл конфігурації. ПРИМІТКА. Це обмежить користувача, backupдозволене лише SFTP на сервер.
# /etc/ssh/sshd_config
Subsystem sftp internal-sftp
## You want to put only certain users (i.e users who belongs to sftpusers
## group) in the chroot jail environment. Add the following lines at the end
## of /etc/ssh/sshd_config
Match User backup
ForceCommand internal-sftp
2. - Обмеження через санкціоновані_кількі
Цей метод не передбачає змін у sshd_configфайлі. Ви можете обмежити користувача + ключ SSH однією командою за допомогою command=функції, про яку ви вже згадували у своєму запитанні. Хитрість полягає в тому, яку команду ви включаєте. Ви можете помістити SFTP-сервер у цей command=рядок, що має такий же ефект, як і налаштування SFTP-сервера у вашому sshd_configфайлі.
# User backup's $HOME/.ssh/authorized_keys file
command="/usr/libexec/openssh/sftp-server" ssh-dss AAAAC8ghi9ldw== backup@host
ПРИМІТКА: якщо користувач має доступ до запису ~/.ssh/authorized_keys, він може його читати та / або змінювати. Наприклад, вони могли завантажити його, відредагувати та повторно завантажити його, знімаючи commmand=..., надаючи йому безперебійний доступ до команди, включаючи оболонку. Якщо користувач має доступ до запису ~/.ssh, він також може просто від’єднати і відтворити файл, або chmodвін для запису доступу. Існує багато можливих рішень, таких як переміщення ~/.ssh/authorized_keysфайлів у непридатне для запису користувачеві місце, наприклад:
Match Group sftponly
AuthorizedKeysFile /etc/ssh/authorized_keys/%u
Питання №2
А оскільки я перебуваю на динамічній IP-адресі, як я можу подолати проблему "відсутній відомий хост" щоразу, коли мій IP-адрес змінюється?
Це складніше, але можливо також використовувати from=функцію у authorized_keysфайлі. Тут ми обмежуємо доступ від тільки господаря, somehost.dyndns.org.
from = "somehost.dyndns.org", command = "/ usr / libexec / openssh / sftp-сервер", переадресація без порту, перенаправлення no-X11, переадресація no-агента, no-pty ssh-dss AAAAC8ghi9ldw == резервне копіювання @ хост
Додаткові параметри після цього command=не менш важливі, оскільки вони ще більше обмежать використання ключа SSH.
розбивка функцій
from='hostname1,hostname2,'' - Обмежує доступ із заданих шаблонів IP або імені хоста
command='command' - Запускає вказану команду після аутентифікації
no-pty - не виділяє pty (не дозволяє інтерактивний вхід)
no-port-forwarding - Не дозволяє переадресацію портів
no-X11-forwarding - користувач не зможе видалити графічні інтерфейси X11
no-agent-forwarding - користувач не зможе переслати цей хост на інші внутрішні хости
Щоб позбутися повідомлення про "відсутніх відомих хостів", ви можете додати цю опцію SSH до клієнта, коли він з'єднується так:
$ ssh -o StrictHostKeyChecking=no ....
ssh_configПовні відомості про цей перемикач див. На сторінці чоловіка .
Обмеження оболонки користувача
Для обох рішень вище, ймовірно, ви хочете заблокувати backupкористувача, обмеживши також оболонку цього користувача у /etc/passwdфайлі. Зазвичай ви хочете встановити його scponly, але для цього є й інші варіанти. Дивіться це питання U&L Q&A під назвою: " Вам потрібна оболонка для SCP? ", Як це зробити.
Використання /sbin/nologinтакож може бути використане, якщо ви вирішите використовувати функцію chroot, sshd_configяк зазначено у №1 вище. Однак якщо ви вирішите використовувати метод, описаний у №2 , вам, ймовірно, доведеться використовувати scponlyабо щось інше для оболонки користувача /etc/passwd.
БОНУС - розширення №2 вище
Якщо вам потрібно відкрити набір команд для цього користувача, ви також можете це зробити. Створіть такий сценарій /home/backup/commands.sh:
#!/bin/sh
case $SSH_ORIGINAL_COMMAND in
"diskspace")
df -h
;;
"dirlist")
ls -1
;;
"apache_restart")
/etc/init.d/apache restart
;;
*)
echo "Unknown command"
esac
Потім ви налаштовуєте authorized_keysфайл так:
command="/bin/sh /home/user/commands.sh" ssh-dss AAAAC8ghi9ldw== user@host
Потім backupкористувач може запустити такі команди так:
# diskspace
$ ssh -q user@remote_host diskspace
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/dev-root 39G 2.2G 35G 6% /
# dirlist
$ ssh -q remote_host dirlist
commands.sh
dump.sql
Список літератури