Kapatma ve yeniden başlatma için neden terminalde root olmamız gerekiyor?


65

Paketleri kurar / kaldırır / günceller ya da idari ayrıcalıklar gerektiren herhangi bir değişiklik yaptığımızda, ayrıcalıklara sahip yönetici kullanıcısının şifresini girmemiz istenir sudo- bu hem GUI hem de terminal aracılığıyla gerçekleşir.

gui üzerinden bilgi istemi

Ancak, terminal üzerinden kapatıp yeniden başlatmayı denersek, olmamız gerektiğinden şikayetçi olur root:

$ reboot
reboot: Need to be root

$ shutdown now
shutdown: Need to be root

Ancak, bu eylemleri sağ üstteki dişli çark aracılığıyla gerçekleştirdiğimizde asla bir parola istenmez.

dişli çark menüsü

Neden bu tutarsızlık var?


5
Güzel soru .. Ne soracağımı biliyorsun. Senaryom, Ubuntu'yu kısayol tuşlarıyla kapatmaktı. i, e ne zaman ctrl + super + s gibi bir tuşa basarsam, komutu çalıştırır, sudo shutdown -h nowancak sorun, erişim izni olmadan shutdownasla çalışmaz. .. Umarım durumumu anlarsınız .. :)
Saurav Kumar


Yanıtlar:


50

Dişli çarktaki kapatma, makineyi kapatmanıza izin verilip verilmediğini kontrol eder. Bu PolicyKit ile yapılır. Kapanma durumunda dosyadaki bu cümle /usr/share/polkit-1/actions/org.freedesktop.consolekit.policykontrol edilir:

<action id="org.freedesktop.consolekit.system.stop">
  <description>Stop the system</description>
  <message>System policy prevents stopping the system</message>
  <defaults>
    <allow_inactive>no</allow_inactive>
    <allow_active>yes</allow_active>
  </defaults>
</action>

PolicyKit bir dbus-sendkomutu tetikler . Kapanması halinde şöyle olurdu:

dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown

Arka planda çalışan root-Ayrıcalıklarla çalışan bir arka plan programı var, bu da sizin için kapatma komutunu çağırıyor.

Makineyi komut satırından ( shutdown, reboot, halt, ...) "eski yoldan" kapatabilmek istediğinizde, suid-Bit'i bu komutlara eklemeniz gerekir. Ancak sisteminizde, kabuğa erişimi olan herkes makinenizi kapatabilir.


14
Biraz daha güvenli bir seçenek, sudoer'ların şifresiz kapatma vb. İşlemlerine izin vermek olacaktır. Bu kolayca yapılabilir: gir sudo visudo, ekle %sudo ALL = NOPASSWD: /sbin/shutdown, /sbin/poweroff, /sbin/halt, /sbin/reboot, kaydet ve çık. Bu şekilde, bir komut satırı yeniden başlatılması yine de gerekecektir sudo reboot, ancak şifrenizi girmeniz gerekmez.
Sebastian Thürrschmidt

27

Ubuntu, bir dizi modern İşletim Sisteminin ortak mimarisi olan Unix sistem ailesine ait olan GNU / Linux Operationg Sisteminin bir dağıtımıdır.

Geleneksel olarak Unix, ana bilgisayarlarda çalıştırmak için kullanılır. Uzak terminaller aracılığıyla onlarca veya yüzlerce kullanıcıya hizmet veren merkezi bilgi işlem tesisleri. Tüm kullanıcılar anabilgisayarın kullanılabilirliğine güvendiğinden, tek bir kullanıcının kapatma komutu vermesine izin verilmedi. Unix mimarisi için temel olan bir fikir - sistem çekirdeği, uygun işlev bir superuser işlemi tarafından çağrılmadıkça bir kapatma işlemini asla başlatamaz.

Çağdaş masaüstü sistemlerinde, geliştiriciler, kapatmayı yalnızca masaüstü kullanıcısına sunabilmek için bazı acılar çekmiştir. Yaygın olarak kullanılan bir teknik, genellikle kök kullanıcının güvenlik bağlamında çalışan oturum açma yöneticisinin kapatma ve yeniden başlatmaya izin vermesidir. Bu durumda, grafik kabuk bilgisayarı kapatmak için oturum açma yöneticisine bir istek gönderir. Bu, genellikle dbus servisi aracılığıyla işlem içi iletişimin (IPC) kullanılmasını içerir.

Yukarıda belirtilen politika kiti, oturum açma yöneticisinin (veya hangi programın kapatma hizmetini sağladığını) hangi kullanıcıların kapanmaya neden olabileceğini kontrol edebildiği ve sırasıyla bir yöneticinin bu izinleri yapılandırabildiğini kontrol edebildiği standart bir çerçeve sağlayarak bu süreci genişletir.

Bazı masaüstü ortamları IPC tabanlı servisleri kullanmak yerine, aynı veya benzer işlevleri sağlamak için bir dizi yardımcı program kullanır. Bu yardımcı programlar, sudo, suid veya sudo'ya benzer bir ilke mekanizması gibi süper kullanıcı bağlamına geçilmesine izin veren mekanizmalar yoluyla çağrılabilir.

Her durumda, kabuğundaki salak geleneksel kapatma programı bu şekilde çalışmaz, Süper kullanıcı bağlamında çalıştırıldığını görmenizi gerektirir.


14

Çünkü Linux genellikle bir sunucu veya benzeri olarak kullanılır ve SSHing linux bir kutuya, hatta normal bir Ubuntu dizüstü bilgisayar olsa bile, oldukça yaygındır.

Durum şu ki, SSH erişimine sahip kişilerin, özellikle de uzaktan kullanan diğer kullanıcılar oturum açmışsa, bunları kapatmasını istemeyebilirsiniz. GUI'ye erişimi olan biri - fiziksel güç düğmesiyle yine de kendi kendine kapatabilir.

Ayrıca, uzaktan oturum açan bir kullanıcı tekrar açamaz.


Bu soruyu sorduğumda o zaman bana gelmedi, ancak sanırım onların uzak bir sunucuya GUI paketleri kurmak ve uzak sunucuyu komut satırı yerine GUI üzerinden kullanmak için Ubuntu'daki seçeneklerdir. (Windows Uzak Masaüstü veya Teamviewer'ın çalışma biçimine benzer şekilde). Bu, GUI üzerinden Ubuntu kullanan birinin fiziksel güç düğmesiyle kapanabileceği varsayımını geçersiz kılacaktır.
Aditya

Sunucunun ihtiyacı olan @aditya, yöneticinin karar vermesi gereken şekilde ayarlandı
Manishearth

Evet. Paketleri kurabilmek ve gerektiği şekilde yapılandırabilmek için kök ayrıcalıkları gerekir. Ama dünkü cevabını okurken bu senaryo aklıma geldi ve seninle paylaşacağımı düşündüm :-)
Aditya

14

GUI üzerinden yeniden başlattığımda bunu sudoşifrem olmadan yapabilirim .

Yalnızca oturum açan tek kişiyseniz. Başka kullanıcılar varsa (konsol kullanıcıları dahil) bir kök şifre girmeniz gerekebilir. Bu, OS X ve daha yeni Windows sürümlerinde aynıdır.

Neden? Orada ubuntu sisteminin dahili olarak neler oluyor?

Aşağıdaki komut:

/usr/bin/dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

D-Bus bir IPC mekanizmasıdır - aynı ana bilgisayarda çalışan işlemler arasında yerel iletişim için bir ortamdır.

D-Bus, UDP gibi düşük seviyeli mesaj geçiş protokollerinden daha akıllıdır. Öte yandan, sürekli veri akışı değil mesajları ayrı öğeler olarak taşır.

D-Bus, taşıdığı verilerin yapılandırılmış bir görünümüne sahiptir ve verilerle ikili biçimde ilgilenir; çeşitli genişliklerin, karakter dizilerinin ve benzerlerinin integral sayıları. Veriler D-Bus’a yalnızca "raw byte" olmadığı için iletiler doğrulanabilir.

