Kökün komut dosyası çalıştırmasını engelleme


10

GlassFish uygulama sunucusu yönetmek ve aynı zamanda başlatmak ve onları durdurmak ve bu senaryoyu çalışmasını kök kullanıcıyı kısıtlamak istiyorum için komut dosyalarını içerir. Bunun nedeni, bazı önemli geliştiricilerin sunucuyu ayrıcalıksız kullanıcı olarak yönetmeyi unutmaları ve uygulama sunucusunu kök kullanıcı olarak yeniden başlatmaları durumunda uygulama sunucusunun kök kullanıcı tarafından çalıştırılması gerekir [*].

Kök erişimi vermekten kaçınmak için bir seçenek değildir ve geliştiriciler unutur çünkü yerel makinelerinde bunu yapmak için çok kullanılırlar. Ben istiyorum asadminolmayan ayrıcalıklı kullanıcı olarak çalıştırmak veya isteğe bağlı olarak bir hata mesaj komut root tarafından her çalıştırıldığında gösterilecek ya değişikliğine senaryoyu.

Bash kabuğu kullanılır.

[*]: Dosyalardaki hakları düzeltmeye çalıştım, ancak kök sahibi olan ve onları chmod eden birçok dosyayı izlememe rağmen, uygulama garip hatalarla karşılaşıyor ve tekrar kök olarak çalıştırmam gerekiyor.

Yanıtlar:


18

Diğer cevaplara benzer, ancak istediğiniz yönde.

if [[ $EUID -eq 0 ]]; then
  echo "This script must NOT be run as root" 1>&2
  exit 1
fi

Alternatif olarak, çalıştırılacak kullanıcıyı belirtmek için bayrağı sudokullanarak ayrıcalıksız kullanıcı olarak yürütmeyi zorlamak için kod içinde kullanabilirsiniz -u. Glassfish kullanmıyorum, ama burada proto-örnek sahte bir senaryo var.

#!/bin/bash

if [ $1 == "start" ]; then
  sudo -u nobody /usr/bin/glassfish
fi

Umarım fikri anlarsınız. Maalesef komut dosyasının neye benzediğini veya ayrıcalıksız kullanıcının adını bilmiyorum.


2

@Tshepang doğru fikre sahip. Hangi en taşınabilir olduğunu bilmiyorum, ama burada kullanıcının kök olup olmadığını tespit etmek için başka yollar:

id -u
$UID

Alternatif olarak, aynı parametrelere sahip başka bir kullanıcı olarak çalışmaya zorlayabilirsiniz:

if [[ "$USER" != appuser ]]
then
    exec sudo -u appuser "$0" "$@"
fi

1
Bu geri döndü. O kadar kök istiyor değil bu komut dosyasını çalıştırın.
bahamat

D'oh, sudobiraz unuttum . Şimdi işi yapmalı.
l0b0

@TobySpeight Hayır, komut dosyası , kullanıcı istediği gibi root ise hiçbir şey yapmaz . Değişikliğinizin $@boşsa ekstra bir argümanla sonuçlandığına inanıyorum ve başka bir yerde bulunan bir deseni kullanmak için değiştirdim.
l0b0

Teşekkürler @TobySpeight, değiştirildi. Sıfır argümanın doğru bir şekilde iletildiğinden emin olmanın bir yolu olarak bu formu gördüğümden emindim. Ayrıca kesinlikle bir hata vardı (bir çatal bomba değildi, ama sadece süresiz olarak kendisini çağırır)
çek düzeltildi

Çatal bomba olduğunu iddia ediyorum, çünkü her örnek sudo(kullanmıyor exec) için yeni bir kabuk çatacak ve ebeveyn onu bekleyecekti, bu yüzden sonunda tam bir süreç tablosu ile sonuçlanacaksınız. Hala execoraya koymaya değer (eğer kodu fiyanlış kullanıcı olarak çalıştırmak için niyetinde değilseniz ).
Toby Speight
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.