Geçersiz bir '/ etc / sudoers' dosyasını nasıl değiştirebilirim?


238

Geçersiz sudoers dosyasını nasıl düzenlerim? Aşağıdaki hatayı atar ve düzeltmek için tekrar düzenlememe izin vermiyor.

İşte olanlar:

$ sudo visudo
>>> /etc/sudoers: syntax error near line 28 <<<
sudo: parse error in /etc/sudoers near line 28
sudo: no valid sudoers sources found, quitting

2
Bu sayfayı dikkate alarak harika bir soru bu hatayı yaratır help.ubuntu.com/community/RootSudoTimeout

Yanıtlar:


361

Modern bir Ubuntu sisteminde (ve diğer birçok GNU / Linux dağıtımında), bozuk bir sudoersdosyayı düzeltmek aslında oldukça kolaydır ve yeniden başlatma, canlı bir CD kullanarak veya makineye fiziksel erişim gerektirmez.

Bunu SSH ile yapmak için, makineye giriş yapın ve komutu çalıştırın pkexec visudo. Makineye fiziksel erişiminiz varsa, SSH gerekli değildir; sadece bir Terminal penceresi açın ve bu pkexeckomutu çalıştırın .

Size (veya başka bir kullanıcıya) varsayarsak olarak programları çalıştırmak için yetkili rootPolicyKit ile, şifrenizi girebilir ve o zaman çalışacak visudoşekilde rootve siz çözebilirsiniz /etc/sudoers.

Yapılandırma dosyalarından birini düzenlemeniz gerekiyorsa /etc/sudoers.d(bu durumda nadir görülür, ancak mümkündür), kullanın .pkexec visudo -f /etc/sudoers.d/filename

Sorunu gidermek için kök olarak ek sistem yönetimi komutları yerine getirmeniz gereken bir durum varsa (bu durumda da nadir görülür, ancak diğerlerinde yaygındır), ile etkileşimli bir kök kabuğuna başlayabilirsiniz pkexec bash. Genel olarak konuşursanız, birlikte çalıştığınız grafiksel olmayan komutlar yerine sudoçalıştırılabilir pkexec.

(Sistemde rootPolicyKit'te olduğu gibi programları çalıştırmaya yetkili birden fazla kullanıcı hesabı varsa , bu işlemlerden herhangi birinde şifrenizi sormadan önce hangisini kullanmak istediğinizi seçmeniz istenir.)


Bu işe yaramazsa - örneğin, PolicyKit aracılığıyla programları root olarak çalıştırmaya yetkili kullanıcılar yoksa - o zaman bir Ubuntu canlı CD'sinden önyükleme yapın (muhtemelen Ubuntu'yu yüklemek için kullandığınız CD gibi) ve dosya sistemini yüklü sistem Bunu sudo parted -lbölümlerinizi görüntülemek için çalıştırarak yapabilirsiniz - muhtemelen yalnızca bir ext4 bölümü vardır ve bu kök dosya sistemidir.

Kurulu Ubuntu sisteminin kök dosya sisteminin / dev / sda1 konumunda olduğunu varsayalım. Sonra onu monte edebilirsiniz sudo mount /dev/sda1 /mnt. Ardından kurulu sistemin sudoers dosyasını düzenleyebilirsiniz sudo nano -w /mnt/etc/sudoers. Veya daha da iyisi ile düzenleyebilirsiniz.

sudo visudo -f /mnt/etc/sudoers

(bu, bir sudoers dosyasını yanlış sözdizimiyle kaydetmenizi önleyecektir).


7
pkexec / usr / sbin / visudo debian 7'de çalıştı
marinara

