İzin rwxr-xr-x olduğunda neden kapatma işlemini yürütemiyorum?


34

İçerideyim /sbinve shutdownizinleri olduğunu görüyorum rwxr-xr-x. Bu, birinin yürütebileceği anlamına gelmiyor mu?


1
koştuğunuz komut nedir ve aldığınız hata nedir?
katledilmiş silah

Bence shutdownemir hakkında konuşuyor .
Vinz

Koştum. "Kapama: kök olmalısın" alıyorum. Bununla birlikte, izinler herhangi birinin yürütebileceğini söylüyorsa neden kök olmam gerekiyor?
Korgan Rivera

Tahmin ediyorum ki, herkes makineyi kapatabilir. Tıpkı bir GUI'deki gibi, herkes de kapatabilir. Ama sizin kök olmanız gerektiğini söylüyorsanız, o zaman bilmiyorum. Yine de iyi bir soru.
Kevdog777

4
@ Kevdog777: Bir GUI'de PolicyKit bunu yönetir. Kullanmanıza izin verilip verilmediğini kontrol edecek kök ayrıcalıklarına sahip bir servistir shutdown.
Vinz

Yanıtlar:


76

Herkes yürütebilir shutdown, ancak sistemin kapatılmasını tetiklemek kök ayrıcalıkları gerektirir. Ancak shutdownsetuid değildir ve bu yüzden sadece root onu başarıyla çalıştırabilir. shutdownProgram ayrıcalıkları kontrol edip orada bir sorun olduğunu, ancak safça bir sistem kapatma çalıştı bile, hiçbir şey olsaydı bildirmek için güzel yeterlidir.

GLENDOWER: Çok derinden ruhları çağırabilirim.
HOTSPUR: Neden, ben de öyle ya da herhangi bir erkek; Ama onları aradığınızda gelecekler mi?
(Henry IV'ten)

shutdownfarklı değil /bin/rm. Herkes yürütebilir, ancak normal bir kullanıcı, /etcbaşka bir kullanıcının ana dizinini kaldıramaz .

Özellikle: Yalnızca kök yetkileriyle çalışan bir işlem (etkin UID 0), init sistemini sistem hizmetlerini durdurmaya, tüm kullanıcı işlemlerini sonlandırmaya ve makineyi gerçekten durduran sistem çağrısını düzenlemeye yönlendirebilir. (Eğer shutdownsetuid olsaydı, onu çağıran kim olursa olsun kök olarak çalışırdı, ama değil.)

shutdownBir GUI'den, örneğin control-alt-del ile görüşmeye ne dersiniz ? Bu durumda, shutdowndoğrudan başladığını initve kök ayrıcalıklarla çalıştığını anlamak önemlidir . Bu yüzden konsola giren herkes onu kapatabilir. Bu arzu edilmezse, control-alt-delete aslında çalışacaktır shutdown -a. (@ Bazılarının cevabında alıntı yaptığı belgelere bakın). Bu, shutdowno anda oturum açmış kullanıcının çalıştırmaya yetkili olup olmadığını kontrol etmeyi söyler . Ancak bu sadece shutdownbu senaryoda “root” olarak çalıştığı için geçerlidir .


2
Açıklama: Herkes programını gerçekleştirebilir shutdown, ama bu programın edemez geçerli kullanıcı kök ayrıcalıklara sahip olmadıkça aslında bir sistem kapatma tetikler. Sağ?
Lars,

1
Hepsi bukadar. Programlar, ayarlanmadıkça, çağıran kullanıcının ayrıcalıklarıyla çalışır. Sistemin kapatılması, kök ayrıcalıkları gerektirir; bu nedenle, kendi programınızı yapmak için de yazamazsınız (güvenlik açıklarından yararlanma vb. Hariç).
alexis,

"Kapama setuid değil" ne demek?
Iain Samuel McLean Elder

1
@Ain, programlar normalde onları çağıran kullanıcının izinleri ile çalıştırılır. Bu aynı zamanda böyle shutdown. Bir setuid programı, çalıştırılabilir dosyaya sahip olan kullanıcının izinleriyle çalıştırılır. Örneğin, /etc/passwdşifre dosyasını değiştirmenize izin vermek için kök izinleriyle çalışır. İçin man sayfasına bakınız chmod.
alexis,

Bu " /usr/bin/passwdkök izinleriyle çalışır " olmalıydı ! /etc/passwdçalıştırılabilir değil (değiştirilmekte olan "şifre dosyası" dır).
alexis,

15

shutdownUID'niz 0 ise, binary kendisi kontrol eder.

Strace çıktısına bakınız:

strace /sbin/shutdown -r -h now
...
...
geteuid()                               = 10001
setuid(10001)                           = 0
getuid()                                = 10001
write(2, "shutdown: Need to be root\n", 26shutdown: Need to be root
) = 26
exit_group(1)                           = ?

4
Strace kullanımını göstermek için +1 ... bu yararlıdır. Bununla birlikte, bu shutdown
izlemenin UID'nizin

1
Bunu strace çıktısında görmeyeceksiniz, çünkü sadece sistem çağrılarını rapor ediyor. Sen edebilirsiniz çıkarımda bir getuid yakından kod benzer olduğunu hata mesajı yazarak takip edildiğinde o if(getuid() != 0) printf("Need to be root");. Aslında hangi kaynak kodun olduğunu gösterir.
msn

5

Evet ! Herkes bu komutu çalıştırabilir. Dediğiniz gibi, onu çalıştırabiliyorsunuz, ancak bir "Kök Olmanız Gerekiyor" mesajı ile karşı karşıyasınız permission denied. shutdownKomut çekleri senin UIDeğer ediyoruz kök görmeme için.


-1

-A ile işaretlerseniz, kapatma işleminin erişim listesini kontrol edeceği anlaşılıyor:

ACCESS CONTROL
       shutdown can be called from init(8) when the magic keys CTRL-ALT-DEL are pressed, by creating an appropriate entry in /etc/inittab. This means that every‐
       one who has physical access to the console keyboard can shut the system down. To prevent this, shutdown can check to see if an authorized user  is  logged
       in  on  one of the virtual consoles. If shutdown is called with the -a argument (add this to the invocation of shutdown in /etc/inittab), it checks to see
       if the file /etc/shutdown.allow is present.  It then compares the login names in that file with the list of people that are logged in on a virtual console
       (from /var/run/utmp). Only if one of those authorized users or root is logged in, it will proceed. Otherwise it will write the message

       shutdown: no authorized users logged in

       to  the  (physical)  system  console.  The  format  of  /etc/shutdown.allow is one user name per line. Empty lines and comment lines (prefixed by a #) are
       allowed. Currently there is a limit of 32 users in this file.

Şu anda -a bayrağı olmadan çağırdığınız için, yalnızca kök kapanmalarına izin vermek varsayılandır.

Başka kullanıcıların bu komutu çalıştırmasını istiyorsanız, o dosyayı yapılandırın ve bayrağını kullanın.

Why can't I execute shutdown when the permission is rwxr-xr-x?

İzin bitleri bir kullanıcı veya gruba dayalı erişim kontrolünü mutlaka dışlamaz.


Bunu -akomut satırından çağırmak farketmez: shutdown -aKök izinleri ile (hala initkontrol-alt-del'i sağlayan) çalıştırılmalıdır.
alexis,
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.