Parola olmadan belirli sudo komutlarını nasıl çalıştırırım?


211

Belirli bir makinede sık sık sudoher zaman ve sonra komutları çalıştırmam gerekiyor . sudoÇoğu durumda parola girme konusunda iyiyim .

Ancak, şifre girmeden çalıştırmak istediğim üç sudokomut var :

  • sudo reboot
  • sudo shutdown -r now
  • sudo shutdown -P now

Bu komutları şifre korumasından nasıl hariç tutabilirim sudo?


Yanıtlar:


283

Kullanım NOPASSWDyönergesi

Sen kullanabilirsiniz NOPASSWDsizin de yönergesini /etc/sudoersdosyasında .

Kullanıcınız aranıyorsa userve ana makineniz aranıyorsa, aşağıdaki hostsatırları ekleyebilirsiniz /etc/sudoers:

user host = (root) NOPASSWD: /sbin/shutdown
user host = (root) NOPASSWD: /sbin/reboot

Bu, kullanıcının bir şifre girmeden useristenen komutları çalıştırmasına izin verecektir host. Diğer tüm sudoed komutları hala bir şifre gerektirecektir.

sudoersDosya sayfasında belirtilen komutlar , man sayfasında açıklandığı şekilde, tamamen kalifiye olmalıdır (yani çalıştırılacak komuta giden mutlak yolu kullanarak) . Göreceli bir yolun sağlanması sözdizimi hatası olarak kabul edilir.sudoers

Komut takip eden bir /karakterle bitiyorsa ve bir dizine işaret ederse, kullanıcı o dizinde herhangi bir komutu çalıştırabilir (ancak içindeki hiçbir alt dizinde değil). Aşağıdaki örnekte, kullanıcı userdizindeki herhangi bir komutu çalıştırabilir /home/someuser/bin/:

user host = (root) NOPASSWD: /home/someuser/bin/

Not: Kendinizi sistemden kilitlemediğinizden emin olmak visudoiçin sudoersdosyayı düzenlemek için her zaman bu komutu kullanın - dosyaya yanlışlıkla yanlış bir şeyler yazmanız durumunda sudoers. visudodeğiştirilen dosyanızı geçici bir yere kaydeder ve değiştirilen dosyanın hatasız ayrıştırılması durumunda sadece gerçek sudoersdosyanın üzerine yazar .

/etc/sudoers.dDeğiştirmek yerine kullanmak/etc/sudoers

/etc/sudoersDosyayı düzenlemeye alternatif olarak , iki satırı /etc/sudoers.dörneğin yeni bir dosyaya ekleyebilirsiniz /etc/sudoers.d/shutdown. Bu, sudohaklardaki farklı değişiklikleri ayırmanın zarif bir yoludur ve ayrıca orijinal sudoersdosyayı daha kolay yükseltme için el değmeden bırakır .

Not: Yine, visudokendinizi sistemden kilitlemediğinizden emin olmak için dosyayı düzenlemek için bu komutu kullanmanız gerekir :

sudo visudo -f /etc/sudoers.d/shutdown 

Bu ayrıca otomatik olarak yeni dosyanın sahibinin ve izinlerinin doğru ayarlanmasını sağlar.

Eğer sudoerskarışık

visudoDosyalarınızı düzenlemek için kullanmadıysanız ve ardından yanlışlıkla /etc/sudoersbir dosyayı karıştırdı ya da bir dosyayı karıştırdıysanız, /etc/sudoers.dkilitleneceksiniz sudo.

Çözüm, pkexechangisinin alternatif olduğunu kullanarak dosyaları düzeltmek olabilir sudo.

Düzeltmek için /etc/sudoers:

pkexec visudo

Düzeltmek için /etc/sudoers.d/shutdown:

pkexec visudo -f /etc/sudoers.d/shutdown

Sahiplik ve / veya izinler herhangi bir sudoersdosya için hatalıysa , dosya bu durumda göz ardı edilir, sudobu nedenle kendinizi bu durumda kilitli bulabilirsiniz. Yine, bunu pkexecdüzeltmek için kullanabilirsiniz .

Doğru izinler şöyle olmalıdır:

$ ls -l /etc/sudoers.d/shutdown 
-r--r----- 1 root root 86 Jul 16 15:37 /etc/sudoers.d/shutdown

Sahipliği ve izinleripkexec düzeltmek için böyle kullanın :

pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown

2
İki satır özellikle bu iki komutu ifade eder. Eğer userverilen diğer yollarla değil sudohaklar başka komutlar bu kullanıcı tarafından sudoed edilebilir. Göz at man sudove man sudoers.
mgd

4
@StanKurdziel Mac OS X Yosemite bu çizgi ile çalıştı ve iyi çalıştı: mgd ALL=(root) NOPASSWD: /var/root/test. Ben kullanıcı mgdve "tüm ana bilgisayarlardan"ALL anlamına gelir . izinlere sahip basit bir "Merhaba Dünya" kabuk script: . Yaptığım hiçbir sisteme başka değişiklik. /var/root/test-rwx------ 1 root wheel 27 12 Jun 09:54 /var/root/test
mgd

2
hostSudoers dosyasında neler var ?
user106563

1
Bu bir cevap değil, NOPASSWD direktifiyle ilgili neredeyse tam bir rehber. Teşekkür ederim.
Eray

1
@Michael lütfen man sayfasını oku. Hepsi orada yazılı. Alıntı yapmak için: Ancak, komut satırı argümanlarını da (joker karakterler dahil) belirleyebilirsiniz. Alternatif olarak, komutun yalnızca komut satırı argümanları olmadan çalıştırılabileceğini belirtmek için "" belirtebilirsiniz.
mgd

3

Üzgünüm ama bu konuda çok fazla karışıklık var ve bazı gerçekten karmaşık cevaplar var, sanırım biri yanlış anlamadan ve çılgınca bir şey yapmadan önce burada tartmam gerektiğini düşünüyorum.

Visudo kullanarak !!

Config'e şu satırları ekleyin:

ALL ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown

Bu komutların herhangi bir kullanıcıdan yürütülecek parametrelerle yeniden başlatılmasını ve kapatılmasını sağlar.

Lütfen yığın değiştirme, sadece basit ve kısa cevaplar verin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.