Açıkçası, sudo
böyle bir durumda benim için ilk tercih olurdu. Önemli nokta görünür çoğu (gerçek) yöneticileri aslında kullanmamanızı olmak /etc/sudoers
onun mümkün olduğu kadar fazla ( User_Alias
, Runas_Alias
, Host_Alias
, Cmnd_Alias
).
Çoğu yönetici, mevcut kurallardan sadece bazılarını kullanarak ve kullanıcı ekleyerek veya daha da kötüsü, sudo
genellikle Ubuntu kurulumlarında genellikle bir kuralın bulunduğu gruba kullanıcılar ekler ( %sudo
...). Bu, elbette, ilgili kullanıcılara ücretsiz saltanat ve süper kullanıcı hesabının tam gücünü verir.
Yorumunuz verildiğinde:
bu yüzden onları /etc/sudoers
Sanırım mümkün olduğunca kullanmıyorsunuz.
Seninki gibi bir senaryoda, kelimenin tam anlamıyla Bob'un sınırlandırılacağı birkaç eylemi yazardım. Aslında bu, iki belirli kullanıcının bir ana bilgisayardaki belirli bir KVM konukunu yeniden başlatmasına izin vermek için sürdürdüğüm bir sunucuda yaptığım şey. Komut dosyaları, yorumlayıcıya mutlak yolu olan (örneğin #!/bin/dash
yerine #!/usr/bin/env bash
) bir hashbang içerir ve muhtemelen ayrıcalıklı görevler ( /bin/dash
veya /bin/sh
) için başka bir yerde kullanılan bir kabukla çalışır . Bunlar sadece önlemler. Bunun dışında, tüm mutlak yolları ikili kodlara sabitlediğinizden ve mümkün olduğunca azını kullandığınızdan emin olurum. Örneğin, bash
/ dash
I kullanırken builtin
s'yi tercih ederim command
(bkz. man bash
). Bir değişkeni mutlak yol atayarak ve bu değişkeni temel alan programa başvurarak bunu devam ettirebilirsiniz.$VIRSH
yerine /usr/bin/virsh
). Yapabiliyorsanız, aramadan önce harici komut dosyalarının kodlarını inceleyin. Özellikle onları ayrıcalıklı bir bağlamda çağırmanız gerekiyorsa. Benim durumumda, kullanıcıları yalnızca makineye sshd
ve ortak anahtar kimlik doğrulaması yoluyla bağlandıkları için belirli bir kök dizine ve belirli bir SSH alt sistemine sınırlandırıyorum . Açıkçası buna ihtiyacınız yok.
Uygun olanlar dışında chown root: <the-script>; chmod u=rw,a=,a+rx <the-script>
herhangi birinin root
onunla uğraşmasını önlediğinizden emin olun . Ayrıca , hedef ikili dosyalarda dikkatli olun setuid
ve setgid
bitler etkinleştirin ( find
bunları tespit etmek için kullanılabilir). Diyelim ki senaryonuzun içinde kalıyor /usr/sbin/priv-action
.
Şimdi düzenleyin /etc/sudoers
. noexec
açıkça izin verilenler dışındaki diğer ikili dosyaları önlemek için kullanılabilir. Aslında burada tarif ettiğim gibi pek çok ek ayar var. Bu yüzden danıştığınızdan emin olun man sudoers
.
Şimdi dosyamdaki users ( User_Alias
) ismini tercih ediyorum sudoers
, fakat aynı zamanda a Group_Alias
( man sudoers
) veya gerçek bir sistem grubu da kullanabilirsiniz (örn. %sudo
):
# The list is comma-separated: bob,alice,...
User_Alias LIMITED_ADMINS=bob
ardından söz konusu komut dosyasının yürütülmesine izin vermek için bir komut takma adı ekleyin:
# The list is comma-separated: /usr/sbin/priv-action,/bin/bash,...
Cmnd_Alias PRIV_ACTION=/usr/sbin/priv-action
Son fakat en az değil , ayrıcalıklı komutları komut dosyası aracılığıyla yürütmesine izin veren bob
(veya daha aşağıda listelenen kullanıcıların LIMITED_ADMINS
) sihirli satır gelir :
LIMITED_ADMINS ALL=(root) PRIV_ACTION
Önceki takma ad tanımlarından farklı olarak, bu satır bir açıklama gerektirir. Önce "Kullanıcı Spesifikasyonu" satır ortalaması olan bölümleri inceleyelim. İşte man sudoers
yardımcı olur:
Bir kullanıcı şartnamesinin temel yapısı who where = (as_whom) what
.
Örnek çizgi (çoğu Ubuntu kurulumunda bulunur):
root ALL=(ALL) ALL
Bu, adı verilen bir kullanıcının root
( #0
UID'ye bağlamak için kullanın 0
), tüm ana bilgisayarlarda, herhangi bir kullanıcı bağlamında herhangi bir şey çalıştırabileceğini ancak parolasının isteneceğini (varsayılan davranış varsayarak) söyler. NOPASSWD
Etiketin sondan önce eklenmesi ALL
aynı zamanda root
parola sorulmadan da aynısını yapmanıza izin verir (şöyle:) root ALL=(ALL) NOPASSWD:ALL
. ALL
çeşitli takma ad türleri için gerçek bir joker takma addır.
Ama Bob'a geri dönelim:
LIMITED_ADMINS ALL=(root) PRIV_ACTION
izin verecek bob
ve diğer sıralanan üyeleri User_Alias LIMITED_ADMINS
(neyi en yani tüm ana çalıştırmak için ALL
kullanıcı olarak içindir) root
(ima gruba fakat verilebilir, bkz man sudoers
verilen komutlar) Cmnd_Alias PRIV_ACTION
. Daha iyi olur. Yine de bu komut dosyasını yazdığınızı varsayarsak, çeşitli parametrelere izin verebilir, böylece birden çok komut dosyası yazabilirsiniz. /etc/sudoers
geçmesine izin verilen argümanların olasılıklarını sınırlamak için kabuk benzeri joker karakterleri memnuniyetle alır.
Sürekli olarak yöneticilerin kullanılma sudoers
şeklini kullanmadığını gördüm, bu yüzden "Linux Server Hacks" ve "Linux Server Hacks Volume Two" adlı iki kitaptan ilgili "Hack" i takdir ettim. bu büyük tesisin daha sofistike kullanımı.
Özel durumunuza tam olarak yardımcı olabilecek her türlü kıvrımlı - özel durumunuz için çözümler üretebilirsiniz, ancak bir kez temel kelime dağarcığınızı konuştuğunuzda /etc/sudoers
oldukça sihirli başarılar yapabilirsiniz :)
Dikkat: /etc/sudoers.d/
Eğimli hissediyorsanız altında yeni bir dosya oluşturabileceğinizi unutmayın . Bu /etc/sudoers
, satırınızı içerdiğini varsayar :
#includedir /etc/sudoers.d