Kök olarak çalışan birden fazla Linux sistem yöneticisi


40

Ekibimizde birkaç düzine Debian sunucusunu yönetmek zorunda olan üç deneyimli Linux sistem yöneticimiz var. Önceden hepimiz SSH ortak anahtar kimlik doğrulamasını kullanarak kök olarak çalışıyorduk. Ancak, bu senaryo için en iyi uygulamanın ne olduğu ve hiçbir konuda hemfikir olamayacağımız konusunda bir tartışma yaptık.

Herkesin SSH ortak anahtarı ~ root / .ssh / yetkili_keys2

  • Avantaj: kullanımı kolay, SSH ajan iletme işleri kolay, biraz ek yükü gider
  • Dezavantaj: Eksik denetim (hangi "kök" ün hangi değişiklik yaptığını asla bilemezsiniz), kazalar daha muhtemeldir

Kişiselleştirilmiş hesapları ve sudo kullanımı

Bu şekilde, SSH ortak anahtarlarını kullanarak kişiselleştirilmiş hesaplarla oturum açar ve sudo kullanarak kök izinlerine sahip tek görevleri gerçekleştirirdik . Ek olarak, günlük dosyalarını görüntülememizi sağlayan "adm" grubunu kendimiz de verebiliriz.

  • Avantaj: iyi denetim, sudo aptalca şeyleri çok kolay yapmamızı engelliyor
  • Dezavantaj: SSH ajanı gönderim sonları, bu bir güçlük çünkü hiç bir şey kök dışı olarak yapılabilir

Birden fazla UID 0 kullanıcısı kullanma

Bu, sistem yöneticilerinin birinden çok özel bir öneri. UID 0 olan ancak farklı giriş adlarına sahip olan / etc / passwd içinde üç kullanıcı oluşturmanızı önerir. Bunun aslında yasak olmadığını ve herkesin UID 0 olmasına izin verdiğini, ancak yine de denetleyebildiğini iddia ediyor.

  • Avantaj: SSH aracısı yönlendirme çalışmaları, denetim çalışabilir (denenmemiş), herhangi bir sudo sorunu
  • Dezavantaj: oldukça kirli hissediyor - izin verilen herhangi bir yerde belgelenmiş bulamadı

Ne öneriyorsun?


2
Hakkında "izin verilen herhangi bir şekilde belgelendirilemedi" ifadesi hakkında: kılavuzdaki -obayrağa bir göz atın useradd. Bu bayrak, aynı kullanıcının kimliği paylaşan birden fazla kullanıcıya izin vermek için vardır.
jlliagre

6
İkinci seçenekte "SSH ajanı yönlendirme molaları" ile ne demek istediğinizi açıklayabilir misiniz? Bunu işimde kullanıyoruz ve ssh agent forwarding işleri gayet iyi.
Patrick

4
Sudo içinden değil, root dışı hesabınızdan ssh yapmanız gerekir.
Random832

4
Sudo yönteminin bir başka sonucu: Artık SCP / FTP'yi kök olarak kullanamazsınız. Herhangi bir dosya transferinin önce kişinin ev dizinine taşınması ve sonra terminalde kopyalanması gerekir. Bu perspektife bağlı olarak bir avantaj ve dezavantajdır.
user606723

1
Kukla / şef / sorumlu tip sistemler neden düşünülmüyor?
Alex Holst

Yanıtlar:


64

İkinci seçenek en iyisi IMHO. Kişisel hesaplar, sudo erişimi. SSH ile kök erişimini tamamen devre dışı bırak. Birkaç yüz sunucumuz ve yarım düzine sistem yöneticimiz var, bu şekilde yapıyoruz.

Ajan iletme tam olarak nasıl bozulur?

Ayrıca, sudoher görevin önünde kullanmakta güçlük çekiyorsa, bir sudo kabuğu ile başlatabilir sudo -sveya bir kök kabuğuna geçebilirsiniz.sudo su -


10
SSH ile root erişimini tamamen devre dışı bırakmak yerine, SSH ile root erişimi yapmayı, çok güçlü bir anahtar kelime ile bir anahtar oluşturmanızı ve sadece acil kullanım için kilitli tutmanızı öneriyorum. Kalıcı konsol erişiminiz varsa, bu daha az kullanışlıdır, ancak kullanmazsanız, çok kullanışlı olabilir.
EightBitTony

17
Güvenlik amacıyla kök girişini SSH üzerinden devre dışı bırakmanızı öneririm. Gerçekten root olarak giriş yapmanız gerekiyorsa, root dışı bir kullanıcı olarak oturum açın ve su.
taz

+1 .. "İkinci seçenek en iyisidir" demekten daha ileri giderdim. Ben sadece makul bir seçenek. Seçenek bir ve üç, sistemin güvenliğini büyük oranda hem dış saldırılara hem de hatalara karşı azaltır. Ayrıca, # 2, sistemin öncelikle kullanılmak üzere nasıl tasarlandığıdır .
Ben Lee

2
Lütfen üzerinde çalışın sudo -s. Bunun , basit kök girişine kıyasla ek günlük girişinden ayrı olarak kök olarak giriş yapmanın veya temelde giriş yapmanın bir sudo -iönemi olmadığını anlamak doğru muyum su -? Eğer bu doğruysa, neden basit ve köklü oturum açmadan daha iyidir?
PF4Public

9

Önerilen 3. stratejiyle ilgili olarak, useradd -o -u userXXXjlliagre tarafından önerilen seçeneklerin algılanması dışında, aynı kullanıcı olarak birden fazla kullanıcı çalıştırmaya aşina değilim. (bu nedenle devam ederseniz, yayını herhangi bir sorunla (veya başarılarla) güncelleyebilseydiniz, ilgilenirim ...)

Sanırım ilk seçenek olan "Herkesin SSH ortak anahtarı ~ root / .ssh / onay_2_2 anahtarına yerleştirildi" konusuna olan ilk gözlemim, kesinlikle başka hiçbir sistemde çalışmayacağınız sürece;

  1. o zaman en azından bir süre , kullanıcı hesaplarıyla çalışmak zorunda kalacaksınız vesudo

İkinci gözlem, eğer HIPAA, PCI-DSS uyumluluğunu ya da CAPP ve EAL gibi şeyleri isteyen sistemler üzerinde çalışıyorsanız, o zaman sudo sorunları üzerinde çalışmak zorunda kalacaksınız;

  1. Bu bir endüstri standardı kök olmayan bireysel kullanıcı hesaplarını temin etmek, yani tipik bazı merkezi kullanıcı veritabanı kullanılarak, vb, zaman aşımına uğramış engelli, denetlenebilir.

Yani; Kişiselleştirilmiş hesapları ve sudo kullanımı

Bir sysadmin olarak, uzak bir makinede yapmanız gereken hemen hemen her şeyin bazı yüksek izinlere ihtiyaç duyması talihsiz bir durumdur; sudo

Dolayısıyla, sudobahsettiğiniz sıkıntıları gidermek için kullandığım bazı püf noktalarını üzerinden geçebilirim . İlk sorun, kök girişinin kullanımı engelleniyorsa PermitRootLogin=noveya ssh anahtarını kullanarak kökünüz yoksa, SCP dosyalarına bir PITA işlevi yapar.

Sorun 1 : Dosyaları uzak taraftan taramak istiyorsunuz ancak kök erişimi gerekiyor, ancak uzak kutuya doğrudan kök olarak giriş yapamazsınız.

Sıkıcı Çözüm : dosyaları ana dizine kopyalayın, kopyalayın ve kopyalayın.

ssh userXXX@remotesystem, sudo su -etc, cp /etc/somefilesto /home/userXXX/somefiles,, chown -R userXXX /home/userXXX/somefilesuzaktaki dosyaları almak için scp kullanın.

Gerçekten çok sıkıcı.

Daha Az Sıkıcı Çözüm : sftp -s sftp_serverbayrağı destekler , bu nedenle aşağıdaki gibi bir şey yapabilirsiniz (eğer parolasız sudo girişi yapılandırdıysanız /etc/sudoers);

sftp  -s '/usr/bin/sudo /usr/libexec/openssh/sftp-server' \
userXXX@remotehost:/etc/resolv.conf 

(sshfs ile bu hack-etrafında da kullanabilirsiniz, ancak onun tavsiye edildiğinden emin değilim ... ;-)

Parola içermeyen sudo haklarınız yoksa veya yukarıdaki bu yöntemin bozulması nedeniyle yapılandırılmış bir nedenden dolayı, uzak kök dosyalara erişmek için bir daha az sıkıcı dosya aktarma yöntemi önerebilirim.

Port İleri Ninja Yöntemi :

Uzak ana bilgisayara giriş yapın, ancak 3022 nolu uzak bağlantı noktasının (ücretsiz bir şey olabilir ve yöneticiler için ayrılmış, yani> 1024 olabilir) yerel taraftaki 22 numaralı bağlantı noktasına geri gönderileceğini belirtin.

 [localuser@localmachine ~]$ ssh userXXX@remotehost -R 3022:localhost:22
Last login: Mon May 21 05:46:07 2012 from 123.123.123.123
------------------------------------------------------------------------
This is a private system; blah blah blah
------------------------------------------------------------------------

Normal şekilde kök salın ...

-bash-3.2$ sudo su -
[root@remotehost ~]# 

Artık dosyaların bir orta kopyasını çıkarmak için sıkıcı sıkıcı adımdan kaçınarak dosyaları başka bir yöne doğru tarayabilirsiniz;

[root@remotehost ~]#  scp -o NoHostAuthenticationForLocalhost=yes \
 -P3022 /etc/resolv.conf localuser@localhost:~
localuser@localhost's password: 
resolv.conf                                 100%  
[root@remotehost ~]#  

 

 

Sorun 2: SSH ajanı iletme : Kök profilini yüklerseniz, örneğin bir oturum açma kabuğu belirleyerek, SSH ajanı iletimi için gerekli ortam değişkenleri SSH_AUTH_SOCKsıfırlanır, dolayısıyla SSH ajanı iletimi "bozulur" sudo su -.

Yarı pişmiş cevap :

Düzgün bir kök kabuğu yükler şey, haklı çevreyi sıfırlamak için gidiyor, ancak hafif bir iş çevresinde var olan senin teneke kullanımı sen, HEM kök izni VE SSH Ajan kullanma olanağı gerektiğinde AYNI ZAMANDA

Bu, gerçekten kullanılmaması gereken bir tür chimera profili elde eder, çünkü kötü bir kesektir , ancak uzak ana bilgisayardan root olarak SCP dosyalarına ya da başka bir uzak ana bilgisayara SCP dosyaları gerektiğinde kullanışlıdır.

Her neyse, aşağıdakileri sudo'larda ayarlayarak, kullanıcının ENV değişkenlerini koruyabilmesini sağlayabilirsiniz;

 Defaults:userXXX    !env_reset

Bu, böyle kötü melez giriş ortamları yaratmanıza izin verir;

normal giriş yapın;

[localuser@localmachine ~]$ ssh userXXX@remotehost 
Last login: Mon May 21 12:33:12 2012 from 123.123.123.123
------------------------------------------------------------------------
This is a private system; blah blah blah
------------------------------------------------------------------------
-bash-3.2$ env | grep SSH_AUTH
SSH_AUTH_SOCK=/tmp/ssh-qwO715/agent.1971

/root/.profileve çalıştıran bir bash kabuğu oluşturun /root/.bashrc. ama korurSSH_AUTH_SOCK

-bash-3.2$ sudo -E bash -l

Öyleyse bu kabuğun kök izinleri ve kökleri var $PATH(fakat bir giriş dizini ...)

bash-3.2# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=user_u:system_r:unconfined_t
bash-3.2# echo $PATH
/usr/kerberos/sbin:/usr/local/sbin:/usr/sbin:/sbin:/home/xtrabm/xtrabackup-manager:/usr/kerberos/bin:/opt/admin/bin:/usr/local/bin:/bin:/usr/bin:/opt/mx/bin

Ancak bu çağrıyı, uzak sudo kökü gerektiren şeyleri yapmak için de kullanabilirsiniz; aynı zamanda SSH ajanı erişimi de öyle;

bash-3.2# scp /root/.ssh/authorized_keys ssh-agent-user@some-other-remote-host:~
/root/.ssh/authorized_keys              100%  126     0.1KB/s   00:00    
bash-3.2# 

1
Hack'leri severim.
sjbotha

2

Üçüncü seçenek ideal görünüyor - ama neler olduğunu görmek için gerçekten denedin mi? Eğer iken olabilecek kimlik doğrulama adımında ek adı görebilirsiniz, herhangi geriye doğru arama aynı değeri döndürmek için gidiyor.

Root ssh erişimine izin vermek, makineleriniz internete bağlı olmasa bile / güçlü şifreler kullanıyor olsa da kötü bir fikirdir.

Genellikle root erişimi için sudo yerine 'su' kullanıyorum.


4
Aynı UID'ye birden çok kullanıcı eklemek, sorun ekler. Uygulamalar bir UID numarası için kullanıcı adını ararken, yanlış kullanıcı adına bakabilirler. Kök altında çalışan uygulamalar, yanlış kullanıcı olarak çalıştıklarını düşünebilir ve çok sayıda garip hata ortaya çıkmaya başlar (bir kez denedim).
Patrick

8
Üçüncü seçenek sadece kanlı bir fikir . Esasen UID'ler ve kullanıcı adları arasındaki 1: 1 ilişkisini kırıyorsunuz ve tam anlamıyla unix'deki her şey bu ilişkinin beklemesini bekliyor. Sırf yapmamak için kesin bir kural olmadığı için bunun iyi bir fikir olduğu anlamına gelmez.
Shadur

Üzgünüz, ama üçüncü seçenek korkunç bir fikir. Giriş yapan birden fazla UID 0 kişisine sahip olmak sadece sorunların çoğaltılmasını istiyor. Seçenek sayısı 2, sadece mantıklı olanıdır.
Doug

Üçüncü seçenek bu kadar fazla oy almayı hak etmiyor. Unix'te bildiğim kadarıyla bu hile ile karıştırıldığına dair bir komut yok, insanlar olabilir ama komutlar umrunda olmamalıdır. Bu sadece farklı bir giriş adıdır, ancak giriş yaptığınız anda, şifre veritabanındaki kullanıcı adı ile eşleşen ilk isim kullanılır, bu yüzden gerçek kullanıcı adının (burada kök) ilk önce orada göründüğünden emin olun.
jlliagre

@Patrick Bunu pratikte gördünüz mü? Test ettiği kadarıyla, rootkullanıcı UID 0'daki rootilk kullanıcı ise uygulamalar kullanıcıyı /etc/passwdseçer. Jlliagre ile aynı fikirdeyim. Gördüğüm tek dezavantajı, her kullanıcının bir rootkullanıcı olduğudur ve bazen kimin ne yaptığını anlamak kafa karıştırıcı olabilir.
Martin

2

(1) kullanıyorum ama yazdım

rm -rf / tmp *

kötü niyetli bir günde. Bir avuçtan fazla yöneticiniz varsa, yeterince kötü olduğunu görebiliyorum.

(2) Muhtemelen daha mühendisliktir - ve sudo su - ile tam teşekküllü bir kök haline gelebilirsiniz. Yine de kazalar hala mümkün.

(3) Bir mavna direğine değmem. Suns'ta, barebone-sh olmayan bir root hesabına sahip olmak için kullandım (doğru hatırlıyorsam) ama hiçbir zaman sağlam değildi - ayrıca çok denetlenebilir olacağından şüpheliyim.


2

Kesinlikle cevap 2.

  1. SSH erişimine izin verdiğiniz anlamına gelir root. Eğer bu makine halka açık bir şekilde karşı karşıyaysa, bu sadece korkunç bir fikirdir; 22 numaralı bağlantı noktasında SSH çalıştırdığımda, VPS'm root olarak kimlik doğrulaması için saatte bir kez birden fazla deneme yaptı. Birden fazla başarısız girişimde bulunan IP'leri kaydetmek ve yasaklamak için kurulmuş temel bir IDS'm vardı ama gelmeye devam ettiler. Neyse ki, kendi hesabım varken ve sudo yapılandırmasından sonra, SSH erişimini root kullanıcı olarak devre dışı bıraktım. Ek olarak, bunu yapan neredeyse hiçbir denetim iziniz yok.

  2. Gerektiğinde ve gerektiğinde kök erişimi sağlar. Evet, standart bir kullanıcı olarak hiçbir imtiyazınız yok, ancak bu tam olarak istediğiniz şey; Eğer bir hesap tehlikeye girerse, yeteneklerinde sınırlandırılmasını istiyorsun. Herhangi bir süper kullanıcının erişiminin şifre tekrar girmesini gerektirmesini istiyorsunuz. Ek olarak, sudo erişimi, kullanıcı grupları üzerinden kontrol edilebilir ve kimlerin neye erişebileceği konusunda size daha fazla kontrol sağlayarak, isterseniz belirli komutlarla kısıtlanabilir. Ek olarak, sudo olarak çalışan komutlar kaydedilebilir, böylece işler ters giderse daha iyi bir denetim izi sağlar. Oh, ve sadece "sudo su -" un girişini yaptığınız anda yapmayın. Bu korkunç ve korkunç bir uygulama.

  3. Sysadmin'in fikri kötü. Ve kendini kötü hissetmeli. Hayır, * nix makineleri muhtemelen bunu yapmanıza engel olmaz, ancak hem dosya sisteminizi, hem de neredeyse her uygulamada her bir kullanıcı için benzersiz bir UID bekler. Bu yola girmeye başlarsan, sorunla karşılaşacağını garanti edebilirim. Belki hemen değil, ama sonunda. Örneğin, güzel ve kolay adlar gösterilmesine rağmen, dosyalar ve dizinler sahiplerini belirtmek için UID numaralarını kullanır; Satırdaki yinelenen UID'lerle ilgili bir sorun yaşarsanız, daha sonra bazı ciddi manuel dosya sistemi temizleme işlemleri yapmak zorunda kalmadan passwd dosyanızdaki UID'yi değiştiremezsiniz.

sudoileri giden yol. Komutları root olarak çalıştırma konusunda ek güçlük çekebilir, ancak hem erişim hem de denetim açısından size daha güvenli bir kutu sunar.


1

Kesinlikle seçenek 2, ancak sudo kullanmaya gerek kalmadan her kullanıcıya mümkün olduğunca fazla kontrol sağlamak için gruplar kullanın. Her komutun önündeki sudo, avantajın yarısını kaybeder, çünkü her zaman tehlike bölgesinde bulunuyorsunuz. İlgili dizinleri sudo olmadan sistem yöneticileri tarafından yazılabilir hale getirirseniz, herkesin daha güvende hissetmesini sağlayan istisnaya sudo gönderirsiniz.


1

Eski günlerde sudo yoktu. Sonuç olarak, birden fazla UID 0 kullanıcısına sahip olmak, mevcut tek alternatifdi. Ancak, kullanıcı adını almak için özellikle UID'ye dayalı günlük kaydı yapmakla birlikte, o kadar iyi değil.

Günümüzde, sudo tek uygun çözümdür. Başka bir şeyi unut.


0

Aslında izin verildiği belgelenmiştir. BSD sendikaları, uzun süredir toor hesabına sahipti ve bashroot kullanıcıları, csh'nin standart olduğu sistemlerde (kabul edilen yanlış uygulama;


0

Belki tuhafım ama yöntem (3) de aklıma ilk gelen şey. Artıları: Her kullanıcının kayıt defterinde adı olacak ve kimin ne yaptığını bileceksin. Eksileri: her biri her zaman kök salıyor, bu yüzden hatalar felaket olabilir.

Neden root erişimine sahip olmak için tüm yöneticilere ihtiyaç duyduğunuzu sormak istiyorum. Önerdiğiniz 3 yöntemin de ayrı bir dezavantajı var: bir yönetici sudo bash -lya sudo su -da böyle bir şey yaptığında, kimin ne yaptığını izleme yeteneğinizi kaybedersiniz ve bundan sonra bir hata felaket olabilir. Üstelik, olası bir yanlış davranış durumunda, bu daha da kötüleşebilir.

Bunun yerine başka bir yoldan gitmeyi düşünebilirsiniz:

  • Yönetici kullanıcılarınızı normal kullanıcılar olarak oluşturun
  • Kimin hangi işi yapması gerektiğine karar verin (apache yönetimi / postfix yönetimi vb.)
  • Kullanıcıları ilgili gruplara ekleyin (örneğin "postfix" ve "mail", "amavis" gibi "martin" ekleyin, vb.)
  • Düzeltme izinleri (chmod -R g + w postfix: postfix / etc / postfix)
  • sadece göreceli sudo yetkileri verin: (visudo -> martin /etc/init.d/postfix, / usr / bin / postsuper vs. kullansın)

Bu şekilde, martin postfix'i güvenli bir şekilde idare edebilir ve hata veya hatalı davranış durumunda, postfix sisteminizi kaybedersiniz, sunucunun tamamını değil.

Aynı mantık, apache, mysql, vs. gibi diğer tüm alt sistemlere uygulanabilir.

Tabii ki, bu noktada bu tamamen teorik ve kurmak zor olabilir. Tho gitmek için daha iyi bir yol gibi görünüyor. En azından benim için. Bunu deneyen olursa, lütfen nasıl geçtiğini bana bildirin.


Bu bağlamda SSH bağlantılarını kullanmaya başlamalıyım. Hangi yöntemi kullanırsanız kullanın, SSH üzerinden kök girişlerine izin vermeyin, bireysel kullanıcıların kendi kimlik bilgileriyle ssh olmasına izin verin ve sudo / nosudo / etc komutlarını oradan ele alın.
Tuncay Göncüoğlu
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.