2012-01-20 23 views
7

İşte Ubuntu iş istasyonunda sahip olduğum Init betiğim. Bir komutu root'dan başka bir kullanıcı olarak çalıştırmam gerekiyor, ama nasıl yapılacağı konusunda kafamı alamıyorum. Ne sudo -u veya su newuser çalışmıyor gibi görünüyor.Kullanıcıyı init komut dosyasında değiştirebilir misiniz?

komut dosyası: Bu yanıtında ilgi olmadığı için, ben burada kullanma şeklinizi açıklamak:

su -l $MUSER -c "myCommand args..." 

Güncelleme:

respawn 
console none 

start on runlevel [2345] 
stop on runlevel [06] 

script 
    su "anotherUser" -c ./myCommand 
end script 
+0

bu komut türünü kullan "su-c 'komutunu' different_user" – vikky

+0

@ @Henrick onların cevaplarında aşağıda belirtildiği gibi, komut dosyası komut dosyaları ['setuid' yapılandırma stanza] 'yı kullanabilir (http://upstart.ubuntu.com/cookbook/# setuid) kullanıcıyı ayarlamak için. – clayzermk1

cevap

18

Bunu kullanabilirim.

Sunucuları, root değil, normal linux kullanıcıları olarak çalıştırıyoruz.

servisi, müşteriyi, sahne

biz bir linux işletim sistemi birkaç müşteriler için çeşitli hizmetler çalıştırabilir Bu şekilde: kullanıcı adı üç bölümden oluşmaktadır.

Örnek: müşteri "bar" ve "p" foo_bar_p Servisi "foo" İşte, üretiminize

demektir init script parçasıdır. init komut root olarak veya foo_bar_p kullanıcı olarak çalıştırılabilir:

# /etc/init.d/foo_bar_p-celeryd 
# scriptname contains linux username 
SCRIPT_NAME=`basename "$0"` 
SYSTEM=${SCRIPT_NAME%*-celeryd} 

U=`id -nu` 

if [ ! $U == $SYSTEM ]; then 
    if [ $U == "root" ]; then 
     # use "-l (login)" to delete the environment variables of the calling shell. 
     exec su -l $SYSTEM -c "$0 [email protected]" 
    fi 
    echo "Script must be run from $SYSTEM or root. You are '$U'" 
    rc_exit 1 
fi 

# OK, now I am foo_bar_p 
cd 
. $HOME/.bashrc 
.... 
+0

Fantastik. Teşekkürler! – Industrial

+0

-L anahtarı ne yapar? – Henrik

+0

-l | --login Kabuğun bir giriş kabuğunu başlatmasını sağlamanın bir yolu. – Henrik

1

su muhtemelen daha evrensel bir yaklaşım olmakla birlikte, bu sudo ile bazı ortak dağıtımlarında da mümkündür:

sudo -u $MUSER $COMMAND $ARGS 

(sadece tekrar okumak soru ve sonradan görme, kullanım için)

+0

Bunu/etc/rc.local'de denediniz ama Ubuntu 16.04 üzerinde çalışmıyor. Ayrıca şunu denedim: "su -l user -c/home/user/script". Baska öneri? – beemaster

6

sizin için çalışmaz, ancak başlatma komut benim için çalıştı fark etmedi:

setuid myuser 
exec command args 
+0

Güzel! .bashrc, profil ve bunun gibi şeyler yüklüyor mu? –