如何检查我是否有 sudo 访问权限?

如何检查我是否有 sudo 访问权限?

我最近因为这个陷入了麻烦。

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

有没有办法检查我是否有 sudo 访问权限?

答案1

运行sudo -v。它通常用于延长 sudo 密码超时时间,但可用于确定您是否拥有任何sudo权限。

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

手册页摘录:

如果指定了 -v(验证)选项,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。请注意,此命令要求你输入密码。

答案2

这很简单。运行sudo -l。这将列出您拥有的所有 sudo 权限。

答案3

Gerald Schade 的回答这里,还有待提高!

使用

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

答案4

对我来说,' 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可防止sudo交互。命令 ' ' 的
输出可能是: - 空(在这种情况下,当前用户可以调用 sudo),或: - 当前用户未获得 sudo 授权的提示,或: - 密码的询问文本(在这种情况下,用户已获得授权)。 (“asswor” 既适合英文“password”,也适合德文“Passwort”)。$Asudo -n -v 2>&1



相关内容