Доступ к 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 ответ

Решение

Есть две вещи, которые вам нужно сделать:

  1. установить SSH_AUTH_SOCK переменная, поэтому она указывает на правильный файл
  2. разрешить другому пользователю подключаться к сокету (используя разрешения файловой системы)

Следовательно, то, что вы могли бы сделать, это:

Как пользователь 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 изменяйте себя после того, как получите оболочку.

Другие вопросы по тегам