Питання 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
Список літератури