Kabuk erişimini kontrol etmek için Bash betiği


1

Hesapları kolayca yönetmek için bir kabuk betiği üzerinde çalışıyorum. Kabuk erişimini etkinleştirmek ve devre dışı bırakmak için bir seçeneğe sahip olmak istiyorum (kolay olan) ancak zor olan kısım, bir hesabın zaten kabuk erişimine sahip olup olmadığını bulmaktır, böylece komut dosyası uygun seçenekleri gösterebilir.

Şu anda sahip olduğum şey bu:

Not: $account verilen hesap

function checkIfShellAccess
{
    ret=false
    getent passwd $account >'/bin/bash' 2>&1 && ret=true

    if $ret; then
        HAS_SHELL=1
    else
        HAS_SHELL=0
    fi
}

Sorunum: Betiğimi çalıştırdığımda ve kullanıcının kabuk erişimi olup olmadığını kontrol ettiğimde aşağıdaki bildirimi alıyorum:

line 241: /bin/bash: Text file busy

241 satırı:

getent passwd $account >'/bin/bash' 2>&1 && ret=true

Ben kullanıyorum: CentOS release 6.5 (Final)

Bu konuda herhangi bir yardım için teşekkürler.

Yanıtlar:


2
getent passwd $account >'/bin/bash' 2>&1 && ret=true

Yukarıdaki satır üzerine yazmaya çalışıyor /bin/bash. Bunu yapmak istemiyorsun. Varlığı için test etmek /bin/bash tarafından döndürülen getentyerine kullanın:

getent passwd "$account" | grep -q '/bin/bash' && ret=true

Bu işe yarayacak çünkü grep metni bulunup bulunmadığına göre bir çıkış kodu belirler.

Bununla birlikte, kullanıcıların kullanabileceği pek çok farklı kabuk vardır. Bunlar içerebilir csh, ksh, ve zsh. Kabuk erişimi devre dışı bırakıldığında, kabuk genellikle /bin/false. Sisteminizde bu doğruysa, testi göz önünde bulundurun:

getent passwd "$account" | grep -q '/bin/false' || ret=true

Bu mükemmel çalıştı. Teşekkür ederim!
Jeremy
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.