Беги sudo -v. Обычно он используется для продления времени ожидания пароля sudo, но может использоваться для определения наличия у вас каких-либо sudoпривилегий.
$ sudo -v
Sorry, user [username] may not run sudo on [hostname].
Выдержка из справочной страницы:
Если задана опция -v (validate), sudo обновит отметку времени пользователя, запрашивая пароль пользователя при необходимости. Это увеличивает время ожидания sudo еще на 5 минут (или любое другое время ожидания в sudoers), но не запускает команду.
Если вашему пользователю разрешено выполнять только определенные команды, эта команда будет работать, указывая, что вам разрешено запускать что-то с другими привилегиями. Хотя сообщение выглядит по-другому, когда вы пытаетесь выполнить команду, к которой у вас нет прав (в этом случае почта не отправляется root ), все же возможно, что у вас возникнут проблемы, если администраторы прочитают /var/log/secure.
$ sudo ls
[sudo] password for [username]:
Sorry, user [username] is not allowed to execute '/bin/ls' as root on [hostname].
Чтобы узнать, что вам разрешено запускать с разными привилегиями, вы можете использовать sudo -l. Обратите внимание, что эта команда требует от вас ввести пароль.
Благодарю. У меня работает sudo -v. На странице руководства написано, что я тоже могу запустить sudo -l, но запрашивается пароль. Почему это?
Брюс
2
@ Брюс Я предполагаю здесь, но в противном случае кто-то (или программа, которую вы запускаете) мог бы выяснить, какие программы могут выполняться (возможно, без ввода пароля) вашим текущим пользователем, и попытаться использовать эту информацию злонамеренно.
Даниэль Бек
Как вы думаете, что это значит, когда я получу это обратно patrick@<host>:~$ sudo -v sudo: unable to resolve host <host>? Я ввел свой пароль и ничего не узнал о несанкционированных. Я знаю, что sudoуспешно выполнил другие команды, но это unable to resolve hostсообщение заставило меня задуматься о том, что на хосте может быть что-то еще.
Патрик М
@PatrickM Похоже, проблема с sudoersфайлом. Здесь вы можете указать, на каком хосте пользователь авторизован для выполнения определенной команды (это полезно при использовании одного и того же sudoersфайла на нескольких машинах). Возможно, имя хоста, указанное в этом файле, не может быть разрешено. Попробуйте проверить это с помощью hostкоманды, например.
Ale
У меня не работает на RHEL 6, он сказал: sudo -v«xx отсутствует в файле sudoers. Об этом инциденте будет сообщено».
79E09796
43
Это очень просто. Беги sudo -l. Это перечислит любые привилегии sudo, которые у вас есть.
Может быть, голосование опущено, потому что оно повторяет то, что сказал Дэниел Бек два года назад.
G-Man
1
Или объясняет, что происходит, это в лучшем случае комментарий
Ramhound
2
@Jonathan: если вы сейчас будете писать сценарии в Ubuntu Rigt, sudo -lпопросите пароль, если вы можете sudo или нет. sudo -vспрашивает только, если вы можете, и "$(whoami)" != "root"никогда не будет спрашивать ничего в любом Linux.
bksunday
@bksunday Вы правы. Я тестировал сейчас на чистом Debian Jessy и подтвердил ваши результаты. Мой предыдущий (удаленный сейчас) комментарий, вероятно, был результатом тестирования на машине, на которой у меня были некоторые sudoпривилегии.
Джонатан Бен-Авраам
@ G-Man, но этот простой ответ помог мне более, чем, вероятно, более точный ответ Дэниела, где, к сожалению, эта команда - самый конец ...
#!/usr/bin/env bash
is_root (){return $(id -u)}
has_sudo(){local prompt
prompt=$(sudo -nv 2>&1)if[ $?-eq 0];then
echo "has_sudo__pass_set"elif echo $prompt | grep -q '^sudo:';then
echo "has_sudo__needs_pass"else
echo "no_sudo"fi}
elevate_cmd (){local cmd=$@
HAS_SUDO=$(has_sudo)case"$HAS_SUDO"in
has_sudo__pass_set)
sudo $cmd
;;
has_sudo__needs_pass)
echo "Please supply sudo password for the following command: sudo $cmd"
sudo $cmd
;;*)
echo "Please supply root password for the following command: su -c \"$cmd\""
su -c "$cmd";;esac}if is_root;then
echo "Error: need to call this script as a normal user, not as root!"
exit 1fi
elevate_cmd which adduser
Для меня ' sudo -v' и ' sudo -l' не работали в скрипте, потому что иногда интерактивны (спрашивая у меня пароль, как упомянуто выше). ' sudo -n -l' также не работал, он дал код выхода '1', хотя у меня есть разрешения sudo из-за отсутствующего пароля. Но расширение команды до:
был успешным для меня для сценария. Это выражение показывает, может 0ли текущий пользователь вызвать sudo, и 1если нет.
Объяснение:
Дополнительный параметр -nдля sudoпредотвращения интерактивности.
Вывод $Aкоманды ' sudo -n -v 2>&1' может быть:
- пустым (в этом случае sudo может вызываться текущим пользователем), или:
- примечанием, что текущий пользователь не авторизован для sudo, или:
- текстом вопроса для пароль (в этом случае пользователь авторизуется).
(«asswor» подойдет как для английского «пароля», так и для немецкого «Passwort»).
У меня низкий рейтинг, чтобы голосовать и комментировать, но я хотел бы поддержать ответ Джеральда Шейда, так как я обнаружил, что единственный путь ранее, и подумал, что никто другой знает это - до сих пор: D
«Доступ к Судо» входит в ароматы. Два основных варианта: сначала вы или группа, членом которой вы являетесь, должна быть настроена для доступа sudo в файле / etc / sudoers.
Во-вторых, вам нужно знать свой пароль, или вы недавно должны были выполнить команду sudo. Достаточно недавно, что время ожидания не истекло. (Забавный факт: вы можете очень долго хранить тайм-аут в файле вашего sudoer.)
Я часто хочу проверить второй тип доступа в прологе скрипта, который должен выполнить некоторые шаги. Если эта проверка не пройдена, я могу сообщить пользователю, что ему нужно разрешить 2-й вид доступа перед запуском скрипта.
bash-3.2$ if sudo -S -p '' echo -n < /dev/null 2> /dev/null ; then echo 'Sudo is enabled.' ; else echo 'Sudo is not enabled' ; fi
Sudo is enabled.
bash-3.2$ sudo -K
bash-3.2$ if sudo -S -p '' echo -n < /dev/null 2> /dev/null ; then echo 'Sudo is enabled.' ; else echo 'Sudo is not enabled' ; fi
Sudo is not enabled
-S говорит sudo прочитать пароль из stdin. -P устанавливает пустое приглашение. Ключ -K очищает второй раз доступа.
Так как он отправляет stderr в / dev / null, он также проверит, имеет ли пользователь первый тип доступа sudo.
ОП «попал в беду» для запуска sudo, так что он , вероятно, не системный администратор, ни даже один из элитных системных администраторов. Он, вероятно, просто пользователь, который думал, что ему могут быть предоставлены некоторые ограниченные полномочия. Что заставляет вас подозревать, что он может пойти ? su
Ответы:
Беги
sudo -v
. Обычно он используется для продления времени ожидания пароля sudo, но может использоваться для определения наличия у вас каких-либоsudo
привилегий.Выдержка из справочной страницы:
Если вашему пользователю разрешено выполнять только определенные команды, эта команда будет работать, указывая, что вам разрешено запускать что-то с другими привилегиями. Хотя сообщение выглядит по-другому, когда вы пытаетесь выполнить команду, к которой у вас нет прав (в этом случае почта не отправляется root ), все же возможно, что у вас возникнут проблемы, если администраторы прочитают
/var/log/secure
.Чтобы узнать, что вам разрешено запускать с разными привилегиями, вы можете использовать
sudo -l
. Обратите внимание, что эта команда требует от вас ввести пароль.источник
patrick@<host>:~$ sudo -v sudo: unable to resolve host <host>
? Я ввел свой пароль и ничего не узнал о несанкционированных. Я знаю, чтоsudo
успешно выполнил другие команды, но этоunable to resolve host
сообщение заставило меня задуматься о том, что на хосте может быть что-то еще.sudoers
файлом. Здесь вы можете указать, на каком хосте пользователь авторизован для выполнения определенной команды (это полезно при использовании одного и того жеsudoers
файла на нескольких машинах). Возможно, имя хоста, указанное в этом файле, не может быть разрешено. Попробуйте проверить это с помощьюhost
команды, например.sudo -v
«xx отсутствует в файле sudoers. Об этом инциденте будет сообщено».Это очень просто. Беги
sudo -l
. Это перечислит любые привилегии sudo, которые у вас есть.источник
sudo -l
попросите пароль, если вы можете sudo или нет.sudo -v
спрашивает только, если вы можете, и"$(whoami)" != "root"
никогда не будет спрашивать ничего в любом Linux.sudo
привилегии.Вот версия для сценария:
так как он не застрянет на вводе пароля, если у вас нет
sudo
доступа.Вы также можете установить его в переменную, например:
Примечание: В MacOS, вам нужно установить
coreutils
, напримерbrew install coreutils
.источник
timeout
не доступны по умолчанию, например, на OS X?coreutils
, напримерbrew install coreutils
.Ответ Джеральда Шейда здесь может быть улучшен!
использование
Вот полный пример использования в скрипте :
источник
Для меня '
sudo -v
' и 'sudo -l
' не работали в скрипте, потому что иногда интерактивны (спрашивая у меня пароль, как упомянуто выше). 'sudo -n -l
' также не работал, он дал код выхода '1', хотя у меня есть разрешения sudo из-за отсутствующего пароля. Но расширение команды до:был успешным для меня для сценария. Это выражение показывает, может
0
ли текущий пользователь вызвать sudo, и1
если нет.Объяснение:
Дополнительный параметр
-n
дляsudo
предотвращения интерактивности.Вывод
$A
команды 'sudo -n -v 2>&1
' может быть:- пустым (в этом случае sudo может вызываться текущим пользователем), или:
- примечанием, что текущий пользователь не авторизован для sudo, или:
- текстом вопроса для пароль (в этом случае пользователь авторизуется).
(«asswor» подойдет как для английского «пароля», так и для немецкого «Passwort»).
источник
У меня низкий рейтинг, чтобы голосовать и комментировать, но я хотел бы поддержать ответ Джеральда Шейда, так как я обнаружил, что единственный путь ранее, и подумал, что никто другой знает это - до сих пор: D
Кстати, мое решение:
(с конца 2015 года mwhahaaa)
источник
«Доступ к Судо» входит в ароматы. Два основных варианта: сначала вы или группа, членом которой вы являетесь, должна быть настроена для доступа sudo в файле / etc / sudoers.
Во-вторых, вам нужно знать свой пароль, или вы недавно должны были выполнить команду sudo. Достаточно недавно, что время ожидания не истекло. (Забавный факт: вы можете очень долго хранить тайм-аут в файле вашего sudoer.)
Я часто хочу проверить второй тип доступа в прологе скрипта, который должен выполнить некоторые шаги. Если эта проверка не пройдена, я могу сообщить пользователю, что ему нужно разрешить 2-й вид доступа перед запуском скрипта.
-S говорит sudo прочитать пароль из stdin. -P устанавливает пустое приглашение. Ключ -K очищает второй раз доступа.
Так как он отправляет stderr в / dev / null, он также проверит, имеет ли пользователь первый тип доступа sudo.
источник
Выполните следующие действия, чтобы просмотреть файл sudoers. Если ты там, у тебя есть sudo. Если нет, вы можете добавить себя.
su
visudo
your_username_here ALL=(ALL) ALL
:wq
exit
sudo
источник
sudo
, так что он , вероятно, не системный администратор, ни даже один из элитных системных администраторов. Он, вероятно, просто пользователь, который думал, что ему могут быть предоставлены некоторые ограниченные полномочия. Что заставляет вас подозревать, что он может пойти ?su