Son zamanlarda bundan dolayı başım belaya girdi.
$sudo vim /etc/motd
[sudo] password for bruce:
bruce is not in the sudoers file. This incident will be reported.
Sudo erişimine sahip olup olmadığımı kontrol etmenin bir yolu var mı?
Son zamanlarda bundan dolayı başım belaya girdi.
$sudo vim /etc/motd
[sudo] password for bruce:
bruce is not in the sudoers file. This incident will be reported.
Sudo erişimine sahip olup olmadığımı kontrol etmenin bir yolu var mı?
Yanıtlar:
Run sudo -v
. Genellikle sudo şifrenizin zaman aşımını uzatmak için kullanılır, ancak sudo
ayrıcalıklarınızın olup olmadığını belirlemek için kullanılabilir .
$ sudo -v
Sorry, user [username] may not run sudo on [hostname].
Man sayfa alıntı:
-V (doğrula) seçeneği verilirse, sudo kullanıcının zaman damgasını günceller, gerekirse kullanıcı şifresini ister. Bu, sudo zaman aşımını 5 dakika daha uzatır (veya zaman aşımının sudoer'da ne olduğu). Ancak bir komut çalıştırmaz.
Kullanıcınızın yalnızca belirli komutları çalıştırmasına izin verilirse , bu komut farklı yetkilere sahip bir şeyi çalıştırmanıza izin verildiğini gösteren çalışır . Bu durumda izin verilmeyen bir komutu yerine getirmeye çalışırken mesaj farklı görünse de (ve hiçbir posta köke gönderilmediyse ), yöneticiler okursa başınız derde girebilir /var/log/secure
.
$ sudo ls
[sudo] password for [username]:
Sorry, user [username] is not allowed to execute '/bin/ls' as root on [hostname].
Farklı ayrıcalıklarla neleri çalıştırmanıza izin verildiğini bulmak için kullanabilirsiniz sudo -l
. Bu komutun şifrenizi girmenizi gerektirdiğini unutmayın.
patrick@<host>:~$ sudo -v sudo: unable to resolve host <host>
? Şifremi girdim ve yetkisiz hiçbir şey almadım. sudo
Başarılı bir şekilde diğer komutları çalıştırmam gerektiğini biliyorum , ancak bu unable to resolve host
mesaj bana ana bilgisayarda korkak olabilecek başka bir şeyden endişe etti.
sudoers
. Burada, belirli bir komutu çalıştırmak için hangi kullanıcıya bir kullanıcının yetkilendirileceğini belirtebilirsiniz (bu, aynı sudoers
dosyayı birden fazla makinede kullanırken kullanışlıdır ). Muhtemelen bu dosyada belirtilen ana bilgisayar adı çözülemedi. host
Örneğin komutuyla kontrol etmeyi deneyin .
sudo -v
"xx sudoers dosyasında değil. Bu olay bildirilecek."
Bu çok basit. Run sudo -l
. Bu, sahip olduğunuz sudo ayrıcalıklarını listeler.
sudo -l
, sudo yapıp yapamayacağınız bir şifre ister. sudo -v
Sadece yapıp yapamayacağınızı sorar ve "$(whoami)" != "root"
hiçbir linux'ta hiçbir şey sormaz.
sudo
ayrıcalıklara sahip olduğum bir makinede yapılan testlerden kaynaklanıyordu .
İşte komut dosyası dostu sürüm:
timeout 2 sudo id && echo Access granted || echo Access denied
sudo
erişiminiz yoksa şifre girişinde takılı kalmayacağından .
Ayrıca şunu gibi bir değişkende ayarlayabilirsiniz:
timeout 2 sudo id && sudo="true" || sudo="false"
echo "$sudo"
Not: MacOS'ta coreutils
, örneğin yüklemeniz gerekir brew install coreutils
.
timeout
Varsayılan olarak mevcut olmayan yerler için alternatifler , örneğin OS X?
coreutils
, örneğin brew install coreutils
.
Gerald Schade'nin cevabı burada , hala geliştirilebilir!
kullanım
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
İşte bu bir komut kullanım komple örneği :
#!/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
Benim için ' sudo -v
' ve ' sudo -l
' bir senaryoda çalışmadı çünkü bazen etkileşimli (benden yukarıda bahsedildiği gibi bir şifre sormak istiyor). ' sudo -n -l
' de işe yaramadı, eksik parola nedeniyle sudo izinlerim olmasına rağmen '1' çıkış kodunu verdi. Ancak komutu aşağıdakilere genişletmek:
A=$(sudo -n -v 2>&1);test -z "$A" || echo $A|grep -q asswor
senaryo için benim için başarılı oldu. Bu ifade 0
, şu anki kullanıcının 'sudo' olup 1
olmadığını söyler .
Açıklama:
ek parametre -n
için sudo
etkileşim önler. ' ' Komutunun
çıktısı
şunlar olabilir : - boş (bu durumda, geçerli kullanıcı tarafından sudo çağrılabilir) veya:
- geçerli kullanıcının sudo için yetkilendirilmediğine dikkat edin, veya:
- parola (bu durumda kullanıcı yetkilidir).
("asswor", İngilizce "şifre" ve Almanca "Passwort" için de uygun olacaktır).$A
sudo -n -v 2>&1
oylama ve yorum yapma konusunda düşük rütbeme sahibim, ancak Gerald Schade'nin cevabını değiştirmek istedim, çünkü bunu daha önce tek yolunu buldum ve başka hiç kimsenin bilmediğini düşündüm - şimdiye kadar: D
btw benim çözümüm:
[[ "$(whereis sudo)" == *'/'* && "$(sudo -nv 2>&1)" != 'Sorry, user'* ]]
(2015 yılının sonundan itibaren mwhahaaa)
"Sudo access" lezzetlerle geliyor. İki temel lezzet: İlk önce / etc / sudoers dosyasında sudo erişimi için sizin veya bir üyenizin bulunduğu bir grubun ayarlanması gerekir.
İkincisi, şifrenizi bilmeniz veya yakın zamanda bir sudo komutu vermeniz gerekiyor. Son zamanlarda, zaman aşımının süresi dolmamış. (Eğlenceli gerçek: sudoer'in dosyasında zaman aşımına uğratabilirsiniz.)
Sıklıkla bazı adımlar atması gereken bir betik prologundaki ikinci tür erişimi test etmek istiyorum. Bu kontrol başarısız olduğunda kullanıcıya senaryoyu çalıştırmadan önce 2. tür erişimi etkinleştirmesi gerektiğini tavsiye edebilirim.
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, sudo’ya şifrenin stdin’den okunmasını söyler. -P boş bir bilgi istemi ayarlar. -K ikinci erişim zamanını temizler.
/ Dev / null dizinine stderr gönderdiğinden, kullanıcının ilk sudo erişimi olup olmadığını da denetler.
Takip Bu Sudoers dosyasını görüntülemek için adımlar. Eğer oradaysan, sudoların var. Değilse, kendinizi ekleyebilirsiniz.
su
visudo
your_username_here ALL=(ALL) ALL
:wq
exit
sudo
sudo
, bu yüzden muhtemelen sistem yöneticisi değil , hatta seçkin sistem yöneticilerinden biri bile değil . Muhtemelen, kendisine sınırlı güç verilebileceğini düşünen bir kullanıcıdır. Gidebileceğinden şüphelenen nedir su
?