- Ücretsiz Masaüstü

shutdownKomut neden giriş yapmış olup olmadığını kontrol etmiyor ? Dürüst olmak gerekirse, sıra dışı bir özellik gibi görünüyor. Bazen zaman kazandıracağını hayal edebiliyorum, ancak tutarlı bir konsol sıklıkla tercih ediliyor. Komutların çalıştırdıktan sonra bazen bir şifre gerektirmesini istemiyorum, bazen de istemem.

Zamirlerim O / O'dur


Ayrıca, qdbus uygulamasıyla daha kısa bir sürümü var
Sergiy Kolodyazhnyy

Bir DE'den kapatılırken / oturumu kapatırken (bu durumda GNOME) Kök / kullanıcı sudoşifresi ne istenmiyor? GDM üzerinden başka bir kullanıcı giriş yapmış veya tty üzerinden başka bir kullanıcı giriş yapmış.
kos

@kos hu, bu garip. Bu ekran görüntüsü Gnome 3'e ait ve ben gui ve tty'ye giriş yaptım
Tim

Aynı mesajı alıyorum, ama "Kapat" tıklaması devam ediyor ve sistemi kapatıyor. Ayrıca Fabby'den bunu test etmesini istedim ve onun için de aynı şeyi yaptı, bunun ne olduğundan emin değil.
kos

kos ohh. Hu bekle.
Tim

9

GUI'den kapatma işlemini başlatmak için root olmanıza gerek kalmaması büyük ölçüde tipik masaüstü kullanıcıları için bir kolaylık meselesidir. Sistem konsolda oturum açan kullanıcı olduğunuzu bilir , bu nedenle bilgisayarı yanlışlıkla kapatırsanız, muhtemelen tekrar açabilirsiniz.

Kabuktaki bir kullanıcı için uzaktan çok iyi giriş yapmış olabilirsiniz, bu nedenle sistem bir kapatma komutu vermek için root olarak giriş yapmış olmanızı gerektirir. Bu, bir sunucuya giriş yapan normal bir kullanıcının diğer insanlar onu kullanırken ve bilgisayarı kapatmak için fiziksel olarak orada olması gerekmeyen kişilerin kapatılmasını önler.

Kapatma işleminin süper kullanıcı şifresi için bir GUI istemesi sağlamamasının nedeni muhtemelen orada kazanılacak gerçek bir yardımcı program bulunmamasıdır - eğer konsoldaysanız, istemin görüneceği yerde yerine wheeel menüsü. Kapatma için süper kullanıcı şifresi için bir komut satırı isteminde bulunmak istiyorsanız, bu zaten "sudo kapatma" ile kullanılabilir.


5

Çok kullanıcılı bir sistemde, istediğiniz son şey, kullanıcılarınızın oturum açması ve sunucuyu istediği zaman rastgele yeniden başlatmasıdır. Bu nedenle, Reboot'un komut satırı sürümü, yalnızca kullanıcılara yönelik bir komuttur; sudo haklarına sahip.

Aynı zamanda Halt ve PowerOff komutlarına da.


2
Cevabınız için teşekkürler, onlarca kullanılan bir makinenin kullanıcısı olarak makineyi yeniden başlatamamam gerektiğinin farkındayım, ancak fare aracılığıyla yeniden başlatmayı seçtiğimde Ubuntu (veya hemen hemen tüm masaüstü dağıtımlarını) ne yapıyor? klavye yerine? Privelig olmadan izin veriyorlar.
asco,

3
Systemctl, loginctl, systemd, system policy, vb. Gibi bileşenlerin tümü, şu anda oturum açmış kullanıcının, masaüstü deneyimini daha kullanıcı dostu hale getirmek için açıkça kök erişimi gerektirmeden belirli kök işlevlerine erişmesine izin verir, ancak bunlar komut satırını çağırmaz. bu görevleri yerine getirme komutları.
Jeff Sereno
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.