Как я могу использовать 'sudo' с командой, но все еще “быть самостоятельно”?

Очень низкий уровень, который Вы запрашиваете, является машинным языком. Это высоко зависит от типа процессора. Если бы Вы не планируете сделать прямой машинный язык, программируя yourselv, я не рекомендовал бы провести исследование на том косвенном уровне.

Кроме этого технология CPU изменяется быстро - слишком быстро, чтобы идти в ногу, если это не Ваше базовое задание.

ПО МОЕМУ СКРОМНОМУ МНЕНИЮ, strace уровень достаточно глубок для понимания то, что продолжается на уровне ОС.

Если Вы хотите знать то, что продолжается - роют в исходный код функций, что Вы видите быть названным там.

3
05.10.2012, 20:38
3 ответа

В зависимости от того, как был настроен sudo, он может перезаписать большинство переменных среды. В частности, вероятно, что это перезаписывает SSH_AUTH_SOCK, и это могло бы перезаписать HOME. Это не что-то, что можно зафиксировать, не изменяя sudo конфигурацию.

Вы видите sudo конфигурацию (и в особенности какие переменные среды сохраняются) путем выполнения sudo -V как корень. Это - функция, что Вы не видите конфигурацию как непривилегированный пользователь.

Возможно, что Ваш системный администратор заблокировал вниз Ваши sudo полномочия так, чтобы сценарий не мог использовать Ваши ssh ключи. Это могло быть политикой безопасности, и если она реализована правильно, затем по определению Вы не можете зафиксировать ее собой, Вам будет нужен Ваш системный администратор для изменения конфигурации.

Трудно знать то, что необходимо, не зная то, что делает сценарий и какова sudo конфигурация. Возможно, a sudoers строка как следующее могла бы помочь (это говорит sudo сохранять SSH_AUTH_SOCK переменная среды, если команда для выполнения /path/to/script):

Defaults!/path/to/script env_keep+=SSH_AUTH_SOCK

Если сценарий работает как пользователь, который не является ни Вами, ни корнем, необходимо будет дать те полномочия пользователя считать ключи или получить доступ агенту.

4
27.01.2020, 21:11

Две вещи приходят на ум. Во-первых, отредактируйте сценарий так, чтобы только команды, для которых нужны поднятые полномочия, были выполнены с sudo. Это должно позволить Вашему соединению SSH работать. Это имеет преимущество выполнения с поднятыми полномочиями только те команды, для которых нужно оно. Выполните команду без sudo на командной строке, полагаясь на факт sudo вызовы в сценарии сделают правильную вещь.

Во-вторых, отредактируйте сценарий так, чтобы он явно определил имя пользователя для соединения как. Можно использовать $SUDO_USER переменная, которая содержит имя пользователя пользователя, который запустил ток sudo сессия. Это должно добиться цели:

ssh "${SUDO_USER}@remotehost.example.com"
3
27.01.2020, 21:11
  • 1
    Возможно, я виновен в преуменьшении, когда я использую слово "сценарий". Это - довольно большая система с большим количеством файлов: github.com/drush-ops/drush –  iconoclast 05.10.2012, 21:58
  • 2
    кроме того, это действительно позволяет мне явно устанавливать пользователя SSH. Но это не означало бы, что может использовать мои ssh ключи, не так ли? –  iconoclast 05.10.2012, 21:59
  • 3
    , я вижу. Да - немного больше, чем администраторский взлом собственной разработки! Если это позволяет Вам явно установить пользователя SSH, это также не позволяет Вам явно устанавливать ключ для использования? От поверхностного взгляда на источник возможно, можно установить -i ${SUDO_USER}/.ssh/id_rsa или безотносительно в ssh-options установка? –  D_Bye 06.10.2012, 02:04

Идентификатор пользователя будет всегда изменяться с sudo, но можно сохранить среду с-E параметром.

1
27.01.2020, 21:11
  • 1
    я добираюсь sudo: sorry, you are not allowed to preserve the environment когда я пробую это. Возможно, получение их изменить ту конфигурацию решило бы проблему...? –  iconoclast 05.10.2012, 22:00
  • 2
    для команды ssh нужен тег SETENV в sudoers файле так, чтобы-E работал. –  Hartmut 05.10.2012, 22:04

Теги

Похожие вопросы