Невозможно прочитать в / корневой каталог, хотя sudo

У меня есть сценарий bash с чем-то вроде

while read -r name value do ....something done < "test"

Я запускаю этот скрипт как обычный пользователь.

Теперь я хотел сохранить этот файл в домашнем каталоге /root и прочитать его оттуда. Выполнение

while read -r name value do ....something done < "/root/path/to/file"

, конечно, я получаю ошибку: ./script: ine xy: /root/path/to/file: Permission Denied

Чем я пытался

while sudo read -r name value do ....something done < "/root/path/to/file"

Но это дает мне: sudo: read: unknown command [ ! d6]

Почему я не могу прочитать файл в домашнем каталоге /root, хотя я использую sudo?

EDIT Я пробовал немного дальше и что я не могу даже делать

$> sudo echo "test" /root/.test [sudo] Password for user: -bash: /root/.test: Permission Denied

EDIT Он работает так, как я хочу, если я запускаю полный скрипт с помощью sudo ./myscript, но я не хочу этого делать ... там другой путь?

1
задан 21 June 2017 в 15:14

6 ответов

Почему это не работает?

Причина, по которой ваш подход не работает, заключается в том, что вы читаете файл с помощью < «stdin», это означает, что ваша оболочка отвечает за чтение файла и вы запускали его с помощью обычного пользователя, так что у него нет необходимых прав для чтения файла. Теперь вы должны знать, что запуск команды read с помощью sudo не поможет не упоминать, что это встроенная оболочка, которая не может быть запущена с помощью sudo, например cd и т. Д.

Как мне заставить его работать?

Единственное, что вам нужно сделать - это как-то прочитать файл vi root или пользователь / группу с необходимыми привилегиями. Таким образом, вы можете сделать это как:

sudo cat /root/txt | while read -r name value;
do
  some command
done

в этом случае только cat будет запущен с sudo.

Однако лучше всего поставить ваш скрипт в [ f11], поэтому каждый имеет доступ для запуска.

Также обратите внимание, что если вы хотите перенаправить что-то в /root/example, вы должны использовать sudo tee:

echo test | sudo tee file

или запустить весь сценарий используя sudo.

1
ответ дан 22 May 2018 в 21:18
  • 1
    У меня есть сценарий в / bin / в любом случае. Я попробую кошку, но я также не могу написать что-то из сценария bash, например. используя sudo echo "test" > /root/.test – derHugo 21 June 2017 в 14:46
  • 2
    Да, я тоже говорю о разрешениях на файл назначения;) – Ravexina 21 June 2017 в 14:55
  • 3
    @derHugo увидеть мое обновление, я добавил инструкцию о sudo echo "test" > /root/.test тоже;) – Ravexina 21 June 2017 в 15:02
  • 4
    Спасибо, да, я должен был сделать echo 'test' | sudo tee /root/.test. Он работает сейчас. Теперь я переместил все мои скрипты на usr/local/bin. Напомню, что в будущем @Ravexina – derHugo 21 June 2017 в 15:08

Почему это не работает?

Причина, по которой ваш подход не работает, заключается в том, что вы читаете файл с помощью < «stdin», это означает, что ваша оболочка отвечает за чтение файла и вы запускали его с помощью обычного пользователя, так что у него нет необходимых прав для чтения файла. Теперь вы должны знать, что запуск команды read с помощью sudo не поможет не упоминать, что это встроенная оболочка, которая не может быть запущена с помощью sudo, например cd и т. Д.

Как мне заставить его работать?

Единственное, что вам нужно сделать - это как-то прочитать файл vi root или пользователь / группу с необходимыми привилегиями. Таким образом, вы можете сделать это как:

sudo cat /root/txt | while read -r name value; do some command done

в этом случае только cat будет запущен с sudo.

Однако лучше всего поставить ваш скрипт в /usr/local/bin, поэтому каждый имеет доступ для запуска.

Также обратите внимание, что если вы хотите перенаправить что-то в /root/example, вы должны использовать sudo tee:

echo test | sudo tee file

или запустить весь сценарий используя sudo.

1
ответ дан 18 July 2018 в 11:17

Почему это не работает?

Причина, по которой ваш подход не работает, заключается в том, что вы читаете файл с помощью < «stdin», это означает, что ваша оболочка отвечает за чтение файла и вы запускали его с помощью обычного пользователя, так что у него нет необходимых прав для чтения файла. Теперь вы должны знать, что запуск команды read с помощью sudo не поможет не упоминать, что это встроенная оболочка, которая не может быть запущена с помощью sudo, например cd и т. Д.

Как мне заставить его работать?

Единственное, что вам нужно сделать - это как-то прочитать файл vi root или пользователь / группу с необходимыми привилегиями. Таким образом, вы можете сделать это как:

sudo cat /root/txt | while read -r name value; do some command done

