Доступ к SSH_AUTH_SOCK от другого пользователя без полномочий root
Сценарий:
Я запускаю ssh-agent на своем локальном ПК, и все мои серверы / клиенты настроены для переадресации аутентификации агента SSH. Я могу переключаться между всеми моими машинами, используя ssh-agent на моем локальном ПК. Это работает.
Мне нужно иметь возможность подключиться по SSH к себе как к пользователю (user1), перейти на другого пользователя с именем user2 (sudo -i -u user2), а затем использовать ssh на другой компьютер, используя ssh-agent, который я использую на своем локальном ПК. Допустим, я хочу сделать что-то вроде ssh user3@machine2 (при условии, что user3 имеет мой открытый SSH-ключ в своем файле author_keys).
Я настроил sudo, чтобы сохранить переменную среды SSH_AUTH_SOCK.
Все участвующие пользователи (пользователь [1-3]) являются непривилегированными пользователями (не root).
Эта проблема:
Когда я переключаюсь на другого пользователя, даже если переменная SSH_AUTH_SOCK установлена правильно (скажем, для нее установлено значение /tmp/ssh-HbKVFL7799/agent.13799), пользователь user2 не имеет доступа к сокету, который был создан пользователем user1 - который из Конечно, имеет смысл, иначе user2 может перехватить закрытый ключ user1 и переключиться на него как на пользователя.
Этот сценарий прекрасно работает, если вместо получения оболочки через sudo для user2 я получаю оболочку через sudo для root. Потому что, естественно, root имеет доступ ко всем файлам на машине.
Вопрос:
Желательно, используя sudo, как я могу перейти с user1 на user2, но при этом иметь доступ к SSH_AUTH_SOCK пользователя1?
1 ответ
Есть две вещи, которые вам нужно сделать:
- установить
SSH_AUTH_SOCK
переменная, поэтому она указывает на правильный файл - разрешить другому пользователю подключаться к сокету (используя разрешения файловой системы)
Следовательно, то, что вы могли бы сделать, это:
Как пользователь 1, разрешите пользователю 2 подключаться к сокету (полный доступ к сокету и разрешения для входа в каталог). я надеюсь твои /tmp
позволяет ACL.
setfacl -m u:user2:rw $SSH_AUTH_SOCK
setfacl -m u:user2:x $(dirname $SSH_AUTH_SOCK)
Перейдите к другому пользователю и правильно экспортируйте переменную.
sudo -u user2 env SSH_AUTH_SOCK=$SSH_AUTH_SOCK ssh user3@machine2
Если вы хотите открыть интерактивную оболочку, используя sudo
, вам придется экспортировать SSH_AUTH_SOCK
изменяйте себя после того, как получите оболочку.