Sudo olmadan kök olmayan bir kullanıcıya bir komut kümesine erişim izni verme


13

Makinemdeki kök olmayan bir kullanıcıya sudo olmayan erişim vermek istiyorum, bir kullanıcı dns yöneticisi var, tek rolü tüm BIND komutlarını (rndc, dnssec-keygen) vb.

Şimdi ne zaman bir komut verse,

sudo rndc reload

Bu sudo'dan kurtulmanın bir yolu var mı, ama sadece belirli bir komut setinde (ve sadece dns-manager için)?


5
Bunun gibi isteğe bağlı erişim kontrolü hemen hemen sudobunun için gereklidir . İşletmenizin bunun için kullanımına itirazlarınız neler sudo?
15:15, MadHatter

1
@peterh Sorumu tekrarlıyorum: isteğe bağlı erişim kontrolü (kısmi sistem yöneticisi heyeti) rolüdür sudo. İtirazlar nelerdir?
15:15, MadHatter

3
Peki ya parolasız sudo? Veya daha sonra gerektiğinde grup veya kullanıcı ayrıcalığı veya kök ayrıcalığı ile çalışabilen DNS yönetim aracını çalıştırmak için sudo namedolarak şifrelenir.
15:15, MadHatter

4
@peterh "bu şekilde yapmak için iyi bir neden" eksik bit olacaktır. Genellikle bu gibi sorular kılık değiştirmiş XY problemleri ortaya çıkar ve altta yatan konuyu anlamanın, onları tam ve profesyonel olarak cevaplamanın anahtarı olduğunu düşünüyorum.
MadHatter

2
@peterh Sanırım birbirimizle aynı fikirdeyiz. Ben de OP'nin sorusunu iyileştirdiğini görmek istiyorum; içine girmek, yazarın kendi etrafında inşa ettiği kutunun dışında düşünmesine yardımcı olmanın bir yolu olarak benim için iyi çalışıyor. Kaçınmak istemesi için iyi bir nedeni olabilir sudo. Bize ifade etmeye çalışırken, kafa karışıklığımızı ya da kendi - ya da her ikisini birden temizleyebilir!
MadHatter

Yanıtlar:


31

Yorumlarınızı doğru bir şekilde anlarsam, buradaki komut, sudo'nun varsayılan olarak istediği parolayı girme yeteneği olmayan bir bağlantı üzerinden verilmesidir. Ayrıca, birçok işletim sistemi dağıtımında, sudo varsayılan olarak bu programın sahip olamayacağı bir TTY gerektirecektir.

Bununla birlikte, sudo çok ince taneli bir izin yapısına sahip olabilir, bu da bir veya daha fazla kullanıcının parola ve TTY olmadan belirli bir komut vermesine izin vermeyi mümkün kılar. Aşağıda, bunu ihtiyaçlarınıza göre yapılandırmanın üç yolunu göstereceğim. Hangisini seçerseniz seçin, kullanıcı şimdi sudo rndc reloadbir şifre girmek zorunda kalmadan komutu verebilecektir .

(Ayrıca, bu gereksiz olabilir, ama ... lütfen sen yedeğe geri dönmek için söz konum kök açıyorlar gereken bir kabuk tutmaya, düzenlemeden önce Sudoers dosyasının yedek kopyasını oluşturmayı unutmayın ve düzenleyebileceğiniz o kullanarak visudoyerine sudo vi /etc/sudoersonları daha iyi olması ve ters daha onlara ihtiyacımız için ... Umarım bu önlemler gereksiz olacaktır. ama!)

1. Herhangi bir talep için TTY'ye ihtiyaç duymuyorsanız

En kolay yolu (varsa) emin hat ile başlayan bu yapmaktır TTY gereksinimleri kurtulmak için Defaultsde /etc/sudoerskelimesini içermiyor requirettybunun yerine içermelidir - !requiretty. Ancak, bunu yaparsanız, hiçbir sudo komutunun tty gerektirmeyeceği anlamına gelir !

Ayrıca satırı eklemeniz gerekir

rndcuser ALL = (root) NOPASSWD: /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program

2. Bunun dışındaki tüm kullanıcılar için bir TTY'ye gereksinim duymak istiyorsanız

Bu, bu tek kullanıcı için aşağıdaki gibi bir varsayılan ayarlanarak yapılabilir:

Defaults:rndcuser        !requiretty
rndcuser ALL = (root) NOPASSWD: /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program

3. Bir TTY'yi bu tek komut dışındaki tüm komutlar için bu tek kullanıcı tarafından sağlamak istiyorsanız

Bu sudoers dosyasının sözdizimi nedeniyle biraz daha karmaşıktır. Komut için bir komut takma adı oluşturmanız ve ardından bu komut takma adı için bir varsayılan ayarlamanız gerekir, örneğin:

