web-gelistirme-sc.com

Shell betiğinin içindeki kök kullanıcıya geçiş

Belirli komutları çalıştırmak için root dışı kullanıcı hesabına ihtiyaç duyan ve betiğin geri kalanını çalıştırmak için kullanıcıyı root olarak değiştiren bir Shell betiğim var. SUSE11 kullanıyorum . Parola İstemini otomatikleştirmek için bekliyordum. Ancak, Spawn su - Kullandığımda ve komut çalıştırıldığında, İstemi kök ile geri döner ve komut dosyasının geri kalanı çalışmaz.

Örneğin.

< non-root commands>
 spawn su -
<root commands>

Fakat sudan sonra - İstemi kullanıcı olarak root olarak geri döndürür ..__ betiğin geri kalanı nasıl çalıştırılır.

Sudo -S seçeneği, makinenin IP adresini bulmam gereken Sudo -S ifconfig komutunu çalıştırmadığı için yardımcı olmuyor.

Bu bağlantıları çoktan izledim ancak bir çözüm bulamadım: Komut dizini kullanıcının Kabuk komut dosyasında homedir olarak değiştir

Shell betiğinde unix kullanıcısını değiştirme

14
Deepti Jain

Sudo burada işe yarayacaktır, ancak komut dosyanızı biraz değiştirmeniz gerekir:

$ cat 1.sh 
id 
Sudo -s <<EOF
echo Now i am root
id
echo "yes!"
EOF

$ bash 1.sh
uid=1000(igor) gid=1000(igor) groups=1000(igor),29(audio),44(video),124(Fuse)
Now i am root
uid=0(root) gid=0(root) groups=0(root)
yes!

Komutunuzu <<EOF bloğunda çalıştırmanız ve bloğu Sudo öğesine vermeniz gerekir.

İsterseniz, elbette su kullanabilirsiniz. Ama sizin için parola girecek expect/pexpect kullanarak çalıştırmanız gerekir.

Ancak, şifreyi otomatik olarak girmeyi başarabilmeniz (veya kapatmak) durumunda bile bu yapım işe yaramaz:

user-command
su 
root-command

Bu durumda, root-command, root ayrıcalıklarına sahip değil, kullanıcıyla yürütülecektir, çünkü su bittikten sonra yürütülecektir (su, mevcut Shell'in kimliğini değiştirmeyecek şekilde yeni bir Shell açar). Elbette aynı numarayı da kullanabilirsiniz:

su -c 'sh -s' <<EOF
# list of root commands
EOF

Ama şimdi Sudo ile aynı şeylere sahipsiniz.

18
Igor Chubin

İkinci bir komut dosyası olmadan yapmanın kolay bir yolu var. Bunu sadece dosyanın başına yerleştirin:

if [ "$(whoami)" != "root" ]
then
    Sudo su -s "$0"
    exit
fi

Daha sonra otomatik olarak root olarak çalışacaktır. Tabii ki, bu bir şifre sağlamak zorunda olmadan Sudo su yapabileceğinizi varsayar - ama bu cevabı kapsam dışındadır; Bunun için Shell komut dosyalarında Sudo kullanımıyla ilgili diğer sorulardan birini görün.

9
Benubird

Bunu yapmanın en kolay yolu, en az iki senaryo oluşturmaktır.

Birincisi, ikincisini kök ayrıcalıklarıyla çağırmalıdır. Böylece ikinci komut dosyasında yürüttüğünüz her komut root olarak çalıştırılacak.

Örneğin:

runasroot.sh

Sudo su-c'./scriptname.sh'

scriptname.sh

apt-get install mysql-server-5.5

ya da neye ihtiyacınız varsa.

1
Josh

Kısa versiyon: root olarak çalıştırılacak tüm komutları içine alan bir blok oluşturun.

Örneğin, bir kök alt dizininden bir komut çalıştırmak için bir komut dosyası oluşturdum, segment şöyle gider:

Sudo su - <<EOF
cd rootSubFolder/subfolder
./commandtoRun
EOF
0
Juan T