10
KUTSAL İNEK! Çok teşekkürler! Pastırmamı kurtardım. Etc / sudoers.d / dizinine önerildiği şekilde bir DÜZENLİ METİN EDİTÖRÜ KULLANMA (DON-T__D-O__T-HAT !!!) kullanılarak bir dosya eklendi. Suçlu dosyayı düzenleyerek, DAHİL, DAHİL, ayrıcalık yapma yeteneğini kaybetti. Bu, dosyayı düzenlemeye yardımcı oldu. Garipti, önce / etc / sudoers 'ı düzenlemek zorunda kaldım, sonra diğer dosyada hataları buldum ve onu benim için açtı. EVEN WEIRDER / in / etc / sudoers dosyasındaki 'inlcudedir /etc/sudoers.d' yönergesini yorumladı ve hala içeriyor.
Dennis,

4
@Dennis Biraz kafa karıştırıcı, dosyalardaki #includeyönergeler sudoersözel olarak ele alınır; öncü #, hattın geri kalanının yorum olarak yorumlanmasına neden olmaz, bu durumda. As man sudoersder ki: "pound işareti ( '#') ... Bir #include direktifi veya sürece parçası olmadığı sürece (bir yorum belirtmek için kullanılır" Ayrıca bkz visudo: #includedir sudoers.d (arşivlenmiş lzone.de/ blog ).
Eliah Kagan

5
Benim kullanıcı sudoer ama bu hatayı aldım : Başka bir kullanıcı olarak komut yürütme
SuB

2
Ubuntu 16.04'te pkexec visudodoğru şifreyi kabul etmeyen bir şifre sorulur. Bir "YETKİLEME BAŞARISIZ" hatası veriyor.
Juha Untinen,

54

Her zaman visudosudoers dosyanızı düzenlemek için kullanın , asla doğrudan kendiniz düzenlemeyin. Doğrulamadıkça diske kaydetmenizi önler.



4
Afeti önlemeyecek. Kendinizi geçerli bir şekilde reddetmek yeterince kolaydır.
Joshua,

Visudo, metinler tarafından kullanılabilir mi? Öyleyse nasıl?
Lukas

Visudo yüklü değil. Bu yüzden pkexec vim yaptım. Sonra kullanıcıların listesini gösterir ve şifre ister. Şifre verdiğimde, "Başka bir kullanıcı olarak komutu çalıştırırken hata oluştu: Yetkili değil" hatası veriyor. Lütfen yardım
Shyamkkhadka

24

Yazın:

pkexec visudo

Ardından son satırı değiştir

#includedir /etc/sudoers

Kime:

#includedir /etc/sudoers.d

Sorunu çözmeli.


2
Önde #gelenleri kaldırmanın #includedirsözdizimi hatalarına neden olduğunu fark ettim #, yönergenin bir parçası, en azından Ubuntu 12.10.
SAFX

1
Bu bana çok fazla baş ağrısı kazandırdı. Bir ton teşekkürler :)
Addo Solutions

1
Visudo yüklü değil. Bu yüzden pkexec vim yaptım. Sonra kullanıcıların listesini gösterir ve şifre ister. Şifre verdiğimde, "Başka bir kullanıcı olarak komutu çalıştırırken hata oluştu: Yetkili değil" hatası veriyor. Lütfen yardım
Shyamkkhadka

11

Benim gibi başka birinin pkexec'i kurulu değilse ya da sudoers dosyasını değiştirmek için vi, visudo, nano veya başka bir düzenleyiciyi çalıştıramadıysanız, bu işlemden emin olabilirsiniz.

  • reboot
  • kurtarma modu için seçeneğe sahip olmak için önyükleme yaparken shift tuşunu basılı tutun (girin)
  • komut satırını root olarak girin (grubumdaki son seçenek)
  • rw için boot aygıtı yeniden düzenleyin ve kullanıcı için exec hakkı uygulayın ve dosyayı düzenleyin

    mount -n -o remount,rw /
    chmod u+x /etc/sudoers
    nano /etc/sudoers
    

bu hatayı düzeltin ve mutlu olun :)


@ Eliah-kagan tarafından önerilen pkexec çözümü daha kolay gibi gözükse de, bu daha evrensel. Benim makinemde yüklü hiçbir pkexec olmadığı ve elbette bunu kuramadım çünkü sudo apt-get install pkexec'i bir şekilde çalışmadı.
running.t

