Почему я должен создавать новую оболочку при выполнении удаленных команд sudo s sh, чтобы получить надлежащие разрешения для файлов? - PullRequest
0 голосов
/ 16 января 2020

Я использую логин без пароля с помощью sudo для выполнения удаленных команд. Я понял, что мне нужно создать новую оболочку для выполнения команд, которые записывают в root области удаленной файловой системы. Но я хотел бы получить четкое объяснение, почему именно так происходит?

Это не удалось:

sudo -u joe ssh example.com "sudo echo test > /root/echo_test"

с: bash: / root / echo_test: В доступе отказано

Это прекрасно работает:

sudo -u joe ssh example.com "sudo bash -c 'echo test > /root/echo_test'"

1 Ответ

2 голосов
/ 16 января 2020

Это та же самая причина, по которой локальный sudo echo test >/root/echo_test потерпит неудачу (если вы не root) - перенаправление выполняется оболочкой (а не командой sudo или echo), которая работает как обычный пользователь. sudo запускает команду echo только как root.

При sudo -u joe ssh example.com "sudo echo test > /root/echo_test" удаленная оболочка работает как обычный пользователь (возможно, joe) и не имеет разрешения на запись в файл. Использование дополнительного вызова bash работает, потому что sudo затем запускает bash как root (а не эхо), и bash может открыть файл и выполнить перенаправление.

...