Cmnd_Alias RNDC_CMD = /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
Defaults!RNDC_CMD !requiretty
rndcuser ALL = (root) NOPASSWD: RNDC_CMD

Tabii ki, bu, sudo kullanarak komutu çağıran bir sarmalayıcı komut dosyası ile birleştirilebilir, eğer herhangi bir nedenle parolasız olsa bile sudo'yu doğrudan kullanamazsınız.
Jenny D

4

Evet. sudo çok esnek bir şekilde yapılandırılabilir. Yine de, şunu belirtmeliyim: bu tür çözümler çok güvenli olarak düşünülmemeli ve sadece diğer kontrollerin bulunduğu bir işbirliği ortamında kullanılmalıdır (böylece, bu gelişmiş ayrıcalıkları sadık astınıza verebilirsiniz, ancak bunu yalnızca internetten tanıdığınız bir müşteri için yapmamalısınız).

Sudo config /etc/sudoersçoğu sistemde bulunur. Sözdizimini Googling veya bir man sudokomutla öğrenebilirsiniz .

Bu dosyayı doğrudan düzenlememelisiniz; bunu yapmak güvenlik yarışı koşullarına yol açabilir. Bunun yerine, visudokomutu ( $EDITORortam değişkeninizin etrafındaki bir sarmalayıcıdır ) kullanın.


Sudo'yu yapılandırdıktan sonra, bunu görünür komutların etrafına kolayca sarabilirsiniz. O çok basit:

  1. Sudo sarmalayıcı komut dosyalarınızın listesi için bir dizin oluşturun (fe /usr/local/dnsadmin/bin)
  2. Sudo olmadan kullanılabilir olmasını istediğiniz komutlar için bir sarmalayıcı komut dosyası oluşturun. Çok basit bir komut olacak, örneğin /usr/local/dnsadmin/bin/rndc:

    #!/bin/bash exec /usr/bin/sudo /usr/sbin/rndc "$@"

  3. Bu dizini PATHortam değişkenlerine alın (örneğin sistem genelinde veya yerel olarak .profile).


Merak etme - execsadece komutu doğrudan çağırmak yerine neden kabuk betiğinde kullanasınız ki? (Yanlış olduğunu söylemiyorum, sadece neden bir şeyler öğrenebilmem için neden yaptığını bilmek istiyorum)
Jenny D

2
Ben şifresiz sudo bit ile yapılır, sarıcı komut dosyası fikir harika.
Anss

2
@JennyD :-) Kararlılık ve performans nedeniyle. Durumda exec, çağrılan komut kabuğun yerine ikame edilir. Kabuk gidecek. Bir exec olmadan, kabuk bu komutu başlatır ve sonra sonlandırılmasını bekler ve sonra çıkar. Bu ikinci, exec-less, gereksiz olan çoklu işbirliği süreçleri anlamına gelir. Ama büyük bir fark yok, exec olmadan bu iş bu kadar iyi olur.
peterh - Monica

@JennyD Benim itirazım :-)
peterh - Monica

@Karşılama Lectoring çok teşekkür ederim! Bu çok büyük bir onur.
peterh - Monica

2

Bu özel bir durumda genel bir çözüm olmasa da, rndchiç ihtiyacınız yok sudo.

rndcnamedyerel bir soket veya uzak bağlantı noktası aracılığıyla herhangi bir işlemle kendini doğrulamak için gizli bir anahtar kullanarak iletişim kurabilir . Varsayılan olarak (veya en azından, kullandığım dağıtım olan debian için) bu dosya bulunabilir /etc/bind/rndc.keyve normalde yalnızca kullanıcı bindve grup tarafından okunabilir bind.

Bu anahtar dosyaya okuma erişimi olan (veya aynı bir kopyası) herkes rndcBIND sunucusunu kontrol etmek için kullanabilir , bu nedenle bu özel durumda en kolay çözüm kullanıcıyı bindgruba eklemek olacaktır .

Şaşırtıcı sayıda ortak daemonun benzer bir şeyleri var (Şahsen hala bu konuda powerdns olasılıklarını anlıyorum, ancak şimdiye kadar umut verici görünüyor). Bunu yapmak sudoistemiyorsanız, gerçekleştirmek istediğiniz şeyin duruma göre mümkün olup olmadığını kontrol etmeniz gerekir.


-1

Bazı komutlar için root vermek amacıyla sudo kullanmak istemezsiniz. Bunun yerine, normal bir kullanıcının bunu kök olarak yürütme haklarını yükseltmek için 4750 numaralı belirli bir programı [komutu sarabilir] chmod yapabilirsiniz.

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.