Ayrıca bu yaklaşım içinde visudobunun yerine kullanırdım nano /etc/sudoers.
pa4080

7

Eğer berbat ederse sudoersdosyayı, şunları yapmanız gerekir:

  • Kurtarma moduna geri dönün (önyükleme sırasında kaçış tuşuna basın, grub ekranında kurtarma modu seçeneğini seçin)
  • 'Enable networking' seçeneğini seçin (eğer dosya sisteminiz salt okunur olarak monte edilemez. Kim bilir)
  • 'Kök kabuğuna bırak' seçeneğini seç
  • koş visudo, dosyanızı düzelt
  • Normal grub seçeneğiyle yeniden başlat

kaynak: - http://mario.net.au/content/recover-etcsudoers-ubuntu-1204


Merhaba, iptables, mevcut sistemin dosyalarını siler mi?
Shyamkkhadka

6

Yanlış bir şey yok #include sudoer.d remove #include sudoer.d herhangi bir fark yaratmaz.

Ancak lütfen sözdizimi hatalarınızın olmadığından emin olun. Aynı sorunu yaşadım ancak düzeltmek için saatler harcadım ve sadece sözdizimi hataları olduğunu anladım. El kitabına bakın ve doğru yapın.

Örneğin, Kullanıcı adınızı söyleyin: dolly, yanlış kullandım

 dolly ALL = (ALL) ALL NO PASSWD: ALL

doğru sözdizimi

dolly ALL = (ALL) ALL //give permission to everything, not good

veya

dolly ALL=(ALL) NOPASSWD:/usr/bin/thurderbird //good, give specific permission

Bu yardımcı olur umarım


Sözdizimi hatalarınızın olmadığından emin olmaktan daha iyi bir yaklaşım visudo, bu dosyaları düzenlerken her zaman kullanmaktır ; bu, dosyayı değiştirmeden önce, sözdizimi hatalarının bulunmadığından emin olmanızı sağlar. visudosadece düzenleme için değil /etc/sudoers- aynı zamanda içinde dosyalar da oluşturacak ve düzenleyecektir /etc/sudoers.d. Aynı zamanda istediğiniz metin editörü ile çalışacaktır. Detaylar için man sayfasına bakınız.
Eliah Kagan

Belirli izinler gelince, bunun yalnızca çok basit komutlar / uygulamalar için yararlı olduğunu unutmayın; çünkü yeterince karmaşık bir uygulama ( thunderbirdhiçbir zaman root olarak çalıştırılmaması da dahil) , root olarak çalıştırıldığında kullanıcıya tam sistem erişimini etkili bir şekilde sağlar. Görünüşe göre basit işlevsellik bile tam kök erişiminin kapısını açıyor. Örneğin, bir dosyayı kök olarak rasgele bir konuma kaydedebilen bir programı çalıştırabilen bir kullanıcı tam kök erişimi sağlayabilir (kendi yüklemelerini yapabilirler /etc/sudoersveya sözdizimi sınırlamaları bunu engellerse, kendi yüklemelerini yapabilirler /etc/crontab).
Eliah Kagan

3

kurtarma modunu çalıştır, ardından şunu yaz

