Sudo-root; gerçek farklılıklar?


43

Bir ürün için bir destek elemanıyla çalışıyorum ve bir seri yamayı kurmak için kök olmam gerektiği konusunda ısrar ediyor ve bu sudo işe yaramayacak; bir sebep vermiyor ama inançlarında çok sağlam görünüyor. Superuser'a Göz Atma Bu durum için bunun için olası bir nedeni belirleyemiyorum ve çalıştırdığımda onayda:

sudo -l

Alırım:

...
User [MY USERNAME] may run the following commands on this host:
    (ALL) ALL

Linux / sunucu ekibinden gerçekten root olmak için erişim sağlamak, anladığım kadarıyla bir süreç değildir, bu yüzden onları kendim kurmayı tercih ederim.

Sudo'nun sunucuya yazılım yüklemek için neden kökten farklı davranması gerektiğine dair herhangi bir pratik sebep var mı?


2
Bence onu geri atmalısın. Diğerlerinin de gösterdiği gibi, sudo kullanarak kök kazanmanın çok çeşitli yolları vardır ve sudo'nun neden yetersiz olduğu konusunda size somut bir neden sağlayamazsa, o zaman dayanacak ayağı yoktur.
Garrett

1
Çevre ve alt komutlar akla geliyor. Bence Hastur çevre ile iyi bir iş çıkardı ve Jayen alt komutanlık, borulama ve yönlendirme ile iyi bir iş çıkardı.
jww

2
Garrett iyi bir noktaya değindi ama potansiyel bir pissing yarışmasına girmeden önce, destek üyesine sorardım: her iki yolu da denediniz mi ve bu yollardan birini başarısız mı ettiniz? O başarısızlık yolundaydı sudove senaryolar şu anda yazıldığı gibi senaryolar olabilir. Eğer durum buysa, daha sonra SDS' cevabı sizin için en yararlı olabilir: sudo su -.
jww

Yanıtlar:


33

Bu, programınızı sudoveya ile nasıl çağırdığınıza bağlıdır su.
Örneğin şu an bulunduğum sistemde:

                  .bashrc                        
    COMMAND        $HOME   $USER  Env.  $PATH
 1. sudo -i        (root)   root  root  [1]
 2. sudo -s        (USER)   root  USER  /home/${USER}/bin:[1]
 3. sudo /bin/bash (USER)   root  USER  /home/${USER}/bin:[1]  
 4. sudo su        (root)   root  USER  [1]:/usr/games:/usr/local/games  
 5. sudo su -      (root)   root  root  [1] 

[1] = / usr / yerel / sbin: / usr / yerel / bin: / usr / sbin: / usr / bin: / sbin: / bin
Env = Ortam değişkenleri 1 ve 5 için sıfırlanır, 2,3,4.

Yani bir komut dosyası veya farklı görebilirsiniz farklı seçeneği ile başlatılan bir program $PATH, $HOMEkendi kabuk farklı okuyabilir .bashrc, .profileve ortam değişkenleri. İle ilgili dosyayı okur $HOME. Her kullanıcı ortamını farklı bir şekilde değiştirebilir (değişkenler $PATH, .bashrc, .profile, .bash_profile, alias ...). Özellikle bir kullanıcı, içinde dizinlerin farklı bir sırasına sahip olabilir $PATHve bunun bir sonucu olarak, bir komut dosyası, örneğin /home/$USER/bin, kökten beklenen yoldaki yerine bir komut çalıştırabilir .

Programı altında sudo -iroot olarak oturum açtığınız gibi su -çalıştırabilirsiniz, ancak ile birlikte sudo MyCommandveya birlikte çalıştırdığınızda farklı davranışlar gösterebilirsiniz su -c MyCommand.


Kimden man su:

Açıklama bölümünde:
Geçerli ortam yeni kabuğa geçirilir . $ PATH değeri normal kullanıcılar için / bin: / usr / bin olarak ayarlanır, veya / sbin: / bin: / usr / sbin: / usr / bin, superuser için
...
Seçenekler bölümünde:
- , -l , --login Kullanıcının doğrudan giriş yapması durumunda, kullanıcının beklediğine benzer
bir ortam sağlayın .

Adamdan sudo

-i , --login
Hedef kullanıcının şifre veritabanı girişi tarafından belirtilen kabuğu bir giriş kabuğu olarak çalıştırın. Bu, .profile veya .login gibi girişe özgü kaynak dosyalarının kabuk tarafından okunacağı anlamına gelir. Bir komut belirtilirse, kabuğun -c seçeneği ile yürütülmek üzere kabuğa geçirilir. Hiçbir komut belirtilmezse, etkileşimli bir kabuk yürütülür. sudoKabuğu çalıştırmadan önce bu kullanıcının giriş dizinini değiştirmeye çalışır. Komut, kullanıcının oturum açtığında alacağıkine benzer bir ortamla çalıştırılır . Sudoers'daki (5) Komut Ortamı bölümü, -i seçeneğinin, sudoers politikası kullanılırken bir komutun çalıştırıldığı ortamı nasıl etkilediğini manuel olarak belgeler.


