7

У меня есть некоторые проблемы с пониманием sudo . Я вошел в систему на терминале как пользователь без прав администратора / без полномочий root. Этого "обычного" пользователя нет в файле sudoers (и, по моему мнению, этого не должно быть).

Теперь я пытаюсь выполнить команду , которая нуждается в администратора / суперпользователя , а также доступ к каталогам моего обычного пользователя - поэтому я не могу просто su в администратора или суперпользователя.

В моем понимании, sudo -u root должен справиться с задачей - однако он не принимает пароль для root (или admin, если я пытаюсь с моим обычным администратором). Он принимает только пароль "обычного" пользователя, который указывает на то, что опция -u username не работает так, как я ожидаю.

Я ожидаю, что sudo -u root some_command выполняет some_command с привилегиями root и, следовательно, запрашивает также пароль root. Очевидно нет.

TL; DR: Как выполнить любую команду, которая требует прав администратора И имеет доступ к файлам «зарегистрированного (обычного) пользователя» без добавления обычного пользователя в файл sudoers?

Я включил пользователя root под Mac OS X 10.7.

4 ответа4

13

sudo всегда требуется пароль исполняющего пользователя (и для этого у вас должны быть определенные разрешения, т. е. вы являетесь одним из sudoers).

su требует пароль целевой учетной записи (по умолчанию root , но по умолчанию у учетной записи root нет пароля в OS X). Если вы вместо этого используете su , вы можете ввести пароль целевой учетной записи и выполнить команду, используя привилегии этого пользователя.

su -c some_cmd # as root
su username -c some_cmd # as username

Это работает путем передачи всех аргументов после имени пользователя в оболочку входа целевой учетной записи. Оболочки обычно поддерживают аргументы -c <commands> . В GNU coreutils su есть фактический аргумент -c command для su который можно поместить перед именем пользователя.


Вы можете использовать su для другой учетной записи пользователя (используя пароль другой учетной записи пользователя) и sudo оттуда при условии, что другая учетная запись является sudoer .

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

5

Если вам действительно "не нужно" поддерживать отдельного пользователя root в Mac OS X, зачастую гораздо проще просто получить корневую оболочку с помощью sudo -s

В вашем случае пользователи без прав администратора не включаются в /etc /sudoers - поэтому вам придется вручную добавлять пользователей / группы, которые вы намерены принять sudo.

# User privilege specification
root    ALL=(ALL) ALL
%admin  ALL=(ALL) ALL

Как только это будет сделано, sudo будет наследовать почти все приятные вещи из вашей оболочки, такие как PATH и другие переменные, но мгновенно поднимает пользователя без прав администратора в root. Недостатком включения root является время и риск для безопасности, когда кто-то фактически входит в систему локально или удаленно, как root.

Имейте в виду, что sudo запрашивает пароль пользователя, который вошел в окно входа в систему. su - хочет пароль учетной записи root, sudo -s использует повышение привилегий, чтобы использовать пароль текущего пользователя, чтобы стать пользователем root, без необходимости (или, в вашем случае, фактического) пароля root.

2

Если вы используете стандартную учетную запись (обычно из соображений безопасности) и знаете имя пользователя и пароль администратора, вы можете выполнить su -l admin_user . После ввода пароля вы теперь для всех эффектов выступаете в роли этого администратора. Затем вы можете sudo к содержанию вашего сердца. Теперь просто logout чтобы вернуться к исходному простому аккаунту.

0

мой исполняемый файл терминала не может достичь того, чего он сам достиг, но выполняя эту раздражающую операцию:

Откройте Приложение> Утилиты> Terminal.app;

~ пользователь $ sudo /PATH_TO_TERMINAL_EXEC

Получить права администратора;

Готово.

... Вот что внутри Terminal_executable

#!/bin/bash

echo PATCHING HOSTS FILE...!
echo  >> /etc/hosts
echo \# IsPatched >> /etc/hosts
echo 127.0.0.1 somewebsite.com >> /etc/hosts

... Что я уже пробовал

#!/bin/bash

tmpvar=$(whoami)
echo TRYING!
su $tmpvar echo 127.0.0.1 somesite.com >> /etc/hosts

или же

su cuskus -c sudo -s echo 127.0.0.1 somesite.com >> /etc/hosts

просто получил #!/bin/bash окно после запроса пароля, но не может выполнить какой-либо код из-за привилегий.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .