Saya baru-baru mendapat masalah karena ini.
$sudo vim /etc/motd
[sudo] password for bruce:
bruce is not in the sudoers file. This incident will be reported.
Apakah ada cara untuk memeriksa apakah saya memiliki akses sudo atau tidak?
Saya baru-baru mendapat masalah karena ini.
$sudo vim /etc/motd
[sudo] password for bruce:
bruce is not in the sudoers file. This incident will be reported.
Apakah ada cara untuk memeriksa apakah saya memiliki akses sudo atau tidak?
Jawaban:
Lari sudo -v
. Ini biasanya digunakan untuk memperpanjang batas waktu kata sandi sudo Anda, tetapi dapat digunakan untuk menentukan apakah Anda memiliki sudo
hak istimewa.
$ sudo -v
Sorry, user [username] may not run sudo on [hostname].
Kutipan halaman manual:
Jika diberi opsi -v (validasi), sudo akan memperbarui cap waktu pengguna, meminta kata sandi pengguna jika perlu. Ini memperpanjang batas waktu sudo selama 5 menit (atau apa pun batas waktu itu diatur dalam sudoers) tetapi tidak menjalankan perintah.
Jika pengguna Anda hanya diizinkan untuk menjalankan perintah tertentu , perintah ini akan berfungsi, yang menunjukkan bahwa Anda diizinkan untuk menjalankan sesuatu dengan hak istimewa yang berbeda. Meskipun pesan terlihat berbeda ketika mencoba menjalankan perintah yang tidak diizinkan dalam kasus ini (dan tidak ada email yang dikirim ke root ), masih mungkin Anda akan mendapat masalah jika admin membaca /var/log/secure
.
$ sudo ls
[sudo] password for [username]:
Sorry, user [username] is not allowed to execute '/bin/ls' as root on [hostname].
Untuk mengetahui apa yang diizinkan untuk Anda jalankan dengan berbagai hak istimewa, Anda dapat menggunakannya sudo -l
. Perhatikan bahwa perintah ini mengharuskan Anda memasukkan kata sandi.
patrick@<host>:~$ sudo -v sudo: unable to resolve host <host>
:? Saya memasukkan kata sandi dan tidak mendapatkan apa pun tentang yang tidak sah. Saya tahu saya telah sudo
berhasil menjalankan perintah lain, tetapi unable to resolve host
pesan itu membuat saya khawatir sesuatu yang lain mungkin funky pada host.
sudoers
file. Di sana Anda dapat menentukan host mana yang diizinkan pengguna untuk menjalankan perintah tertentu (ini berguna saat menggunakan sudoers
file yang sama di beberapa mesin). Mungkin nama host yang ditentukan dalam file itu tidak dapat diatasi. Coba periksa dengan host
perintah misalnya.
sudo -v
memberi "xx tidak ada dalam file sudoers. Insiden ini akan dilaporkan."
Ini sangat sederhana. Lari sudo -l
. Ini akan mencantumkan hak istimewa sudo yang Anda miliki.
sudo -l
minta kata sandi apakah kamu bisa sudo atau tidak. sudo -v
hanya bertanya jika Anda bisa, dan "$(whoami)" != "root"
tidak akan pernah bertanya apa pun di linux apa pun.
sudo
privs.
Berikut ini adalah versi script-friendly:
timeout 2 sudo id && echo Access granted || echo Access denied
karena itu tidak akan macet pada input kata sandi jika Anda tidak memiliki sudo
akses.
Anda juga dapat mengaturnya dalam variabel seperti:
timeout 2 sudo id && sudo="true" || sudo="false"
echo "$sudo"
Catatan: Di macOS, Anda perlu menginstal coreutils
, mis brew install coreutils
.
timeout
yang tidak tersedia secara default, mis. Pada OS X?
coreutils
, mis brew install coreutils
.
Jawaban Gerald Schade di sini , masih bisa ditingkatkan!
Menggunakan
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
Berikut adalah contoh lengkap penggunaan dalam skrip :
#!/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
Bagi saya, ' sudo -v
' dan ' sudo -l
' tidak berfungsi dalam skrip karena terkadang interaktif (meminta saya untuk kata sandi, seperti yang disebutkan di atas). ' sudo -n -l
' Tidak juga berfungsi, itu memberi kode keluar '1' meskipun saya memiliki izin sudo, karena kata sandi yang hilang. Tetapi memperluas perintah ke:
A=$(sudo -n -v 2>&1);test -z "$A" || echo $A|grep -q asswor
berhasil bagi saya untuk skrip. Ungkapan ini memberi 0
jika pengguna saat ini dapat memanggil 'sudo' dan 1
jika tidak.
Penjelasan:
Parameter tambahan -n
untuk sudo
mencegah interaktivitas.
Output $A
dari perintah ' sudo -n -v 2>&1
' mungkin:
- kosong (dalam hal ini, sudo dapat dipanggil oleh pengguna saat ini), atau:
- catatan bahwa pengguna saat ini tidak diotorisasi untuk sudo, atau:
- teks pertanyaan untuk kata sandi (dalam hal ini, pengguna diotorisasi).
("asswor" akan cocok untuk "kata sandi" bahasa Inggris serta untuk "Passwort" Jerman).
Saya mendapat peringkat rendah untuk memilih dan berkomentar, tetapi saya ingin meningkatkan jawaban Gerald Schade, karena saya telah menemukan bahwa satu-satunya cara sebelumnya, dan berpikir bahwa tidak ada orang lain yang tahu - sampai sekarang: D
btw solusi saya:
[[ "$(whereis sudo)" == *'/'* && "$(sudo -nv 2>&1)" != 'Sorry, user'* ]]
(dari akhir 2015 mwhahaaa)
"Akses Sudo" datang dalam rasa. Dua rasa utama: Pertama, Anda, atau grup yang menjadi anggota, perlu diatur untuk akses sudo di file / etc / sudoers.
Kedua Anda perlu mengetahui kata sandi Anda, atau Anda harus melakukan perintah sudo baru-baru ini. Baru-baru ini cukup bahwa batas waktu belum berakhir. (Fakta menyenangkan: Anda dapat membuat waktu sangat lama di file sudoer Anda.)
Saya sering ingin menguji jenis akses kedua dalam prolog skrip yang perlu beberapa langkah. Ketika pemeriksaan ini gagal, saya dapat menyarankan pengguna untuk mengaktifkan jenis akses ke-2 sebelum menjalankan skrip.
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 memberitahu sudo untuk membaca kata sandi dari stdin. -P mengatur prompt kosong. -K menghapus akses kedua kalinya.
Karena ia mengirim stderr ke / dev / null, ia juga akan memeriksa apakah pengguna memiliki jenis akses sudo pertama.
Ikuti langkah - langkah ini untuk melihat file sudoers. Jika Anda di sana, Anda memiliki sudo. Jika tidak, Anda bisa menambahkan sendiri.
su
visudo
your_username_here ALL=(ALL) ALL
:wq
exit
sudo
sudo
, jadi dia mungkin bukan yang administrator sistem, atau bahkan salah satu administrator sistem elit. Dia mungkin hanya pengguna yang berpikir dia mungkin telah diberikan sejumlah kekuatan terbatas. Apa yang membuat Anda curiga dia bisa pergi su
?