Kullanıcıya tüm komutlara erişim verilirse, sudo doğrudan su kullanmaktan nasıl daha güvenlidir?


40

Bu yüzden suve arasındaki farkları okudum sudove herkes bu sudoyaklaşımın root hesabına erişime izin vermekten daha güvenli olduğu konusunda hemfikir gibi görünüyor . Root hesabı ile tüm sisteminizi tek bir komutla kırabileceğinizi söylüyorlar. Bunu anlıyorum. ANCAK sistemde oluşturulan ilk kullanıcı sudo kullanarak tüm komutlara erişebilir. Bunu çalıştırarak öğrenebilirim su -l. Eğer durum buysa, sudo <game-ending command>sistemimi mahvetmek için koşabilirim . Peki bu yaklaşım nasıl daha iyi ya da daha güvenli, daha sonra süper kullanıcı hesabına doğrudan erişmeme izin veriyor? Aynı komutları çalıştırabilirim ...

Bunun nedeni sudokomut satırında açıkça bilgisayara ne yaptığımı bildiğimi düşünüyorum. Açıkça söylemedikleri sürece insanların süper kullanıcı hesabı altında olduklarını unutacaklarını mı sanıyorlar?

İnsanlar ayrıca, eğer sistemin dışardan biri tarafından ele geçirilmesi ve girilmesi durumunda, kök hesabın altında olmanın onların sistemime korkunç şeyler yapmalarına izin vereceğini belirtti. Ancak, eğer benim hesabıma zaten erişiyorlarsa ve şifremi biliyorlarsa, bu korkunç şeyleri sudo kullanarak ve şifremi girerek süper kullanıcının şifresini bile bilmelerine gerek olmadığından yapabilirler. Neye gelmiyorum buraya?



2
Bu soruyu oluşturduğunuz için teşekkür ederiz, bu yüzden şimdi sudo olduğunu söyleyen insanlara daha güvenli olduğunu söyleyebilecek bir şey var.
kullanıcı253751

Yanıtlar:


40

Şahsen ben mutlaka daha güvenli olduğunu düşünmüyorum ve faydaların çoğu (sudo) çok kullanıcılı bir sistemde. Tek bir kullanıcı sisteminde muhtemelen bir yıkamadır.

Avantajlar (belirli bir sıra ile değil):

  • sudo'nun üstün bir kaydı var. sudo her komutu günlüğe kaydeder.
  • sudo daha ince tanecik kontrolü sağlar. Biri sudo'yu bazı komutlara değil bazılarına kök erişimi verecek şekilde yapılandırabilir.
  • sudo giriş şifresini kullanır. Bu, root şifresini (su ile yaptığınız gibi) vermek zorunda kalmanızı önler ve daha hassas taneli kontrol / kök erişimine ilişkin yukarıdaki nokta ile ilgilidir.
  • Ubuntu'da, varsayılan olarak, kök hesap kilitlidir. Bu sayede krakerlerin giriş yapması (ssh ile uzaktan) yapılması gerekmekte olup hem kullanıcı adı hem de şifre tahmin etmeleri gerekmektedir. Eğer root hesabı kilitli değilse, su için olduğu gibi, o zaman sadece root şifresini kırmaları gerekir.
  • sudo -ikökün çevresel değişkenlerini kullanıcınızdan izole etmek için muhtemelen en iyi yöntemdir. Bu zaman zaman ortaya çıkar, fakat orta derecede ezoteriktir. Bkz https://help.ubuntu.com/community/RootSudo#Special_notes_on_sudo_and_shells
  • Bazı insanlar root olarak çalıştırmak istedikleri her komuttan önce sudo yazmak zorunda kaldıklarını veya sudo zaman aşımına uğradıklarının daha net bir şekilde durmalarına ve düşünmelerine izin verdiklerini ve hatalarını azalttıklarını veya hatalı komutları çalıştırdıklarını düşünüyorlar. Bunu yaparsanız size yardımcı olur bu da bir fayda olacaktır.

Muhtemelen daha fazla fayda var, ama bunlar en büyükleri, IMHO.

Ayrıca bakınız - https://help.ubuntu.com/community/RootSudo

Bazı düşüncelerinizi cevaplamaya çalışmak için:

  • Su veya sudo hakkında, parolayı bildiğiniz sürece kötü amaçlı kod çalıştırmanızı engelleyen hiçbir şey yoktur. Hiçbiri daha güvenli veya daha iyi.
  • Krakerler bir dizi yöntemle kabuk erişimi sağlayabilir. Bir güvenlik uyarısında "rastgele kod çalıştır" gördüğünüzde - https://usn.ubuntu.com/usn/ - bu bir krakerin / bin / bash veya başka bir kod çalıştırabileceği anlamına gelir. Böylece, çeşitli istismarlar yoluyla bir kraker, giriş adınızı veya şifrenizi bilmeden kabuk erişimi elde edebilir. Ne sudo ne de su bu konuda yardımcı olmaz.
  • Bir krakerin kabuk erişimi varsa, kök erişimi olmayan çok fazla hasar verebilir. Örneğin, tüm kişisel verilerinizi şifreleyen fidye yazılımı.
  • Eğer bir kraker root erişimi olan bir hesaba, su veya sudo yoluyla kabuk erişimine sahipse, kraker bu tartışmanın kapsamı dışındaki birkaç yöntemle kök erişimi sağlayabilir. Ne sudo ne de su bu açıdan üstün değildir.

Yani, sudo ile ilgili sorunları veya kusurları gözlemlerken, su aynı güvenlik açıklarına sahiptir ve su bu yönlerden sudo'dan daha üstün değildir, IMHO


Tüm kullanıcıların sudoers girişleri yerine veya grup adına sahip olmak yerine destop kurulumunda güç (poweroff ve reboot) kontrolü sağlamasına izin vermeyi tercih etmek iyi olacaktır.
mckenzm

8
Bence en büyük avantaj, her bir komutu süper kullanıcı izinlerine ihtiyaç duymak için gerekçelendirmek. Linux ile olan ilk deneyimimde, sisteme bağladığım kadarıyla en az bir terminalde her zaman root gibi çalışmaya meyilli olduğumu öğrendim. Ne yazık ki, yanlış anlama veya yanlış yazarak terminalde yıkıcı bir komut vermek çok kolaydır. Bu 'root terminal'indeydi, yedeğin geri yüklenmesine ya da yeniden kurulmasına neden olabilir. sudo beni birçok kez korudu!
roller

14
Kök şifresini tehlikeye atmamak belki de sudo'nun en büyük avantajı. Herhangi bir sır vermeden kök izin verebilirsin.
Thorbjørn Ravn Andersen

Sadece komutları kısıtlamakla kalmaz, aynı zamanda belirtilen argümanları da kısıtlayabilirsiniz. Ancak kilitli olmanın kök ile bir ilgisi olduğunu kabul etmiyorum; çünkü ssh'yi root girişine izin vermeyecek şekilde yapılandırabilirsiniz. Sudo'ya karşı su: sudo'da olsa başka bir şey var: sudo, kullanıcı adınızı kullanarak ödün vermek için daha az şifre kullanıyor ve bu genellikle iyi bir şey değil. Bu dünyadaki her şey gibi, bir şeyi yapmanın farklı yolları vardır ve bu, bir yolun diğer zamanlardan% 100 daha doğru olduğu anlamına gelmez. O zaman tercihler var.
Pryftan

Ancak, root erişimine ihtiyaç duyan birden fazla kullanıcı varsa otoh (içine gireceğim bir şey değildir, çünkü bu - bu en iyi - iyi bir tartışmadır) o zaman sudo burada bir avantaja sahiptir.
Pryftan

10

Karmaşık bir şey yapmak için 20 dakikanız olduğunu hayal edin. Biraz acıkmışsın ve acele etmelisin. “Suyu kullanalım” diyorsunuz. “Biraz zaman kazandıracak”, mantığınız.

Kazara yazarsın

rm -rf /*

onun yerine

rm -rf ./*

Sisteminiz şimdi kendini örüyor ve son teslim tarihine kadar 10 dakikanız var.

Ne zaman kök ihtiyacınız olduğunu açıkça seçerseniz, bunun olma ihtimalini en aza indirebilirsiniz. Kök için gerekmeyebilir, rm -r ./*neden kullanalım? Neden risk almak?

Burada “güvenlik” ne anlama geliyor? Kullanıcıların (tüm kullanıcılar, sadece yeni başlayanlar için değil) ölümcül bir hata yapma riskini en aza indirir.

Tabii ki, bu bir üretim ortamında olmasına izin verilmemesi gereken aşırı bir örnektir (bunun prod ortamında yapıldığını garanti ederim).

Güvenlik bilge, sudo için de iyi olan bazı şeyler var. As @Panther diyor - günlüğü, kısıtlamalar, kök şifre vb SPOF ise)


4
Cehennem, sadece yaparsan ... ... chown -R nobody:nobody /ya da chown -R nobody ../kök olarak bekletmene gerek yok . chmodtabi ki özyinelemeli modda da benzer problemler var. Ancak yaptığınız en iyi şey, yalnızca ihtiyacınız olduğunda kök olmanız gerektiği; Giriş bilgileriniz ne kadar az ayrıcalıklı ise normal kullanım için o kadar iyidir.
Pryftan

2
Akşamdan kalırken programlama yapmak için +1.
abhicantdraw

4
Peki, bunun nesi farklı sudo? Bunun sudo rm -rf /*yerine yazın sudo rm -rf ./*ve tekrar patlama.
ilkkachu

2
Gerçek komut açısından @ ilkkachu, olanlara minimum fark yaratır. Ancak, bunu kök olarak yapmak istediğinizi açıkça belirtmeniz gerekiyordu. Mesele bu. Güvenlik risk yönetimi ile ilgilidir. Tabii ki sistemi hala tuğla yapabilirsiniz. Ancak kök ayrıcalıklarınız ne kadar az zaman alırsa, ölümcül bir hata yapma şansınız o kadar az olur. Güvenlik, olasılıkları en aza indirgemekle ilgilidir.
dijksterhuis

2
Eğer Çünkü @ilkkachu olmaz yazın sudo rm -rf ./*. Muhtemelen geçerli dizindeki öğelere yazma erişiminiz vardır, bu yüzden bu komut için sudo gerekmez. Olmak kadar typoed komut biter Yani rm -rf /*sen gerek bildirerek, mesajlar "İzin verilmedi" uzun bir dizeyi verir, ctrl-co aslında silebilir şeyler gelmeden önce yerine sadece her şeyi silme /bin, /boot, /devve yarısı /etcöncesi bir şeylerin yanlış olduğunu bile biliyorsun.
Ray,

9

Diğer cevaplara biraz tarihsel bakış açısı eklemek istiyorum. Maalesef, Usenet tartışmaları ve dergi makaleleri hakkındaki kendi hatıralarım dışında hazır hiçbir kaynağım yok.

Bir süre önce, 1990'larda, çok fazla bilgisayar bilgisine sahip olmasa da, dağıtımlar Linux'u kendi donanımınıza kurmayı kolaylaştırıyordu. ”Böylece, Linux daha önce şaşırtıcı bir şekilde sistem yöneticileri olarak delinmemiş olan insanları daha fazla çekmeye başladı. bazı UN * X lehçeleri. Bunun yerine, çoğu Windows 95/98 gibi (tek kullanıcılı) sistemlere kullanıldı. Ve çoğu Linux sistem yönetimi görevinin bu garip "root" hesabı altında çalışmayı gerekli hale getirdiğini öğrendiler.

Böylece, bazı kullanıcılar sadece root olarak giriş yaptı ve bu hesabı günlük çalışmaları için kullandı. Neden tekrar ve tekrar root şifresini yazmalı suve sadece bazı yönetici komutları için yeni bir tty ile giriş yapmalılar ? Ancak her şey için kök kullanmak elbette iyi bir fikir değildir, çünkü yanlış yere bazı akılsız bir komutla sisteminize çok daha fazla zarar verebilirsiniz. Bu, root hesabının masaüstü arkaplanını değiştirerek, bu hesabı sadece yönetici görevleri için kullanmanız gerektiğine dair büyük bir uyarı gösterecek şekilde bazı dağıtıma yol açtı (SuSE mi?) .

Bu nedenle, Ubuntu yolunun sudobazı avantajları vardır (zaten Panther tarafından listelenenlere ek olarak ).

  • Doğrudan kök hesaba giriş yapamazsınız.
  • Yükleme işlemi sizden (ek) bir kök şifresi istemeyecektir, yalnızca bir (kullanıcı) şifreniz gerekir.
  • sudokimlik bilgilerinizi önbelleğe alır, bu nedenle sırayla birden çok yönetici komutu için şifrenizi yalnızca bir kez (aksine su) girmeniz gerekir . Bu, sadece bir kabuk veya kök ayrıcalıklarına sahip yeni bir terminal açma dürtüsünü azaltır .
  • Ayrıca kullanıcılara çevrimiçi olarak ve dokümantasyonda hangi komutları yönetici olarak girmeleri gerektiğini ve hangilerini söylememelerini kolaylaştırır.

Themselves Kendilerini yapmaya cesaret edemeyenler için, kurulum partileri vardı.
² Ama olabilir gibi bir komutu sudo -iveya sudo su - rootnormal bir kullanıcı olarak oturum sonra bir kök kabuğu almak için.
³ Ama elbette biliyorsun ki internetten komut kopyalayıp yapıştırmamalısın , değil mi?


Ubuntu'da yapamayacağınızı mı söylüyorsunuz: sudo su -ya da sudo su - root? Çünkü benzer iddiaları gördüm, örneğin MacOS X'in kökü yok, ancak yalnızca ilk komutu yapması gerektiğinde bu tamamen yanlış ...
Pryftan

2
Elbette bir kök hesabı var. "Doğrudan giriş" yapamayacağınızı söyledim, yani rootgiriş isteminde veya X giriş iletişim kutusunda kullanıcı ve şifreyi giremez ve oturumunuzu root olarak başlatamazsınız. Ancak sudo -ibir kök kabuğu elde etmek için komutlarınızdan birini ( daha kısa ve tembel olduğumu tercih ederim ) kullanabilirsiniz.
Dubu

1
Lütfen yorumumu tekrar okudum :) Bazıları MacOS X'in bir kök hesabına sahip olmadığını ama aslında bunun olduğunu ve bana bunu hatırlattığını söylemiştim (Ubuntu'da kök hesabı olmamasına eşit değildim). Fakat herkes için Ubuntu’daki devlerin, bu yüzden sorumu kabul etmeyecek şekilde sudo yaması için çılgınca olduklarını biliyorum.
Pryftan

1
@Pryftan Yukarıdaki yorumumda dediğim gibi, her iki komutunuz da işe yarıyor ve size bir kök kabuğu getirecek. Bunu cevabımı ekleyeceğim.
Dubu

Evet. Bunu biliyorum :) Bunun yanlış veya yanlış olduğunu söylemedim. Bana bazılarının söylediği bir şeyi hatırlattığını ama söylerken yanlış olduğunu söylüyordum. Bu yüzden o kısmı cesurlaştırmak.
Pryftan

2

Root ssh ile on yıllardır kök girişini kapatmak mümkün olmuştur. Kök hesabı devre dışı bırakmanın ve insanları her şeyi sudo haline getirmenin Ubuntu yolu, hile yapmaktan başka bir şey değildir. Sadece "sudo -s" ve bir kök kabuğun var. Köşe girişini ssh ile devre dışı bırak ve orada bırak.


8
... bu notta, sadece root hesabı için değil, HERHANGİ ssh girişleri için anahtar yoldan gitmek, harika bir uygulamadır.
rackandboneman

Evet. Bunu birkaç dakika önce yapılan bir yorumda not ettim. Otoh en az ayrıcalıklı olmak en iyisidir, bu yüzden yalnızca ihtiyacınız olduğunda yükseltin ve bu, ssh ile mi yoksa yerel olarak mı giriş yaptığınıza göre geçerlidir. Ve @rackandboneman'ın söylediği elbette kesinlikle doğru. Tabii ki benim için sistemden bağımsız olarak ssh tuşlarında bile uzaktan root tam durağını devre dışı bırakıyorum.
Pryftan

0

Yapılandırmaya bağlı olarak sudo <game ending command>mutlaka çalışmayacak. Tabii ki, sudoersyapılandırma "user ALL = (ALL) ALL" okursa, sudoek koruma sağlamaz. Bununla birlikte, yeni paketler yüklemek gibi sıkça çalıştırmanız gereken ayrıcalıklı komutların bir listesini belirtebilir ve benzeri tehlikeli komutları bırakabilirsiniz rm.

Bu şekilde, eğer giriş yaparsanız tüm komutları çalıştırabilirsiniz root, ancak yalnızca buna ihtiyaç duyacağınız için, çalışma riski <game ending command>büyük ölçüde azaltılacaktır.


1
Ve komutlara da özel argümanlar.
Pryftan

1
Ve kullanıcı başına değil grup başına. çok kullanıcılı ortamlarda grupları kullanmak paha biçilmezdir, personel gelip gidebilir ve belirli rollere ihtiyaç duyabilirsiniz.
Panter

0

Bu sudo, yalnızca belirli komutlara izin vermenize izin verir, sudo'nun su üzerindeki tek faydası değildir.

Çoğu mağazada, en önemli faydası bile değil.

Sudo ile belirli bir komutu kimin yaptığını biliyorsunuz.

Şimdi belki bu senin için önemli değil. Örneğin, bilgisayarınızın tek kullanıcısı siz olabilirsiniz. Eğer öyleyse, o zaman sudo muhtemelen sudan daha iyi değildir.

Ancak birçok ana bilgisayarın birden fazla yöneticisi var.

Sonra sudo çok yararlı olur çünkü eğer birisi yanlış bir şey yaparsa, sudo kimin yaptığını bilmenizi sağlar.

Bu, hataların neden olduğunu anlamanıza ve insanları tekrarlayan hataları önlemek veya gerekirse araçları birinden kaldırmak için eğitmenize olanak tanır.

Bir bonus olarak, insanlar eylemlerinin kaydedildiğini bildiğinde, genellikle biraz daha dikkatli olurlar.

Sudo mükemmel değil.

İki kişi aynı anda "sudo sh" yaparsa, komutları birine veya diğerine atfetmek zor olabilir.

Ve kötü niyetli bir yönetici günlükleri her zaman kaldırabilir veya düzenleyebilir - bunu temiz bir şekilde yapmak, her zaman, özellikle merkezi günlük kaydı yaptıysanız, insanların düşündüğü kadar kolay değildir.

sudo, asıl soruda belirtilen tüm sebeplerden dolayı, aptalca veya kötü niyetli bir işlemi durdurmaz.

Ama size tekrarı önlemek için çok daha iyi bir şans veriyor.


1. Yalnızca doğru şekilde yapılandırmak için zaman ayırırsanız. Varsayılan Ubuntu sisteminin yapamadığı (ve yapamadığı). 2. Yalnızca kullanıcı post-fact logları düzenlemezse, çalıştırdıkları komutlar sınırlı olmadığı sürece yapabilir. (Hangi varsayılan Ubuntu kullanım durumunda değildir)
ilkkachu

@ ilkkachu, iyi noktaların olmasına rağmen, buradaki argümanın bir anlamı yok. Nokta varsayılan ayarlar değildir, nokta sudo'yu yapılandırmak ve ince ayar yapmak mümkündür. Suyu bu şekillerde hareket edecek şekilde yapılandıramazsınız. su hepsi ya da hiçbiri, komutları sınırlamanın bir yolu yoktur ve sudo'nun üstün bir günlük kaydı sağlaması meselesidir. Ne su ne de sudo, bir krakerin ele geçirilen bir sistemde yapabileceklerine veya yapmamalarına karşı herhangi bir güvenlik sağlamaz ve hiç kimse bu şekilde sudo yapamaz. Sudo loglar normal günlük işlemlerde büyük değere sahiptir.
Panter,

@Panther, peki, soru başlığı "... kullanıcının tüm komutlara erişim hakkı varsa?" bu yüzden sudoher şeyin mümkün olduğu varsayılan varsayılan Ubuntu yapılandırmasını kastettiklerini varsaydım . Elbette, bir kullanıcının çalıştırmasına izin verilen komutları sınırlayacak şekilde yapılandırabilirsiniz, ancak soruda sorulduğu gibi olduğunu sanmıyorum.
ilkkachu

Cevap genişledi.
Ben Aveling

@ilkkachu - cevabımı tekrar okudum "Şahsen ben daha güvenli olduğunu düşünmüyorum ve faydaların çoğu (sudo) çok kullanıcılı bir sistemde. Tek kullanıcılı bir sistemde muhtemelen yıkama oluyor." Daha sonra sudo'nun diğer avantajlarını açıklamaya devam ettim, bunlardan biri yapılandırılabilir olmasıdır.
Panter
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.