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. sudo
aslı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 sudo
tekrar ş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 -c
hemen hemen her satırın önüne eklemem gerekiyor . Ayrıca orijinal kullanıcı adını bulmak sudo
mü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
sudo
yükseltilmiş izinlere sahip olması gerekiyorsa çalıştırmanız yeterlidir. Amasu username -c
koş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 ?