Komutların çoğunluğu sudo'dan önce normal kullanıcı olarak çalıştırılması gerektiğinde, bir avuç komutun root olarak çalıştırılması gereken uzun ve uzun süren bir bash betiğim var, çünkü dosya sahipliğini ve bu tür işleri bozacaktı.
Bazı yöntemler buldum, ama her birinin bazı sorunları var
Yöntem 1: Dosyanın içinde sudo kullanma
#!/bin/bash
sudo echo "I must be run by root"
touch needsToBeOwnedByUser1
echo "needs to be run by user"
sleep 1000
sudo echo "I, again, must be run by root"
Bu, kodun yazılma biçiminden iyi görünecektir. sudoaslında kök tarafından çalıştırılması gereken birkaç ifadeden önce yazılır, ancak her sudoçağrı arasındaki süre çok uzunsa sudotekrar şifre ister. Ayrıca, sudoörneğin geçersiz bir parola nedeniyle ilk yürütme başarısız olursa, komut dosyasının geri kalanı yine de yürütülür.
Yöntem 2: Dosyayı çağırmak ve gerektiğinde orijinal kullanıcıya geri dönmek için sudo kullanma
#!/bin/bash
echo "I must be run by root"
su username -c 'touch needsToBeOwnedByUser1'
su username -c 'echo "needs to be run by user"'
su username -c 'sleep 1000'
echo "I, again, must be run by root"
Bu da berbat, çünkü su username -chemen hemen her satırın önüne eklemem gerekiyor . Ayrıca orijinal kullanıcı adını bulmak sudomümkündür, ancak hantal.
Daha iyi bir yol var mı?
Düzenleme: Ben sadece neden bahsettiğimi göstermek için küçük, saçma komut dosyaları gönderdim. Gerçek komut dosyasında sudo (başlatma ve durdurma hizmetleri) gerektiren bazı satırlar var, sudo ve gerçekten sudo olmadan çalıştırılması gereken çok fazla satır olması önemli değil.
man sudo? -v, --validate 'Kullanıcının önbelleğe alınmış kimlik bilgilerini güncelleyin, gerekirse kullanıcının kimliğini doğrulayın. Sudoers eklentisi için bu, sudo zaman aşımını varsayılan olarak 15 dakika daha uzatır, ancak bir komut çalıştırmaz. Tüm güvenlik ilkeleri önbelleğe alınmış kimlik bilgilerini desteklemez. ' (Eğer yeterince sık çalıştırırsanız, sudo kimlik doğrulaması zaman aşımına
sudoyükseltilmiş izinlere sahip olması gerekiyorsa çalıştırmanız yeterlidir. Amasu username -ckoşmak için geçiş yapmanın bir anlamı yokecho. Başka bir deyişle, bu [XY] gibi geliyor. Senaryonuzun gerçekten ne yapacağını ve kullanıcıları neden bu kadar sık değiştirmeniz gerektiğini düşündüğünüzü düzenleyebilir ve açıklayabilir misiniz ?