Neden sistemde /etc/sudoers.d var? Nasıl düzenlemeliyim?


48

Geçen sefer bunların riskini sordum (/ etc / sudoers içinde):

    user_name ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
    %group_name ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf

Bu problemi düşünürken, /etc/sudoers.d dizinini buldum . Dizindeki dosyalar / etc / sudoers ile benzer işlevlere sahip olmalıdır (yani yukarıdaki komut dosyaları /etc/sudoers.d içinde bile hala sorunludur) ve bir makalede dizini kullanmamamız gerektiğini çünkü bir visudodosyayı dizinde kullanmamamız gerektiğini söyledi . o. Yani, sudodizinde bir hata yaparsak kullanma hakkımızı kaybederiz .

Eğer bu doğruysa, neden /etc/sudoers.d kullanıyoruz ? Yoksa /etc/sudoers.d içindeki dosyaları düzenlemek için iyi bir yolumuz var mı?

Yanıtlar:


45

/etc/sudoers.dSistemi yükseltirseniz, dosyalarda yapılan değişiklikler yerinde kalır. Bu, sistem yükseltildiğinde kullanıcı kilitlenmelerini önleyebilir. Ubuntu bu davranışı sever. Diğer dağıtımlar da bu düzeni kullanıyor.

Deneyimlerim, bu dizindeki dosyalardaki kuralların olduğundan daha gevşek olduğu yönünde oldu /etc/sudoers. Bu dahil:

  • Dosyadaki hatalar sudobaşarısızlığa neden olmadı . Ancak, dosya göz ardı edildi.
  • İzin kuralları daha az katı görünüyor. Uygulanabilir grubun veya başkalarının dosyayı okumasını sağlar. Bunun mümkün olduğuna inanmıyorum /etc/sudoers. rootGüvenliği sağlamak için yazma izinleri kısıtlanmalıdır . Sudo'nun geçerli Ubuntu sürümü, grup veya başkaları için okuma izinlerine izin verir. (Bu özellik, root erişimi gerektirmeden sudo erişiminin denetlenmesini sağlar.)

visudoKomut sadece varsayılan /etc/sudoers. -fSeçeneği ile belirttiğiniz herhangi bir dosyayı düzenler ve doğrular . Bu özelliği, otomatik olarak /etc/sudoersveya içine yüklenecek dosyaları düzenlemek için kullanıyorum /etc/sudoders.d. Ancak, diğer dosyalardan tanım bulunamadı. Dosyayı bağımsız yapmak en iyisidir.

Tek başına dosyalara sahip olma özelliği, bir uygulamanın sudoyükleme sırasında yeteneği etkinleştirmesini ve yüklenmediğinde bunları kaldırmasını kolaylaştırır . Otomatik yapılandırma araçları da bu özelliği kullanabilir.

Bu özelliği, belirli sistemlerde belirli kullanıcı gruplarına erişim vermek için gereken değişiklikleri izole etmek için kullandım.


1
Bahsettiğiniz sudoların iki özelliği gerçekten önemli ve faydalı görünüyor. Teşekkür ederim!
Ocak'ta 15:15

Cevabımı gör ve neden onların sudoer'in özellikleri olmadığına dair uyarımı.
dragon788

1
'Dosyadaki hatalar sudobaşarısızlığa neden olmadı' ifadesine kesinlikle katılmıyorum . RHEL'de sudo'yu /etc/sudoers.d dosyasındaki yanlış sözdizimiyle kırdım. Bu düzeltmek için büyük çaba sarf etti ve tavsiyenin her zaman visudo -fbu dosyaları düzenlemek için kullanması gerektiğini düşünüyorum .
79E09796

@ 79E09796 /etc/sudoers.d içindeki dosyaları diğer dosyalarda kurallarla ilgili sorunlara neden olmadan kırdım. YMMV. Sizi sisteme sokan sudo yapılandırmasını bozarsanız sorun yaşarsınız. Sistemi yeniden başlatmak için erişiminiz varsa, kurtarma modunda yeniden başlatmak ve dosyayı düzeltmek nispeten kolaydır. Düzenlemek veya en azından sudo yapılandırma dosyalarındaki değişiklikleri doğrulamak için visodo kullanmanın en iyi yöntem olduğunu kabul ediyorum.
BillThor

62

Evet, visudobu dosyaları düzenlemek için kullanabilirsiniz . Tek yapmanız gereken, -fseçenekle düzenlemek istediğiniz dosyanın adını belirtmektir . Örneğin:

visudo -f /etc/sudoers.d/somefilename

Veya gerekirse:

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

belgeleme

Kimden man visudo:

-f sudoers
Sudoers dosya konumunu belirtin ve değiştirin. Bu seçenekle visudo, varsayılan, etc / sudoers yerine tercih ettiğiniz sudoers dosyasını düzenler (veya kontrol eder). Kullanılan kilit dosyası, kendisine eklenen ".tmp" ile belirtilen sudoers dosyasıdır. Yalnızca check-in modunda, sudoer'ların standart girişten okunacağını belirten -f argümanı "-" olabilir.

Özetle:

  1. Söz dizimi: Hem visudove visudo -f aynı sözdizimini denetler .

  2. İzinler / Mülkiyet: Büyük sistemlerin yönetimine yardımcı olmak için eklenen bir özellik olarak , altında düzenlenen dosyalar visudo -fmülkiyet veya izinler açısından kontrol edilmez: bu, bir dosyanın çevrimdışı veya revizyon kontrol sisteminin bir parçası olarak sözdizimi kontrolüne izin verir.

Neden kullan /etc/sudoers.d/

Genellikle /etc/sudoersdağıtımınızın paket yöneticisinin kontrolü altındadır. Bu dosyada değişiklikler yaptıysanız ve paket yöneticisi onu yükseltmek istiyorsa, değişiklikleri el ile denetlemeniz ve bunların yeni sürüme nasıl birleştirildiğini onaylamanız gerekir. Yerel değişikliklerinizi /etc/sudoers.d/dizindeki bir dosyaya yerleştirerek, bu manuel adımdan kaçınırsınız ve güncellemeler otomatik olarak devam eder.

Bir sudodosyayı ne zaman dikkate almazsınız /etc/sudoers?

Senin Eğer /etc/sudoersdosya satırı içerir:

#includedir /etc/sudoers.d

sonra sudodizindeki dosyaları okuyacak /etc/sudoers.d.

İstisnalar:

  1. İsimleri biten dosyalar ~
  2. Adları .karakter içeren dosyalar

Bu, (a) paket yöneticilerinin rahatlığı için ve ayrıca (b) editörlerden gelen yedekleme dosyalarının yok sayılması için yapılır.


Teşekkürler, ama bir şüphem var. Mı visudo -fgüvenli?
aob

5
Evet, visudo -fnormal şekilde güvenli bir şekilde düzenler visudo. Bu yüzden sahip olduğumuz visudove neden -fseçenek sunduğunu da belirtiyoruz .
John1024

Kullanırken izinlerin nasıl göz ardı edildiğine dair büyük not, -fdaha sonra bunları /etc/sudoers.d/ 'a kopyalayan birini bayt edebilir.
dragon788

1
İstisna bölümü için TEŞEKKÜR EDERİZ. Dosyamı gibi bir şey olarak adlandırdım /etc/sudoers.d/mysudorules.sudove hayatım boyunca yapamadım, cevabınızı okumadan önce içerideki kuralların neden uygulanmadığını anlıyorum .
Zaroth

1
İstisnalardan bahsettiğiniz için teşekkür ederiz. Altındaki /sudoers.d/mysite.co.ukdosyam çalışmıyor ve yeniden adlandırdıktan sonra mysiteçalışıyor! :)
J86

20

neden /etc/sudoers.d adresine sahibiz?

Çünkü otomatik araçların (Şef veya Kukla gibi) tek tek dosyaları bu dizine bırakması /etc/sudoers, kırılgan olabilecek değişiklikler yapmaktan daha kolaydır .

İçindeki dosyalar /etc/sudoers.d(etkindir) birleştirilir. Bu modelin diğer örneklerini, ve /etcgibi göreceksiniz ./etc/cron.d/etc/logrotate.d


Başka benzer dizinler olduğunu bilmiyordum. Teşekkür ederim.
Ocak'ta 15:15

14

visudo -fBazı cevaplarda belirtildiği gibi kullanmanın bir başka yararı da karşılık gelen bir seçenek olmasıdır -cveya --checksudoers.d dosyasında veya sudoers.d içine koymak isteyebileceğiniz başka bir dosyada geçersiz bilgilere sahip olmadığınızı doğrular. Bu, çalıştırabilirsiniz gibi otomatik araçlar ile belirtilen durumlarda GERÇEKTEN kullanışlı.

sudo visudo -c -q -f /home/myuser/mysudoers && \
sudo chmod 600 /home/myuser/mysudoers && \
sudo cp /home/myuser/mysudoers /etc/sudoers.d/mysudoers

Bu, sessizce dosyayı kontrol eder (-q nedeniyle çıktı yok) ve yalnızca bir hata döndürmezse (1. çıkış geçersiz sudoers dosyası anlamına gelir) o zaman dosyayı sudoers.d içine kopyalar, bu şekilde dosyayı oluşturabilir ve ilk seferinde doğru yapmak zorunda kalmadan üzerinde çalışın (kullanmak sudo visudo -f /etc/sudoers.d/myfilebaşarılı olmak zorundadır veya düzeltmezseniz içeriği atar).

Ayrıca, diğer ifadelerden bu ifadelere ilişkin dikkatli olun .

Bu dizindeki dosyalardaki kuralların / etc / sudoers için olduğundan daha gevşek olduğu benim deneyimim oldu. Bu dahil:

Dosyadaki hatalar sudo'nun başarısız olmasına neden olmadı. Ancak, dosya göz ardı edildi. İzin kuralları daha az katı görünüyor. Uygulanabilir grubun dosyayı okumasına izin veriyorum. Bunun / etc / sudo ile mümkün olduğuna inanmıyorum.

/Etc/sudoers.d içindeki dosyaların / etc / sudoers ile aynı sözdizimine uyması gerekir, çünkü kapaklar altında sistem aynı dosya için birden fazla giriş varsa, "kazanan" da sonuncu olan tüm dosyaları bir araya getirir. tekil ayar.

Eğer /etc/sudoers.d/ içerisindeki dosyalar üzerinde izinler çok yanlış ise (dünyaya yazılabilir), o zaman yok sayılırlar, bu geçersiz dosyaların gözden kaçmasına neden olabilir, aksi halde sudogeçersiz bir sudo'yu alarak komutu ciddi şekilde kırabilirsiniz . d doğru izinlere sahip bir dosya.

Sudoers dosyalarının dünyaca okunabilir olmasına izin verebilir, yanlışlıkla 'other' yazmasına izin verirseniz, başka bir kullanıcı olarak ya da root terminalinden bu komutu çalıştırarak sudo yapmanız gerekir. Bu aynı zamanda, dosya root: root bir başkasına aitse kırılabilir.

sudo chmod 644 /etc/sudoers.d/mysudoers
sudo chown root:root /etc/sudoers.d/mysudoers

chmod o+w /etc/sudoers.d/vagrantÇalıştığımda artık serseri kullanıcı olarak sudo yapamayacağımı, parolamı istediğimi ve sonra başarısız olacağımı onayladım .

sudo -lUygulanan komut izinlerini başka bir geçerli sudo kullanıcısı olarak görüntülemek için çalıştırdığımda , dosya izinleri hakkında da bir uyarı aldım. Bu, o+wo sudo izinlerini veren dosyaya izinler uyguladığımda 'vagrant' kullanıcısının sudo kaybolduğunu onaylamak için kullandığım aynı komut .


3

Herhangi bir genel cevaba kısa bir addon ... diğer cevapların hiçbiri benim sorunumu düzeltti, bu önemliydi.

Çizgileriniz sudoers.d'da çalışıyor ancak sudoers.d'de çalışmıyorsa, #include etrafında hareket etmeyi veya sudoers.d dosyalarınızın sırasını değiştirmeyi deneyin (bir sayı ile önek ekleyerek). Görünüşe göre en belirgin şey dosyada ilk olmalı.

Gibi bir şey vardı:

somebody ALL=(ALL): somecommand
somebody ALL=(someoneelse) NOPASSWD: somecommand

Ve ikincisi etkisizdi çünkü ilki zaten eşleşmişti. NOPASSWD bir koşul değil, eylemi değiştirmenin bir yoludur.

Ve belli değildi çünkü sudoers.d dizininden dolayı tek bir dosyada değildi.

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.