Lari sudo -v. Ini biasanya digunakan untuk memperpanjang batas waktu kata sandi sudo Anda, tetapi dapat digunakan untuk menentukan apakah Anda memiliki sudohak 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.
Terima kasih. sudo -v bekerja untuk saya. Halaman manual mengatakan saya bisa menjalankan sudo-l juga tetapi meminta kata sandi. Mengapa demikian?
Bruce
2
@ Bruce Saya menduga di sini, tetapi jika tidak, seseorang (atau program yang Anda jalankan) dapat mengetahui program apa yang dapat dijalankan (mungkin tanpa memasukkan kata sandi) oleh pengguna Anda saat ini dan mencoba menggunakan informasi itu dengan jahat.
Daniel Beck
Menurut Anda apa artinya ketika saya mendapatkan ini kembali 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 sudoberhasil menjalankan perintah lain, tetapi unable to resolve hostpesan itu membuat saya khawatir sesuatu yang lain mungkin funky pada host.
Patrick M
@ Patrickrick Sepertinya ada masalah dengan sudoersfile. Di sana Anda dapat menentukan host mana yang diizinkan pengguna untuk menjalankan perintah tertentu (ini berguna saat menggunakan sudoersfile yang sama di beberapa mesin). Mungkin nama host yang ditentukan dalam file itu tidak dapat diatasi. Coba periksa dengan hostperintah misalnya.
Ale
Tidak berfungsi untuk saya di RHEL 6, sudo -vmemberi "xx tidak ada dalam file sudoers. Insiden ini akan dilaporkan."
79E09796
43
Ini sangat sederhana. Lari sudo -l. Ini akan mencantumkan hak istimewa sudo yang Anda miliki.
Mungkin kalah karena mengulangi apa yang dikatakan Daniel Beck hampir dua tahun lalu.
G-Man
1
Atau jelaskan apa yang terjadi, ini adalah komentar, paling-paling
Ramhound
2
@ Jonathan: jika kamu mau skrip di ubuntu rigt sekarang, sudo -lminta kata sandi apakah kamu bisa sudo atau tidak. sudo -vhanya bertanya jika Anda bisa, dan "$(whoami)" != "root"tidak akan pernah bertanya apa pun di linux apa pun.
bksunday
@ bksunday Anda benar. Saya menguji sekarang pada Debian Jessy yang bersih dan mengkonfirmasi hasil Anda. Komentar saya sebelumnya (dihapus sekarang) mungkin merupakan hasil pengujian pada mesin yang saya miliki beberapa sudoprivs.
Jonathan Ben-Avraham
@ G-Man tetapi jawaban sederhana ini membantu saya lebih dari jawaban Daniel yang mungkin lebih tepat, di mana perintah ini adalah yang paling disayangkan ...
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 1fi
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:
berhasil bagi saya untuk skrip. Ungkapan ini memberi 0jika pengguna saat ini dapat memanggil 'sudo' dan 1jika tidak.
Penjelasan:
Parameter tambahan -nuntuk sudomencegah interaktivitas.
Output $Adari 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
"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.
OP "mendapat kesulitan" untuk menjalankan 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?
Jawaban:
Lari
sudo -v
. Ini biasanya digunakan untuk memperpanjang batas waktu kata sandi sudo Anda, tetapi dapat digunakan untuk menentukan apakah Anda memilikisudo
hak istimewa.Kutipan halaman manual:
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
.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.sumber
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 telahsudo
berhasil menjalankan perintah lain, tetapiunable 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 menggunakansudoers
file yang sama di beberapa mesin). Mungkin nama host yang ditentukan dalam file itu tidak dapat diatasi. Coba periksa denganhost
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.sumber
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:
karena itu tidak akan macet pada input kata sandi jika Anda tidak memiliki
sudo
akses.Anda juga dapat mengaturnya dalam variabel seperti:
Catatan: Di macOS, Anda perlu menginstal
coreutils
, misbrew install coreutils
.sumber
timeout
yang tidak tersedia secara default, mis. Pada OS X?coreutils
, misbrew install coreutils
.Jawaban Gerald Schade di sini , masih bisa ditingkatkan!
Menggunakan
Berikut adalah contoh lengkap penggunaan dalam skrip :
sumber
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:berhasil bagi saya untuk skrip. Ungkapan ini memberi
0
jika pengguna saat ini dapat memanggil 'sudo' dan1
jika tidak.Penjelasan:
Parameter tambahan
-n
untuksudo
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).
sumber
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:
(dari akhir 2015 mwhahaaa)
sumber
"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.
-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.
sumber
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
sumber
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 pergisu
?