Kabuk betiği çalıştırırken kullanıcıdan kök olarak oturum açmasını isteme


17

Aldığım sorun, komuta girdiğimde,

su - root

benim kabuk komut dosyası başlangıcında, kullanıcıdan parolayı girmesini ister ve daha sonra kabuk komut dosyasının geri kalanıyla devam ETMEZ . Sonra el ile bulmak ve terminal aracılığıyla kabuk komut dosyası çalıştırmak zorunda. Ben komut dosyası kullanıcı kök olarak oturum ve daha sonra kabuk komut dosyası geri kalanıyla devam emin olmak istiyorum.

Başka bir deyişle, komut dosyasını herhangi bir kullanıcı olarak çalıştırmak istiyorum, ancak komut dosyası yürütülmeye başlar başlamaz, kullanıcı kök olarak değişmeli ve daha sonra bitene kadar komut dosyasının geri kalanı ile kök olarak devam etmelidir. Bu yapılabilir mi?

Yanıtlar:


34

Bunu gerçekleştirmek çok kolaydır:

#!/bin/sh
[ "$(whoami)" != "root" ] && exec sudo -- "$0" "$@"

Geçerli kullanıcı kök değilse, komut dosyasını yeniden yürütün sudo.

sudoBurada yerine kullandığımı unutmayın su. Bunun nedeni, argümanları korumanıza izin vermesidir. Eğer kullanırsanız su, komutunuz su -c "$0 $@"boşluk veya özel kabuk karakterleri varsa argümanlarınızı değiştirecektir.

Kabuğunuz bash ise, harici çağrıdan kaçınabilirsiniz whoami:

(( EUID != 0 )) && exec sudo -- "$0" "$@"

Üzgünüm, açıklamada bir hata yaptım, bu yüzden yanlış yorumlanmış olabilir. İşte daha açık bir açıklama. Yardım için teşekkürler!
Redson

@ user68857 Sorunuz açıktı. Bu cevap tam olarak ne istediğinizi yapar.
Patrick

Bu hatayı almaya devam: sudo: setuid root olmalı
Redson

Ben komut dosyası terminal üzerinden normal bir kullanıcı olarak çalıştırmak istiyorum ama komut dosyası daha sonra komut dosyası sonuna kadar kök kullanıcı
Redson

@Nosscire alıyorsanız sudo: must be setuid root, o zaman sudo'nuza bir şey oldu. Bunu düzeltmek için: chmod u+s $(which sudo). Ve evet, ne yapmaya çalıştığınızın farkındayım, aynı şeyi senaryolarımda her zaman yapıyorum.
Patrick

7

UID'yi de kontrol edebilirsiniz:

 if [ $(id -u) != 0 ]; then
     echo "You're not root"
     # elevate script privileges
 fi

5

Komut dosyasının kendisini arayabilir ve şunları kontrol edebilirsiniz:

#! /bin/bash

if [ "root" != "$USER" ]; then
  su -c "$0" root
  exit
fi

...

0

Giriş yapmak istediğiniz noktada aşağıdaki komutu eklemeniz yeterlidir

sudo su

Bu kodumla mükemmel çalışıyor

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.