Yanıtlar:
initctl --version Mevcut başlangıç sürümünüzü bulmak için.
Freenode üzerindeki #upstart kanalını sorarak, resmi meselenin üstlendiği:
Upstart’ın gelecekteki bir sürümü bunun için yerel destek, ancak şimdilik Gibi bir şey kullanabilirsiniz:
exec su -s /bin/sh -c 'exec "$0" "$@"' username -- /path/to/command [parameters...]
su bu şu demek oluyor expect fork ve hatta expect daemon son PID'yi yakalamayın.
exec su -s /bin/sh -c 'HOME=/foo/bar exec "$0" "$@" &>/var/log/foobar.log' username -- /path/to/command [parameters...]
Start-stop-daemon kullanmaya ne dersiniz?
exec start-stop-daemon --start --chuid daemonuser --exec /bin/server_cmd
itibaren Başlangıç kitabı :
Debian ve Ubuntu sistemleri için önerilen yöntem yardımcı programı kullanmaktır.
start-stop-daemon. [...]start-stop-daemonPAM ("Takılabilir Kimlik Doğrulama Modülü") limitlerini başlattığı sürece uygulamaz.
Not: start-stop-daemon RHEL'de desteklenmiyor.
Özellikle grup üyeliğiyle ilgili, biraz farklı anlamsallıklarla bunu yapmanın birkaç yolu var:
setuidgid sizi belirttiğiniz gruba koyacaktır.
setuidgid seni koyacağım sadece bu grupta, üye olduğunuz diğer gruplara ait dosyalara erişemezsiniz. setuidgid daemontools-encore sitesinden ve setuidgid nosh araç setinden ikisi de bir -s (diğer adıyla. --supplementary ) sizi o gruba koyacak ve aynı zamanda sizi ek gruplar belirttiğiniz kullanıcı için. kullanma newgrp Daha az ayrıcalıklı bir kullanıcı olduğunuzda, grubunuza tek bir grup ekler, ancak komut dosyalarının içinde kullanılmasını zorlaştıran yeni bir alt kabuk oluşturur.
start-stop-daemon grup üyeliğinizi korur ve sadece setuid / setgid'den çok daha fazlasını yapar.
chpst -u username:group1:group2:group3... commandname tam olarak hangi grup üyeliğini benimseyeceğinizi belirlemenize izin verecek, ancak Ubuntu ) sadece birlikte geliyor runit alternatif olan paket upstart.
su -c commandname username tüm kullanıcı adının grup üyeliğini alır sudo -u username commandname, bu yüzden muhtemelen en az şaşkınlığa giden yollardır.
kullanım setuidgid paketten daemontools.
Buradaki belgeler: http://cr.yp.to/daemontools/setuidgid.html
Amazon EC2'deki bir Ubuntu 10.10 örneğinde, start-stop-daemon Komut.
Ben de diğer start-up bazıları ile mücadele kıta . Belirli bir python uygulamasını arıyorum virtualenv ve benim yürütülen programa bazı parametreler.
Aşağıdaki benim için çalıştı.
script
export PYTHONPATH=.:/home/ubuntu/.local/lib/python2.7/site-packages/:/home/ubuntu/python/lib/python2.7/site-packages/
exec start-stop-daemon --start --chuid ubuntu --exec /home/ubuntu/python_envs/MyProj/bin/python /home/ubuntu/www/MyProj/MyProj.py -- --config-file-dir=/home/ubuntu/www/MyProj/config/ >> /home/ubuntu/startup.log 2>&1 &
end script
PYTHONPATH Kaynaktan bazı paketlerin yüklü olması PYTHON Bu başlatma işi çalıştığında modül yolu. Her şeyi mutlak yollarda yapmak zorunda kaldım çünkü chdir Stanza iş gibi görünmüyordu.
CentOS 6 kullanıyordum ve benim için çalışmak için önerilen hack'i (Upstart 0.6.5 için), ne de 'su' numarasını alamadım çünkü katılan çatalların sayısı (4 sanırım) takip edilmedi. 'veya' daemon bekleyin '.
Sonunda yaptım
chown user:group executable
chmod +s executable
(yani setuid bitini ayarlayın ve sahipliği değiştirin).
En güvenli yöntem olmayabilir, ancak dahili bir Ar-Ge projesi için bu bizim durumumuzda önemli değildi.
chmod 1700 veya en azından chmod u+sx,go-x sadece yerine orada +s, "yeterince güvenli" olarak nitelendirirdi. :)
Neyi başarmaya çalıştığınıza bağlı olarak üçüncü bir olasılık var. Mümkün olabilir Söz konusu dosyalar / cihazlardaki erişim kontrollerini gevşetin . Bu, ayrıcalıklı olmayan bir kullanıcının normalde izin vermeyeceği öğeleri bağlamasına veya erişmesine izin verebilir. Sadece süreçte krallığın anahtarlarını vermediğinizden emin olun.
Ayrıca sudo parola önbelleğinin zaman aşımını değiştir . Ancak, makineniz fiziksel olarak güvende olmadıkça tavsiye etmiyorum (yani, yoldan geçenlerin sudo erişimi kazanmaya çalışmasının mümkün olmadığına inanıyorsunuz).
Ayrıcalıklı eylemler gerçekleştirmenin çok az yolu olmasının ve gerçekleştirilmelerinin iyi bir nedeni var. gereksiz gerekli günlüğü. Gevşek kısıtlamalar sisteminiz için bir güvenlik tehlikesi oluşturacak ve kayıt tutmamanız tehlikeye girdiğinizde ne olduğunu bilmenin bir yolu olmadığı anlamına gelir.
Eğer boyut Günlük dosyalarınızdan biri endişe duyuyorsa, muhtemelen bir şeyler yanlış olabilir. Sudo normal şartlar altında kullanım başına sadece bir satır üretir.