Mükemmel cevap. Ben hala Linux'ta acemi biriyim, fakat sudosudoers dosyasındaki izinlerle sınırlandırılabildiği başka bir fark var mı? Son blok alıntı belki de bunu ima eder, fakat eğer doğru anlarsam, bu sadece çevrenin ötesinde (ya da belki de çevre yüzünden?) Önemli bir fark gibi görünüyor.
fixer1234

23

Tam sudoerişiminiz varsa, rootkullanmaya başlayabilirsiniz sudo su -, böylece güvenlik noktası tartışılır.

Gerçekten de, bir programın çalıştığı rootbir program ile altında çalışan bir program arasındaki farkı ayırt etmenin bir yolu vardır sudo- getuidvs kullanarak geteuid- ama bu kesin bir numaradır. Neden bir yama sistemi bunu yapar?


5
Konuşurken, doğrudan giriş yaparken olduğu gibi aynı ortama sahip olması su -için kullanmak isteyebilir sudo -i.
Cristian Ciupitu

2
Örneğin sudo myscript, koşarsanız $ PATH ve ortam değişkenlerini bulunduğunuz kabuktan korursunuz. Eğer sudo -i myscriptkoşuyorsanız, sanki root olarak giriş yapıyormuş gibi koşun. Bizim ile cevap bakın :-) aramaların _zoo _
Hastur

1
Çevresel değişkenlerin sudoroot olarak giriş
yapmakla

1
@dmanexe: sudo superuser yapmak için geçerli değil, "switch user yapmak" anlamına geliyor. su ve sudo, sadece superuser yerine herhangi bir kullanıcıya geçmek için kullanılabilir. Ayrıca sudo ile ilgili sahte bir şey yok, sudo çalıştırırken asıl kökü alıyorsunuz. Sudo'nun sihrinin gerçekten setuid izin bitinden geldiğine dikkat edin.
Yalan Ryan

2
sds, @CharlesDuffy: Sudo ve su'nun neden olduğu geteuid()ve getuid()birbirinden farklı olduğu düşüncesi bir efsanedir. su ve sudo, belirtilen komutu veya kabuğu çalıştırmadan önce hedef kullanıcının kimliklerini değiştirir; aksi takdirde davranışlarını açıkça gösterecek şekilde yapılandırdığınız olağandışı durumlar dışında. Bunu (sudo için) çalıştırarak sudo id -uve sudo id -ru(her ikisi de 0 gösterir), sudo (8) okuyarak ( COMMAND EXECUTION altında ) veya bir test programı yazarak doğrulayabilirsiniz .

7

@Hastur'un belirttiği gibi, bir kök kabuğu alıyorsanız birkaç fark vardır.

Kök kabuğu alamıyorsanız, daha fazla fark vardır. Destek elemanı gibi şeyler yapmaya çalışıyor deneyime sahip olabilir sudo patch -p0 < /root/patch.filenereye patchyönetici olarak çalıştırma, ancak <(bir dosyadan boru) değildir.


1
Doğru: pratik bakış açısı çoğu zaman sadece man sayfalarından tespit edilmesi zor ipuçları sunar. Benzer durumların üstesinden gelmek için daha çok spor yapmak zorundasınız [:-)], örneğin bir şeyler yazın sudo /bin/bash -c "./patch -p0 < /root/patch". Bir dosya oluşturmak için yönlendirmeyi kullandığınızda durum çok daha hassas olacaktır >. İlk olarak, yalnızca son dizine yazma hakkınız varsa, kullanıcıya ait bir dosya oluşturacaksınız. Sonuncusu
root'un

1

Ben sudo erişimini kullanırken, bir günlük dosyası oluşturulduğuna inanıyorum, ancak doğrudan kök erişim yoluyla çalışırken yoktur.


0

Kök erişiminin ne kadar ince taneli olmasını istediğinize bağlıdır. Bir sistemde farklı görevler gerçekleştiren birkaç kullanıcınız varsa, sudo daha ideal olacaktır. Sık kullandığım bir örnek, bir uygulamayı veya veritabanını yeniden başlatma gereğidir. Güvenlik her zaman en az ayrıcalıklı olan en iyisidir. Grupları kullanıyorum ve yalnızca bu grupların açık eylemler gerçekleştirmesine izin veriyorum. Bu süreci anlatan iyi bir kitap "Sudo Mastery: Gerçek Kişiler İçin Kullanıcı Erişim Kontrolü". Aslında sudo hakkında genel olarak iyi bir kitap ...

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.