kabuk script: içindeki sudo kullanın vs sudo ile çalıştırın?


13

İçindeki tüm komutların değil, bazılarının süper kullanıcı ayrıcalıklarına ihtiyaç duyduğu bir kabuk komut dosyası yazarken,

  • süper kullanıcı ayrıcalıkları gerektiren komutlara sudo ekleyin ve kabuk komut dosyasını sudo olmadan çalıştırın veya

  • süper kullanıcı ayrıcalıkları gerektiren komutlara sudo eklemeyin, ancak kabuk komut dosyasını sudo ile çalıştırın?

İkinci şekilde, şifremi yalnızca bir kez girmem gerekecek, ancak komut dosyasındaki tüm komutlar, ihtiyaç duymayan komutlar da dahil olmak üzere süper kullanıcı ayrıcalıklarıyla çalıştırılacak.

İlk olarak, süper kullanıcı ayrıcalıkları yalnızca onlara ihtiyaç duyan komutlara verilirken, farklı sudo komutları için parolamı birden çok kez vermem gerekebilir.

Güvenlik açısından ilk yol daha iyidir. Kolaylık sağlamak için ikinci yol daha iyidir.

  1. İlk yolu benimsemeyi düşünüyordum. Bu yüzden , kabuk betiğindeki birden fazla sudo komutuna şifreleri sağlamanın zorluğu ile uğraşmak zorundayım .

  2. Stephen Harris şunu yazdı :

    İyi yazılmış bir komut dosyası, doğru izinlerle çalışıp çalışmadığını algılar ve sudo'yu hiç çağırmaz, ancak çok sayıda kötü komut dosyası var

    İkinci yolu kullanmalı mıyım? Öyleyse,

    • "komut dosyası doğru izinlerle çalışıp çalışmadığını sudo'yu aramayacağını algılar" yazabilir miyim?

    • sudo ile komut dosyasını çalıştırırken onlara gerek duymayan komutlara süper kullanıcı ayrıcalıkları verme sorununu önlemek için güvenliğini nasıl artırabilirim?

  3. Bu basit yaklaşım her iki yaklaşımın da en iyisine sahip olacaktır: sadece ihtiyaç duyan komutlara sudo ekleyin ve komut dosyasını sudo ile veya sust olmadan çalıştırıp rahatlık veya güvenlik isteyip istemediğime bağlı olarak çalıştırın? Bu yaklaşımın bir sorunu var mı?

Teşekkürler.


sudoVarsayılan kimlik bilgileri önbelleği olduğunu düşündüm . Platformunuzda bu devre dışı mı?
boru

@pipe Betiği belirli bir süre uyuyor olabilir ve bu şekilde önbellek çalışmayabilir.
LinuxSecurityFreak

Yanıtlar:


15

İlk sorununuzu çözmek için:

"komut dosyası doğru izinlerle çalışıp çalışmadığını sudo'yu aramayacağını algılar" yazabilir miyim?

Kök için basit ve POSIX denetimi vardır:

#!/bin/sh
is_user_root ()
{
    [ "$(id -u)" -eq 0 ]
}

Alternatif olarak, Bash'te daha fazla performans odaklı kodlayıcılar kullanmak isteyebilir:

#!/bin/bash
is_user_root ()
{
    [ ${EUID:-$(id -u)} -eq 0 ]
}

Kodu yeniden kullanmak için işlevlerde kasıtlı olarak sarılmış olduğunu unutmayın.

İkinci sayınızı gidermek için:

sudo ile komut dosyasını çalıştırırken onlara gerek duymayan komutlara süper kullanıcı ayrıcalıkları verme sorununu önlemek için güvenliğini nasıl artırabilirim?

Bu konuda fazla bir şey yapamazsınız. En azından aklıma hiçbir şey gelmiyor. Senaryoyu görürsem, önerilerim olabilir. Ama sorunuza eklemediğiniz için ... Senaryonun tamamını sudoveya ile çalıştırırsanız root, bunu kontrol etmenin bir yolunu göremiyorum.

Yorumu ele almak için:

"İçinde sudo kullan vs sudo ile çalıştır" hakkında ne düşünüyorsun?

Senaryolarımda, genellikle ikinci yaklaşıma geçiyorum ama bu mutlaka size tavsiye ettiğim anlamına gelmiyor. Çünkü betiğin kime bağlı olduğuna bağlıdır - rootsadece; çoğunlukla, bazı kullanıcıların sudohakları olması dışında ; herhangi bir değerle cevap verebilmem için senaryomuzu kelimenin tam anlamıyla soruya eklemeniz gerekir.


sudo -u "$SUDO_USER" command...?
Michael Homer

Teşekkürler. "İçinde sudo kullan vs sudo ile çalıştır" hakkında ne düşünüyorsun?
Tim

Teşekkürler. Bu basit yaklaşım her iki yaklaşımdan da en iyisine sahip olacaktır: sadece ihtiyaç duyan komutlara sudo ekleyin ve kolaylık veya güvenlik isteyip istemediğime bağlı olarak komut dosyasını sudo ile veya sudo olmadan çalıştırın? Bu yaklaşımın bir sorunu var mı?
Tim

