Ubuntu bir yönetici kullanıcısının şifresini istediğinde, hangi yönetici kullanıcıdan isteneceğine nasıl karar verir?


11

Birkaç kişi tarafından kullanılacak bir Ubuntu (10.10) makinesi kuruyorum. Küçük bir ofiste paylaşılan bir makinedir. Başlıca rolleri VirtualBox ile sanal makineleri barındırıyor ve Samba ile dosya sunuyor.

Samba için, çeşitli kişilerin Samba paylaşımlarına kendi iş istasyonlarından bağlanabilmeleri için çeşitli kullanıcı hesaplarının kurulması gerekir. Bununla birlikte, sadece sanal makineleri çalıştırmaya adanmış, birden fazla kişinin kullanacağı bir hesap da vardır. Bazen insanlar bu hesapla yükseltilmiş ayrıcalıklar gerektiren şeyler yapmaya çalışırlar - bu Gnome'un "lütfen bir yönetici kullanıcının şifresini girin" iletişim kutusunun açılmasına neden olur. Bununla birlikte, bu iletişim kutusu şifremi istiyor - makineyi kurduğumda, benimki ilk hesap oluşturuldu, bu yüzden sudo güçleri veren tek kullanıcı olduğumu varsayıyorum.

Başka bir kullanıcıyı "ilk çare yöneticisi" olarak tanımlamak istiyorum ve bu paylaşılan hesap kullanıcısı olamaz, çünkü herkes bu hesabın parolasını bilmek zorundadır, bu yüzden ayrıcalıklarının kesinlikle sınırlı olmasını istiyorum. Bu benim hesabım olamaz, çünkü diğer insanlara şifremi söylemiyorum ve sitede kendim girmek için yeterince sık bulunmayacağım. Bununla birlikte, bunu bizzat yapabilen biri var , bu yüzden onları ekledim /etc/sudoers. Nasıl bir şey için ayrıcalık düzeylerini gerektiğinde, bu sormak gerektiğini Ubuntu söyleyebilir onların ilk hesaba?

Özetlemek:

  • Makinedeki hesaplar: Alice, Bob, Carol, Dave, Eliza.
  • Ubuntu kurulduğunda, Alice yükleme işlemi sırasında eklenen ilk kullanıcıydı.
  • "Dave" aslında birçok kişinin kullandığı, /etc/sudoersşifresi herkese açık olduğu için olamayan bir hesaptır .
  • Bob, Gnome'da "İdari" bir hesap olarak ayarlandı ve uygun şekilde girildi /etc/sudoers- Bob bu ofisin patronu.
  • Bob, Carol, Eliza veya Dave olarak oturum açarken yükseltilmiş ayrıcalık gerektiren eylemler denendiğinde, sistem Bob'un kimlik bilgilerini istemelidir.
  • Alice olarak oturum açarken yükseltilmiş ayrıcalık gerektiren eylemler denendiğinde, sistem Alice'in kimlik bilgilerini istemelidir (Alice bir tür buckaroo sysadmin olmasına ve su -genişletilmiş yönetici görevleri yapmak için kullanma alışkanlığına sahip olsa da ).

Burada istenen durumu getirmek için hangi yapılandırma değişikliklerini yapmam gerekiyor?


Alternatif olarak, sanallaştırmayla ilgili komutların otomatik olarak yönetici ayrıcalıklarını kullanmasına izin verilebilir. Eminim bu konuda bir soru okudum ama unuttum.
Oxwivi

Hızlı bir Googling bana aynı sudoersdosyadan yaptığınızı söyler , daha fazla bilgi için manpage'e bakabilirsiniz .
Oxwivi

Ben düzenleme yaparken sudoers: güvenlik endişeleri nedeniyle ilk çare değil düşündüm . Ayrıca enzotibin cevabına bakın - sorunun bir kısmı sudove PolicyKit arasındaki karışıklıktı .
Brighid McDonnell

Yanıtlar:


9

Her şeyden önce, root olmayan bir kullanıcı için iki farklı mekanizma aracılığıyla ayrıcalıklı eylemlere izin verildiğini belirtelim.

  1. sudo

  2. PolicyKit

İlki, bir komutu sudoveya komutu ile sarılmış bir menü öğesini gksu( Synaptic Paket Yöneticisi gibi ) açıkça çalıştırdığınızda kullanılır .
Bu durumda gerekli olan şifre, genellikle kullanıcının oturum açtığı çağrı yapan kullanıcının şifresidir.

İkincisi, PolicyKit kullanan bir uygulama ayrıcalıklı bir eylem gerçekleştirmeye çalıştığında kullanılır. Böyle bir durumda uygulama, PolicyKit Yerel Yönetimine (D-Bus aracılığıyla) eylemin gerçekleştirilip gerçekleştirilemeyeceğini sorar. Daha sonra Yerel Otorite, bir Kimlik Doğrulama Aracısı aracılığıyla etkin kullanıcıdan kimliğini kanıtlamasını ister. Diyalog pencereleri aşağıdaki gibidir (maalesef İtalyanca metinlerle :)

resim açıklamasını buraya girin

PolicyKit'i küçük siyah üçgen ve Ayrıntılar etiketinden tanımlayabilirsiniz . Gördüğünüz gibi, admingrupta birden fazla kullanıcı varsa, kimlik doğrulama için hangi kullanıcının kullanılacağını listeden seçebilirsiniz.

Tüm bunlar göz önüne alındığında, hem sudove PolicyKit, elde edilebilecek yapılandırmalar açısından çok daha karmaşıktır: şifre olmadan gerçekleştirilebilen, yalnızca belirli bir kullanıcı veya grup tarafından yürütülen eylemleri yapılandırabilirsiniz.

Sorunuza gelince, uygulama tarafından kullanılan mekanizma PolicyKit olduğunda, şu anda oturum açmış olan kullanıcıdan bağımsız olarak, gerekli parola Bob veya Alice (doğru anlarsam sadece iki yönetici kullanıcı) olur ve değiştirebilirsiniz. Kimlik doğrulama için kullanmak istediğiniz kullanıcıyı listeden seçin.

Uygulama tarafından kullanılan mekanizma sudo(GUI aracılığıyla gerçekleştirilen yönetici görevleri için bu daha az sıklıkta) olduğunda, kimlik doğrulaması için kullanıcıyı seçmek için hemen ve basit bir yönteminiz yoktur.


1
Durumu daha iyi anladığımı hissediyorum. Teşekkür ederim.
Brighid McDonnell

6

Açıkçası, sudobö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/sudoersonun 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ü, sudogenellikle 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/dashyerine #!/usr/bin/env bash) bir hashbang içerir ve muhtemelen ayrıcalıklı görevler ( /bin/dashveya /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/ dashI kullanırken builtins'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.$VIRSHyerine /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 sshdve 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 rootonunla uğraşmasını önlediğinizden emin olun . Ayrıca , hedef ikili dosyalarda dikkatli olun setuidve setgidbitler etkinleştirin ( findbunları tespit etmek için kullanılabilir). Diyelim ki senaryonuzun içinde kalıyor /usr/sbin/priv-action.

Şimdi düzenleyin /etc/sudoers. noexecaçı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 sudoersyardı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( #0UID'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. NOPASSWDEtiketin sondan önce eklenmesi ALLaynı zamanda rootparola 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 bobve diğer sıralanan üyeleri User_Alias LIMITED_ADMINS(neyi en yani tüm ana çalıştırmak için ALLkullanıcı olarak içindir) root(ima gruba fakat verilebilir, bkz man sudoersverilen 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/sudoersgeç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/sudoersoldukç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

-1

Unix / Linux'ta sadece bir süper kullanıcı var, adı kök, ancak sudo kullanıcıları kök olabilecek kullanıcılar. Grupları kullanmalısınız:

newgrp admins

ve ardından kullanıcıları bu gruba atayın:

chgrp alice admins

daha sonra grup kullanıcısı gibi yönetici grubunu sudoers yapılandırma dosyasına ekleyin.

Güncelleme

Veya yönetici grubuna herhangi bir kullanıcı ekleyebilirsiniz:

chgrp alice admin

Üzgünüm sekme tuşuna basıp bitirmeden gönderiyorum.
Francisco Valdez

Eksik cevaba dayanan zorched yorum. Mevcut cevabı deniyorum. Ek açıklamanın gelecekteki okuyucular için olduğunu varsayarsak, belki de sysadmin işleri ile daha az tanışırlar.
Brighid McDonnell

Tabii ki ukala olmak istemedim, sysadmin
Francisco Valdez

ServerFault'un var olduğunu biliyorum. Burada soruyorum çünkü bu Ubuntu'ya özgü bir davranış.
Brighid McDonnell

AFAIK: adduser <user>, addgroup <group>ve adduser <user> <group>Debian / Ubuntu tercih edilen bir yoldur.
13:22, 0xC0000022L
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.