Bash Scripting: Kök olarak (veya sudo ile) çalıştırılmak için script gerektir


26

Tar kullanarak bir dizini yedekleyecek bir bash betiği (Ubuntu'da) yazmaya çalışıyorum.

Sadece betiği (veya sudo ile) çalıştırılabilmesi için betiği nasıl kontrol edebilirim?

Örneğin, bir kullanıcı komut dosyasını çalıştırıyorsa, bu komut dosyasının sudo ayrıcalıklarıyla çalıştırılması ve sonra da bırakılması gerektiğini söylemelidir. Komut dosyası kök olarak çalıştırılırsa, onaylamadan sonra devam eder.

Biliyorum, kolay bir çözüm olmalı, sadece googling ile bulamadım.

Yanıtlar:


37

Etkili kullanıcı kimliğini çekmek için bu komutu kullanın:

id -u

Sonuç '0' ise, komut dosyası root olarak çalışıyor veya sudo kullanıyor. Şunu gibi bir şey yaparak kontrol edebilirsiniz:

if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo "Not running as root"
    exit
fi

5
Tam olarak kimliğe giden yolu nitelendirmeyi tavsiye ederim (örneğin, / usr / bin / id). Aksi takdirde, sapık bir kullanıcı her zaman 0 döndüren kendi komut dosyasını / ikili kodunu yazabilir ve daha sonra yürüten kullanıcıların yolunda daha önce var olan bir konuma koyabilir.
ktower

Kabul. Düzenleme ile düzeltme.
Scott Pack,

6
Senaryoyu çalıştırmaya çalışan 'ahlaksız' bir kişi, kimliğe giden tam yolu kullanarak sizin tarafınızdan durdurulmaz.
theotherreceive

Teother ile aynı fikirdeyim ... bu bir bash betiği. 'ID' kutusunun seçilmesi, yine de kontrolü ele almak isteyen bir kişiyi durdurmaz. Taşınabilirlik için niteliksiz bırakmak daha iyi.
Chris,

1
Bu "sudo" gereksinimini karşılamıyor.
GregB

17

Sahipliği root olarak değiştirerek bildiğinizi varsayıyorum

chown root:root file

ve izinlerin 700 olarak ayarlanması

chmod 700 file

Aynı şeyi başaracaksın - sudo olarak çalıştırma önerisi olmadan.

Fakat bu cevabı eksiksizlik için göndereceğim.


3
Bu kabul edilen cevaptan daha uygun bir çözüm. - Benim 0,02 Dolarım
Chris

Yan not: betiği git içine kontrol etmek zorlaşır. Düzeltmek için,sudo git add <file>
Chaim Eliyah

2

Buradaki amacınız, kullanıcıya senaryoyu root veya bir tür güvenlik önlemi olarak çalıştırmaları gerektiğini bildirmek için nelerdir?

Kullanıcıyı, herhangi bir uid önerisinden daha iyi bir şekilde bilgilendirmek istiyorsanız, ancak güvenlik önlemi olarak attaki lastikler kadar kullanışlıdırlar - kullanıcının betiği kopyalamasını durduracak, if ifadesini almadan, ve yine de çalışıyor.

Bu bir güvenlik sorunuysa, komut dosyası root: root'a ait olan 700 olarak ayarlanmalıdır, böylece başka bir kullanıcı tarafından okunamaz veya çalıştırılamaz.


Ya da, betiğin benim çalışmamı yürütmek için sadece root tarafından erişilebilen dosyalara veya komutlara
erişmesi gerekebilir

2

Whoami komutunu da kullanabilirsiniz.

if [ ! "`whoami`" = "root" ]
then
    echo "\nPlease run script as root."
    exit 1
fi

Aslında, kullanıcı adı 0, tamamen ayrıcalıklı özel kullanıcı hesabıdır. "root", bu UID ile eşlenen en yaygın etiket / addır. O değil var 'kök' olması ve bir saldırganın bu yararlanmaya çalışabilir.
0xSheepdog,

2

Bash değişkeni $EUID, betiğin çalıştığı UID'yi gösterir, betiğin kök olarak çalıştığından emin olmak istiyorsanız, $EUID0 değerini içerip içermediğini kontrol edin :

if [ $EUID -ne 0 ]; then
    echo "$0 is not running as root. Aborting."
    exit 2
fi

Bu /usr/bin/idharici bir komut gerektirmediğinden (bash betikleri için!) Çözümünden daha iyidir .


Yerine sadece çıkmanın, değiştirerek sudo giriş için kullanıcı istemi olabilir echosatırı sudo "$0" "$@", ve değiştirme exit 2ile exit $?.
schumacher574

0

Komut dosyasını yalnızca root tarafından çalıştırılabilir hale getirmenin basit bir yolu, komut dosyasını şu satırla başlatmaktır:
#!/bin/su root


-1

"#! / bin / su root" süper kullanıcı modundaki kullanıcıların betiği root şifresini kullanmadan çalıştırmalarına izin verir. Süper kullanıcıların betiği root sonucuyla çalıştırmasını istiyorsanız, bunu yapın.

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.