Доступ к SSH_AUTH_SOCK от другого пользователя без полномочий root

11

Сценарий:

Я запускаю 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?

Дэнни Ф
источник

Ответы:

12

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

  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переменную самостоятельно после получения оболочки.

chutz
источник
Спасибо за ответ. Это прекрасно работает и имеет смысл. Извините за поздний ответ, я не получил уведомление, что кто-то ответил.
Дэнни Ф