Как проверить, есть ли у меня доступ к sudo?

Я недавно попал из-за этого в неприятности.

$sudo vim /etc/motd 
[sudo] password for bruce: 
bruce is not in the sudoers file.  This incident will be reported.

есть ли способ проверить, есть ли у меня доступ sudo или нет?

27
задан Vldb.User
03.12.2022 8:35 Количество просмотров материала 2824
Распечатать страницу

8 ответов

Run sudo -v. Он обычно используется для расширения тайм-аута пароля sudo, но может быть использован для определения, есть ли у вас какие-либо sudo привилегии.

$ sudo -v
Sorry, user [username] may not run sudo on [hostname].

выдержка из Man-страницы:

если задана опция-v (validate), sudo обновит временную метку пользователя, запросив пароль пользователя, если это необходимо. Это расширяет таймаут sudo еще на 5 минут (или независимо от того, что таймаут установлен в sudoers), но не выполняет a команда.

если пользователь может запускать только specific команды, эта команда будет работать, указывая, что вы имеете право запускать что-то с разными правами. В то время как сообщение выглядит по-другому при попытке выполнить команду, вам не разрешено в этом случае (и нет письма к корневой), все еще возможно, что вы попадете в неприятности, если админы прочитают /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. Обратите внимание, что эта команда требует ввода пароля.

102
отвечен Daniel Beck 2022-12-04 16:23

Это очень просто. Беги sudo -l. Это будет список любых привилегий sudo у вас есть.

38
отвечен Brad Dausses 2022-12-04 18:40

вот этот скрипт-версия:

timeout 2 sudo id && echo Access granted || echo Access denied

так как он не будет застрял на ввод пароля, если у вас нет sudo открыть.

вы также можете установить его в переменную типа:

timeout 2 sudo id && sudo="true" || sudo="no"
echo "$sudo"

Примечание: на macOS необходимо установить coreutils, например,brew install coreutils.

6
отвечен kenorb 2022-12-04 20:57

для меня, 'sudo -v' и 'sudo -l ' не работал в скрипте, потому что иногда интерактивный (спрашивал пароль, Как упоминалось выше). sudo -n -l ' также не работает, он дал код выхода '1', хотя у меня есть разрешения sudo, из-за отсутствующего пароля. Но расширяя команду:

A=$(sudo -n -v 2>&1);test -z "$A" || echo $A|grep -q asswor

был успешным для меня сценария. Это выражение дает 0 если текущий пользователь может вызвать 'sudo' и 1 если не.

объяснение:

Дополнительный параметр -n to sudo предотвращает интерактивность.

Выход $A команды 'sudo -n -v 2>&1 может быть:

- пустой (в этом случае sudo может быть вызван текущим пользователем), или:

обратите внимание, что текущий пользователь не авторизован для судо, или:

- текст вопроса для пароля (в этом случае пользователь авторизован).

("asswor" подойдет для английского "password", а также для немецкого "Passwort").

1
отвечен Gerald Schade 2022-12-04 23:14

У меня низкий рейтинг для голосования и комментариев, но я хотел бы поддержать ответ Джеральда Шэйда, так как я обнаружил, что раньше только так и думал, что no1 еще это знает - до сих пор :D

кстати, мое решение:

[[ "$(whereis sudo)" == *'/'* && "$(sudo -nv 2>&1)" != 'Sorry, user'* ]]

(конец 2015 mwhahaaa)

1
отвечен user629901 2022-12-05 01:31

ответ Джеральда Шейда здесь, еще можно улучшить!

использовать

prompt=$(sudo -nv 2>&1)
if [ $? -eq 0 ]; then
  # exit code of sudo-command is 0
  echo "has_sudo__pass_set"
elif echo $prompt | grep -q '^sudo:'; then
  echo "has_sudo__needs_pass"
else
  echo "no_sudo"
fi

здесь полный пример использования в скрипте:

#!/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 1
fi


elevate_cmd which adduser
1
отвечен ajneu 2022-12-05 03:48

"доступ к sudo" вкусами. Два основных варианта: сначала вы или группа, членом которой вы являетесь, должны быть настроены для доступа к 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

the-S говорит sudo прочитать пароль из стандартного ввода. Ключ-P задает пустой строке. Ключ-K очищает второй раз доступа.

поскольку он отправляет stderr в /dev / null, он также проверяет, имеет ли пользователь первый тип доступа sudo.

1
отвечен Ben Hyde 2022-12-05 06:05

соблюдать эти шаги для просмотра файла sudoers. Если ты там, у тебя есть судо. Если нет, вы можете добавить себя.

  1. su
  2. visudo
  3. в нижней части файла введите your_username_here ALL=(ALL) ALL
  4. нажмите ESC и типа :wq
  5. тип exit
  6. повторите команду, которая нужна sudo
  7. введите свой пароль (не пароль root)
-3
отвечен Kruug 2022-12-05 08:22

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх