Neden “su” için bir şifrem yok? “Sudo” ile ilgili sorunlar


34

GUI'yi kullanarak Ubuntu'yu yükledim, kendime bir şifre ve her şeyi verdim. Süreci karmaşık bir şekilde hatırlamıyorum. Ancak, beni endişelendiren şu şifreyi bilmemem:

$ su
Password: <the only password I've ever created on this machine>
su: Authentication failure

Sadece ne yapacağımı bilemiyorum. Başım belada değil, ama burada neler olduğunu bilmek istiyorum. Ayrıca kendimi dizinlerden uzak tutabilirim:

starkers@ubuntu:~/Desktop$ mkdir foobs
starkers@ubuntu:~/Desktop$ sudo chmod 777 -R foobs
sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700
[sudo] password for starkers: <the only password I've ever created on this machine> 
starkers@ubuntu:~/Desktop$ cd foobs
bash: cd: foobs: Permission denied

Sadece biraz kafam karıştı. Kendimi bu şekilde nasıl kilitleyebilirim? sudoBurada anahtar komut olduğunu düşünüyorum . Ama foobsdosyayı mümkün olan en açık şekilde açıyorum chmod, peki neden beni kilitliyor?


6
chmod -R 777 whateverBüyük bir güvenlik riskine neden olmak istemiyorsanız, neredeyse asla yapmamalısınız .

1
@BroSlow Üst için teşekkürler. Bu sorunun dışında, bir kişi nasıl bir dizine güvenli bir şekilde okuma yazma ayrıcalıkları koyar? 666?
Başlayanlar

1
Kesinlikle daha iyi, ama ne yapmaya çalıştığınıza bağlı. Örneğin, tüm kullanıcıların her şeye erişebilmeleri için gerçekten ihtiyacınız var mı? Olmazsa, 644 gibi bir şey yapabilirsin (sadece sen hariç herkes için oku). Ve genel olarak, chmodsadece sadece istediğiniz dosyaları değiştirdiğine dair özyinelemeyi yaparken çok dikkatli olurdum .

1
@broslow Yüksek misiniz? 666 1) hala dünyaca yazılabilir ve bu nedenle aynı derecede güvenlik riski taşıyor ve 2) çalıştırılabilir biti kaldırıyor, yani artık o dizine giremez.
Shadur

@ Starkers Burada gördüğüm asıl güvenlik konusu, bazı delice sebeplerden dolayı /var/lib/sudo, dünyaya yazılabilir olarak ayarlanmış olmasıdır. Bu olmamalı ve neden olduğunu bulmaya çalışmalısınız.
Shadur

Yanıtlar:


49

Varsayılan olarak, superuser ( root) hesabı devre dışı bırakılmıştır ve şifresi yoktur. Çalıştırarak bir tane oluşturabilirsiniz:

$ sudo passwd root

Daha sonra subu şifreyi kullanarak çalıştırarak root olarak giriş yapabilirsiniz .

Gelince chmod, doğru komut olacaktır:

$ chmod 777 -R foobs

Ayrıca kullanabilirsiniz:

$ sudo -i

şifrenizi kullanarak root olarak giriş yapmak için (yukarıda açıklandığı şekilde root şifresi oluşturmadan).


4
@Oli Belki de eklemek istediğiniz sorunuzu düzenleyebilirsiniz sudo su. Bu ayrıca terminalde kalıcı su hakları da veriyor.
uyanmak

13
kullanmayınız sudo su, çünkü çevreye zarar verir ve işler kırılır. bunun yerine kullanın sudo -i.
Strugee

20
Bir root şifresi ayarlamayın. Do not root parolası ayarlayın.
wchargin

4
chmod 777 neredeyse her zaman kötüdür (yapışkan bit / tmp ile kullanıldığı gibi muaftır). Bu cevap bir güvenlik riskidir. Ayrıca bir root şifresi ayarlamak Ubuntu'nun kullanılması gerektiği gibi değildir; Yine bir güvenlik riski davet ediyor. Lütfen neon_overload'ın cevabını takip edin.
Rinzwind

4
@WChargin neden bir root hesabınız / şifreniz olmadığını öneriyorsunuz? Archlinux kullanıcısı olarak gerçekten merak ediyorum.
Rob

67

1. Neden bir root şifreniz yok

Eğer iken edebilirsiniz sizinle root olarak giriş yapmak için izin süper hesabı için bir parola oluşturun su, 's değerinde bu Ubuntu (ya giderek, diğer dağılımlar yanı) işlerin gerçekleştirilmesi için olağan bir yol değildir söz. Ubuntu , bir nedenden dolayı varsayılan olarak root girişi ve şifre vermemeyi seçti . Bunun yerine, varsayılan bir Ubuntu kurulumu sudosüper kullanıcı ayrıcalıkları vermek için kullanacaktır . Varsayılan bir Ubuntu'da işletim sistemini yükleyen kişiye varsayılan olarak "sudo" izni verilir.

Tam "sudo" iznine sahip olan herkes sudo, emirlerini beklemeden "üst kullanıcı olarak" bir şey yapabilir . Örneğin, apt-get dist-upgradebir süper kullanıcı olarak çalıştırmak için şunları kullanabilirsiniz:

sudo apt-get dist-upgrade

Web'de Ubuntu hakkında bir öğretici okuduğunuz her yerde sudo kullanımını hemen hemen göreceksiniz. Bunu yapmanın bir alternatifi.

su
apt-get dist-upgrade
exit

Sudo ile, hangi kullanıcıların sudo erişimine sahip olacağını önceden seçersiniz. Kendi şifresini kullandıkları için bir root şifresini hatırlamalarına gerek yoktur. Birden fazla kullanıcınız varsa, root şifresini değiştirmek ve herkese yeni bir şifre bildirmek zorunda kalmadan, kullanıcının sudo izinlerini kaldırarak süper kullanıcı erişimini iptal edebilirsiniz. Bir kullanıcının sudo kullanarak gerçekleştirebileceği komutları ve bu kullanıcı için hangi komutların yasak olduğunu bile seçebilirsiniz. Son olarak, eğer bir güvenlik ihlali varsa, bazı durumlarda hangi kullanıcı hesabının tehlikeye girdiğini gösteren daha iyi bir denetim izi bırakabilir.

Sudo, süper kullanıcı ayrıcalıklarına sahip tek bir komut gerçekleştirmeyi kolaylaştırır. İle sukalıcı olarak exitveya ile çıkılması gereken bir süper kullanıcı kabuğuna düşersiniz logout. Bu, insanların süper kullanıcı kabuğunda gerekenden daha uzun süre kalmasına neden olabilir, çünkü oturumu kapatıp tekrar açmaktan daha uygundur.

Sudo ile, şu komutla kalıcı (etkileşimli) bir süper kullanıcı kabuğu açma seçeneğine sahipsiniz:

sudo su

... ve bu hala herhangi bir root şifresi olmadan yapılabilir, çünkü komuta sudosüper kullanıcı ayrıcalıkları verir su.

Ve benzer şekilde, su -bir giriş kabuğu yerine kullanabilirsiniz sudo su -veya kısayolu sudo -i.

Ancak bunu yaparken, sadece her komut için bir süper kullanıcı olarak davrandığınızı bilmeniz gerekir. Kazara yanlışlıkla sisteme bir miktar zarar vermeme ihtimalini azaltmak için (gereğinden fazla, sadece kullanıcınızın sahip olduğu dosyalara zarar verebilirsiniz), süper kullanıcı olarak kalmaktan kaçınmak iyi bir güvenlik ilkesidir.

Sadece açıklığa kavuşturmak için , eğer isterseniz, özellikle de bunun yerine bu şekilde yapmak istiyorsanız, kök kullanıcıya @ Oli'nin cevabında açıklandığı şekilde rootlara izin veren bir şifre verebilirsiniz. Sadece Ubuntu'nun tercih etme konvansiyonu hakkında bilgi sudovermek ve bunun bir alternatifi olduğunu bildirmek istedim.


2. chmod 777 -R komutunuzla ilgili sorunlar

Sorunuzun ikinci bir kısmı da var: Komuta ile ilgili sorunlarınız sudo chmod 777 -R foobs.

İlk olarak, aşağıdaki uyarı makinenizde potansiyel olarak ciddi bir güvenlik sorununu gösterir:

sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700

Bu, bir aşamada, /var/lib/sudodünyaya yazılabilir olmaya başladığınız anlamına gelir . Bunu bir aşamada böyle bir komut kullanarak yaptığınızı hayal ediyorum sudo chmod 777 -R /. Ne yazık ki, bunu yaparak sisteminizdeki tüm dosya izinlerini büyük olasılıkla kırdınız. Bunun izinleri dünyaca yazılabilir olarak değiştirilmiş tek önemli sistem dosyası olması muhtemel değildir. Temelde şimdi kolayca kırılabilir bir sisteme sahipsiniz ve onu geri almanın tek kolay yolu yeniden yüklemek olacaktır.

İkincisi, kullandığınız komut:

sudo chmod 777 -R foobs

Ana dizininizdeki dosyaları değiştirirken, bu durumda ~/Desktop, kullanmak zorunda kalmamalısınız sudo. Ana dizininizde yarattığınız tüm dosyalar yine de sizin tarafınızdan değiştirilebilir olmalıdır (eğer değilse, komik bir şeyler oluyor).

Ayrıca, yinelemeli olarak veya çok sayıda dosyada olduğu gibi, toplu olarak dosya izinlerini değiştirmenin sonuçlarının tamamen farkında olmanız gerekir. Bu durumda, dikkatli bir şekilde değiştiriyorsunuz, dünyadaki yazılabilir olması için dosya izinlerini ayarlayın. Makinedeki herhangi bir başka kullanıcı veya buggy sunucu yazılımı, bu dosyaların ve dizinlerin üzerine yazmak için kolay erişebilir.

Bu neredeyse kesin olduğunu chmod 777 -R [dir]öyle değil diğer bir sürü farz olursa olsun sorun çözmeye çalışıyorlardı (ve yukarıda da belirtildiği gibi, orada da / var / lib sistem dosyalarına yapmış dair kanıtlar olduğunu ve uygun bir çözüm yerler).

Birkaç temel kural:

  • Ana dizininizdeki, masaüstünüzdeki, vb. Kendi dosyalarınızla uğraşıyorsanız, asla kullanmanıza sudoveya süper kullanıcı haklarına ihtiyacınız yoktur . Yaparsanız, yanlış bir şey yaptığınıza dair bir uyarı işaretidir.

  • Paketlere ait sistem dosyalarını asla manuel olarak değiştirmemelisiniz. İstisna: Özel olarak bu paketleri tarafından belgelenen şekillerde yapılmadıkça, konfigürasyonlarını değiştirmek gibi /etc. Bu, değişen dosya izinleri için de geçerlidir. Bir öğretici veya sorunu çözme girişimi sudoveya süper kullanıcı hakları gerektiriyorsa ve / etc / içindeki bir yapılandırma değişikliği değildir, yanlış bir şey yaptığınıza dair bir uyarı işaretidir.


Müthiş açıklama .. Thumbs up .. :)
Saurav Kumar

7
Sanırım "sudo -i", "sudo su" yerine kök kabuğu almanın "resmi" yoludur
Max

3
Evet, sudo -iüzerinden kullanmalısın sudo su.
Seth

sudo -i(veya sudo su -) evrensel olarak daha iyi değil, yalnızca farklıdır - bunlar , örneğin kök kullanıcının dosyasını veya dosyasını çalıştıran bir kök kullanıcı giriş ortamını simüle eden bir giriş kabuğu başlatır . Bunlar, kabuktaki ortamın süper kullanıcı ayrıcalıklarına gelen etkileşimli bir kabuktan daha çok bir kök giriş kabuğu gibi olmasını istiyorsanız daha iyidir. Bir kabuk kullanıyorsanız, oturum açma tabanlı mermileri kullanmak muhtemelen daha iyidir, ancak bu oldukça fazladır: cevabın amacı Ubuntu’nun süper kullanıcı ayrıcalıklarına sahip komutları çalıştırmak için kullanılmak üzere tasarlanmış olmasıdır . .profile.loginsudo
thomasrutter
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.