@MichaelHomer sudo -u "$SUDO_USER" commandBurada ne anlama geldiğini merak ediyordum ?
Tim

@Tim Bu yaklaşımla ilgili herhangi bir sorun bulamamam da, birisi makul argümanlarla itiraz edebilir. Bu gerçekten orijinal sorunuzun kapsamı dışındadır. Aylık M-Disk yedeklememi şimdi yapmam gerekiyor, bu yüzden bugün mevcut olduğunu düşünmüyorum, bunun için üzgünüm. Umarım en azından ana noktaya cevap verdim. Yarın görüşürüz.
LinuxSecurityFreak

-4

Sanırım buna cevap verebilirim.

İkinci yolu kullanmalı mıyım?

Burada bir sorun yaşamanız için hiçbir neden yok, bu yüzden:

Root olarak çalıştırılması gerekiyor sadece tek bir komut, daha sonra varsa runprogram olarak rootveya sudoçünkü sudosenaryonuz uzun yol içeride. Programcıların tembel olduğunu unuttunuz mu?

Birçok komutları gerekiyorsa runolarak rooto kadar çalıştırın rootveya sudo.

sudo ile komut dosyasını çalıştırırken onlara gerek duymayan komutlara süper kullanıcı ayrıcalıkları verme sorununu önlemek için güvenliğini nasıl artırabilirim?

Diğer kullanıcıların runprogramınıza ihtiyacı varsa , bunlar sudoiçin kurulum sudoçok özelleştirilebilir ve ihtiyaçlarınızı karşılayacaktır.

İşte bir örnek sudo:

Her visudozaman sudoers dosyasını düzenlerken kullanın .....

kate ALL=(ALL) NOPASSWD: /usr/local/bin/script ARG1 ARG2

sudo programınızdaki / komut dosyanızdaki kullanıcıları değiştirmek için de harika: İşte benim komut dosyalarından bir satır:

sudo -i -u "$user" user="$user" CURRENTDIR="$CURRENTDIR" BASHRC="$BASHRC" bash <<'EOF'

"komut dosyası doğru izinlerle çalışıp çalışmadığını sudo'yu aramayacağını algılar" yazabilir miyim?

https://www.cyberciti.biz/tips/shell-root-user-check-script.html
bir kabuk kabuğu komut dosyası kök izinleriyle çalışıyorsa nasıl yapılır

bash/sh:

#!/bin/bash
# (Use #!/bin/sh for sh)
if [ `id -u` = 0 ] 
then
        echo "I AM ROOT, HEAR ME ROAR"
fi

csh:

#!/bin/csh
if ( `id -u` == "0" ) 
then
        echo "I AM ROOT, HEAR ME ROAR"
endif

#!/bin/bash
if [[ $EUID -ne 0 ]]; then
  echo "You must be a root user" 2>&1
  exit 1
else
  mount /dev/sdb1 /mnt/disk2
fi

Beyefendinin @terdon talebi üzerine DÜZENLE:

Senaryonuzu bu şekilde düşünün ....

Herkese açık bir komut dosyası mı (sizden başka insanlar kullanır) Komut dosyası ne işe yarar? Sana zamanı anlatıyor mu? Yoksa 200 sistemde iptables güncelliyor mu? Sadece kullanırsanız, işle / profesyonelle ilgili mi yoksa kişisel kullanım için mi?

Sadece kullanıcı grubunuzun nelerden oluştuğunu önceden bilmeniz gerekir, hepsi bu.

Eğer öyleyse writtenvermek ya satmak yöneticileri için, o zaman bile, neden olmamalıdır scriptolarak çalışmasına izin root?? Ne zararı olabilir?

Gerçek komut dosyaları / programlar sık ​​sık ayrıcalıklı kullanıcı olarak çalışır ve hiç kimse bu sorundan bahsetmez, ancak programcılar, benim gibi acemiler bu şeyler hakkında konuştuğunda, o zaman gerçek bir güvenlik tehdidi ..... sizin mesajınızdaki adam atıfta bulunmak, zarif olmayan bir şekilde, bazı kişilerin sahip olduğunuz kontrolesystem ve kodunuza baktığını söylemeye çalışıyor .... dosyaları kullanacağınızdan daha fazla izinlere ayarlıyor musunuz, tüm kontrolleriniz var mı? mantık mı yoksa yetenekli programcı kodunuzdaki tehlikeleri görüyor mu?

Eğer code needs root, kullanın sudo, ve çok varsa sadece çalıştırınroot. ...... burada cevabım uçları vay be


2
@somethingSomething, neden root ayrıcalıklarına ihtiyaç duyan tek bir komut olsa bile, betiği neden her zaman root olarak çalıştırmayı önerdiğinizi açıklayabilir misiniz? Cevabınızda iki olasılık vermiş olursunuz (bir komut kök ayrıcalıkları veya birden çok komut gerektirir), ancak her ikisi için de aynı şeyi önerirsiniz.
terdon

2
Bu konuyu düşündüm ve benzer tartışmaları okudum. Bu cevap beni karıştırıyor. (Ancak, zaten yeterince
Joe
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.