2013-02-18 19:36:35 +0000 2013-02-18 19:36:35 +0000
108
108

sudoアクセスがあるかどうかの確認方法

最近これが原因で困っています。

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

sudoアクセスがあるかどうかの確認方法はありますか?

回答 (9)

123
123
123
2013-02-18 19:51:06 +0000

sudo -vを実行します。これは通常 sudo パスワードのタイムアウトを延長するために使用されますが、任意の sudo 特権を持っているかどうかを判断するために使用することができます。

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

Man ページ抜粋:

-v (validate) オプションが与えられた場合、sudo はユーザーのタイムスタンプを更新し、必要に応じてユーザーのパスワードを要求します。これは sudo のタイムアウトをさらに 5 分間延長しますが (または sudoers でタイムアウトが設定されているものは何でも)、コマンドは実行されません。

ユーザが specific コマンドの実行のみを許可されている場合、このコマンドは動作します。この場合、許可されていないコマンドを実行しようとすると、メッセージは違って見えますが (そして root にはメールは送信されません )、管理者が /var/log/secure を読んだらトラブルに巻き込まれる可能性があります。

$ sudo ls
[sudo] password for [username]: 
Sorry, user [username] is not allowed to execute '/bin/ls' as root on [hostname].

異なる権限での実行が許可されている what を調べるには、sudo -l を使用します。このコマンドではパスワードの入力が必要なので注意してください。

43
43
43
2014-12-17 22:55:06 +0000

これは非常に簡単です。007を実行してください。これは、あなたが持っているすべての sudo 権限をリストアップします。

12
12
12
2016-06-14 00:49:56 +0000

ここでは、

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

は、sudoのアクセス権を持っていないとパスワード入力に引っ掛からないので、スクリプトに優しいバージョンです。

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

注意: macOSでは、coreutilsをインストールする必要があります。

9
9
9
2017-12-30 18:57:38 +0000

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
3
3
3
2017-02-28 02:27:06 +0000

私の場合、’sudo -v‘ と ’sudo -l‘ はスクリプト内では動作しなかった。また、’sudo -n -l‘ は動作しませんでした、それは私が sudo 権限を持っているにもかかわらず、パスワードが不足しているため、終了コード '1’ を与えました。しかし、コマンドを次のように拡張することで、スクリプトは成功しました。この式は、現在のユーザが'sudo'を呼び出すことができるかどうか0を与え、そうでない場合は1を与えます。

説明: -nへの追加パラメータsudoは対話性を防ぎます。
コマンド ‘$A’ の出力 sudo -n -v 2>&1 は次のようになるかもしれない: - 空 (この場合、現在のユーザが sudo を呼び出すことができる)、または: - 現在のユーザが sudo のために認可されていないという注意、または: - パスワードのための質問文 (この場合、ユーザは認可されている)。

2
2
2
2017-10-01 22:31:29 +0000

私は投票してコメントするために低いランクを持っていますが、私は以前に唯一の方法を発見したように、私は、ジェラルド・シェイドの答えをupvoteしたかったし、他の誰もそれを知っていないと思った - 今まで :D

btw 私のソリューション:

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

(2015年末から mwhahaaa)

1
1
1
2020-02-11 09:15:13 +0000

これだけで root 権限があるかどうかがわかるはずです:

sudo whoami

sudo が root パスワードを要求してきたり、うまくいかなかったりする場合は、(少なくとも sudo を通して) root 権限を持っていないことを意味します。

1
1
1
2016-08-30 17:58:05 +0000

“須藤アクセス "にはフレーバーがあります。2 つの主要なフレーバー。最初にあなた、またはあなたのメンバーのグループは、/etc/sudoers ファイルで sudo アクセスのために設定する必要があります。

第二にあなたのパスワードを知っている必要があります、または最近 sudo コマンドを行っている必要があります。タイムアウトが切れていない程度の最近のことです。(面白い事実: sudoer のファイルでタイムアウトを非常に長くすることができます。)

私はしばしば、いくつかのステップを sudo する必要があるスクリプトのプロログで、2 番目の種類のアクセスをテストしたいと思っています。このチェックが失敗した場合、スクリプトを実行する前に第2のアクセスを有効にする必要があることをユーザーに知らせることができます。p は空のプロンプトを設定します。Kは2回目のアクセスをクリアします。

stderrを/dev/nullに送るので、ユーザが1種類目のsudoアクセスを持っているかどうかもチェックします。

-5
-5
-5
2013-02-18 19:41:36 +0000

sudoersファイルを表示するには、 これらのの手順に従ってください。あなたがそこにいれば、あなたはsudoを持っています。入っていない場合は、自分で追加することができます。ファイルの一番下に、su と入力 4.ESCを押して、visudo と入力 5.your_username_here ALL=(ALL) ALL と入力 6. 6. :wq を必要とするコマンドを再実行する 7. パスワードを入力する(root のパスワードではない)

関連する質問

6
10
5
37
10