chown -R kökü: root /etc/sudoers.d
chmod u = rwx, g = rx, o = rx /etc/sudoers.d/
chmod u = r, g = r, o = /etc/sudoers.d/*

sadece grup ve kullanıcı kökü okuma ayrıcalığına sahip olmalıdır.


3

Ayrıca + ttyile konsolda root olarak giriş yapabilirsiniz ( 1 ile 6 arasında) ve koşabilirsiniz .CtrlFnFnvisudo


2

Grubun içindeyken de boot girişinizi düzenleyebilirsiniz.

PC'nizi yeniden başlatın ve grubun göstermesini bekleyin. Sonra düzenlemek için "Ubuntu" girişindeki "e" ye basın.

"Linux =" veya "kernel =" ile bir satır arayın ve bu satırın sonuna "tek" ekleyin.

Sonra geçici olarak değiştirilmiş bu önyükleme girişini önyüklemek için F10 tuşuna basın. Bu size kök haklarına sahip bir kabuk (GUI'siz) verecek ve sudoers dosyasını s.th ile düzenleyebilirsiniz. nano / etc / sudoers gibi önceki durumuna dönün.

Sonra yeniden başlatın ve bitti.


2
pkexec visudo

sonra hatalarını geri al


1
pkexec kullanmak için gerekli değil
Braiam

@Braiam visudoroot olarak çalıştırılmalıdır. Eğer sudoçalışmazsa, pkexecbazen yapar. Bu benim önceki cevabımın kapsamına giriyor ... ama doğru bir cevap, visudokendi başına (kök olarak çalıştırılmadığında) işe yaramayacak ve önerileri diğer cevaplarla önemli ölçüde çakıştığında bile doğru, kısa cevaplarda değer olabilir. Elbette, biri kurtarma moduna girerse, bu bir kök kabuğudur ve o zaman ne gibi komutlar için gerekli sudodeğildir . Belki de demek istediğin bu ...visudopkexec
Eliah Kagan

0

Bir VirtualBox üzerinde çalışan Ubuntu 16.04'te (bir fark olmamalıdır), yukarıdaki yöntemler benim için işe yaramadı (dosyanın sonundaki geçersiz satır). İş neydi:

  1. VirtualBox'u yeniden başlatın
  2. Konsolda kullanıcı adınızı ve şifrenizi sorana kadar normal önyüklemesini sağlayın
  3. Normalde kullanıcı adınızla giriş yapın
  4. Sonra konsola girdiğinizde (kutunuzun bir GUI'ye açılmaması şartıyla), sadece komutu su -verin ve sonra kendi kullanıcı adınızın şifresini girin.
  5. Çok kırılmamış veya boş root@ubuntu-xenial:~#değilse, hemen sorulmalıdır /etc/sudoers. Bu durumda ne olacağından emin değilim.
  6. Sonra visudodosyayı çalıştırabilir ve düzeltebilirsiniz.
  7. Sonra Ctrl + Xdeğiştirilmiş arabellek Kaydet isteyecektir. Basın YveEnter
  8. Kutuyu yeniden başlatın ve şimdi çalışması gerekir.

Durumda senin /etc/sudoersboş veya bir şey eksik olur ve düzenleyebilirsiniz, daha sonra burada mayın içeriği var:

Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

root ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL

%sudo ALL=(ALL:ALL) ALL

4. adımınız mantıklı değil, yalnızca root şifreniz normal kullanıcı ile aynı olduğunda çalışır.
alfred

Yerel bir VM'de çok yaygın olan.
Juha Untinen,

0

İyi uygulama: Bir yedekleme terminal penceresi ve sudo suorada çalıştırın . Başka bir terminalde visudo veya sudo vim / etc / sudoers komutunu çalıştırın. Herhangi bir sorun çıkarsa, terminal 1'e geri dönün ve dosyayı düzeltin. Neden sadece bir terminalden sudo suönce kaçmıyorsunuz diye sorabilirsiniz. visudoBu da işe yarıyor ancak bunu bilmeden terminali kapatma riskiniz daha yüksek.


-1

Daha basit bir çözüm var. Yeniden başlatma olmadan, kurtarma modu veya pkgexec( pkgexecişe yaramadı ve neden veya nasıl kullanmam gerektiğine dair hiçbir fikrim yok), basitçe:

su root # switch to root user, without using sudo (which is broken at this point)
your_favorite_editor /etc/sudoers # e.g. nano

Ve sonra sadece sözdizimi hatasını düzeltin!


Oyunun nesi var? Benim için mükemmel çalıştı.
rien333
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.