в этом случае только cat будет запущен с sudo.

Однако лучше всего поставить ваш скрипт в /usr/local/bin, поэтому каждый имеет доступ для запуска.

Также обратите внимание, что если вы хотите перенаправить что-то в /root/example, вы должны использовать sudo tee:

echo test | sudo tee file

или запустить весь сценарий используя sudo.

1
ответ дан 24 July 2018 в 19:46

/ корневая папка предназначена только для root. Я считаю, что только система может манипулировать файлами там. вы можете попробовать с `su ', но я думаю, что вы получите тот же результат.

во-вторых: не рекомендуется запускать обычные программы с привилегиями root.

при использовании sudo in в командной строке вы вводите пароль и становитесь root. сценарий не может этого сделать. это мера безопасности, которая гарантирует, что кто-то на терминале внесет изменения. также некоторые действия и папки доступны только для системного процесса root.

1
ответ дан 22 May 2018 в 21:18
  • 1
    к первому: как сказано, он работает полностью нормально, если я делаю sudo ./myscript или если я попытаюсь напрямую использовать sudo -i. К второму: я знаю! Вот почему я не хочу использовать sudo ./myscript, но скорее предпочитаю какой-то код, который работает – derHugo 21 June 2017 в 14:24
  • 2
    затем поместите программу в свою домашнюю папку. то вам не понадобится sudo для запуска. вы проголосовали за мой ответ? Я ответил на ваш вопрос и почему я не могу запустить программу в / root, хотя я использую sudo? & Quot; – ravery 21 June 2017 в 14:28
  • 3
    Нет, у меня есть сценарий в / bin / blabla, так как я хочу, чтобы он был работоспособен каждым пользователем. И не имеет значения, находится ли он в моей папке, или результат bin / blabla - то же самое. Наконец: «Почему нельзя запускать программу в / root, хотя я использую sudo? & Quot; не мой вопрос, но «Почему я не могу прочитать файл в домашнем каталоге / root, хотя я использую sudo? " – derHugo 21 June 2017 в 14:34
  • 4
    хорошо тот же ответ, / root - системный root, только скрипт не имеет привилегий root – ravery 21 June 2017 в 14:38
  • 5
    чем я не могу сделать sudo echo "test" > /root/.test? Я запускаю его с помощью sudo, поэтому у меня должны быть права root – derHugo 21 June 2017 в 14:47

/ корневая папка предназначена только для root. Я считаю, что только система может манипулировать файлами там. вы можете попробовать с `su ', но я думаю, что вы получите тот же результат.

во-вторых: не рекомендуется запускать обычные программы с привилегиями root.

при использовании sudo in в командной строке вы вводите пароль и становитесь root. сценарий не может этого сделать. это мера безопасности, которая гарантирует, что кто-то на терминале внесет изменения. также некоторые действия и папки доступны только для системного процесса root.

1
ответ дан 18 July 2018 в 11:17

/ корневая папка предназначена только для root. Я считаю, что только система может манипулировать файлами там. вы можете попробовать с `su ', но я думаю, что вы получите тот же результат.

во-вторых: не рекомендуется запускать обычные программы с привилегиями root.

при использовании sudo in в командной строке вы вводите пароль и становитесь root. сценарий не может этого сделать. это мера безопасности, которая гарантирует, что кто-то на терминале внесет изменения. также некоторые действия и папки доступны только для системного процесса root.

1
ответ дан 24 July 2018 в 19:46
  • 1
    к первому: как сказано, он работает полностью нормально, если я делаю sudo ./myscript или если я попытаюсь напрямую использовать sudo -i. К второму: я знаю! Вот почему я не хочу использовать sudo ./myscript, но скорее предпочитаю какой-то код, который работает – derHugo 21 June 2017 в 14:24
  • 2
    затем поместите программу в свою домашнюю папку. то вам не понадобится sudo для запуска. вы проголосовали за мой ответ? Я ответил на ваш вопрос и почему я не могу запустить программу в / root, хотя я использую sudo? & Quot; – ravery 21 June 2017 в 14:28
  • 3
    Нет, у меня есть сценарий в / bin / blabla, так как я хочу, чтобы он был работоспособен каждым пользователем. И не имеет значения, находится ли он в моей папке, или результат bin / blabla - то же самое. Наконец: «Почему нельзя запускать программу в / root, хотя я использую sudo? & Quot; не мой вопрос, но «Почему я не могу прочитать файл в домашнем каталоге / root, хотя я использую sudo? & quot; – derHugo 21 June 2017 в 14:34
  • 4
    хорошо тот же ответ, / root - системный root, только скрипт не имеет привилегий root – ravery 21 June 2017 в 14:38
  • 5
    чем я не могу сделать sudo echo "test" > /root/.test? Я запускаю его с помощью sudo, поэтому у меня должны быть права root – derHugo 21 June 2017 в 14:47

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

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