Systemd Service'i kök erişimi ile çalışacak şekilde yapılandırma


21

Raspbian Jessie üzerinde Systemd ile kurulmuş bir node.js uygulaması şeklinde bir hizmetim var ve kendi kullanıcı hesabını kullanıyor. Ancak, gerekli izinlere sahip olmadığı için hizmetin düzgün çalışmadığını görüyorum. Yüklediğim düğüm modüllerinden biri için kök erişimi gerekiyor. Uygulamayı sudo ile manuel olarak çalıştırırsam her şey yolunda gider.

Systemd'e sudo ile hizmeti çalıştırmasını söylemenin bir yolu var mı?


2
Birim dosyanız nasıl görünüyor, sorunuza ekleyin? Normalde systemdbirim dosyalarını kök haklarıyla çalıştırır.
Thomas

Yanıtlar:


31

systemd ile hizmeti çalıştırmasını söyle sudo?

sudo onunla hiçbir ilgisi yok.

Genellikle systemd'ye , birim dosyasının bölümünde bir User=ve Group=yönergesi ile belirli bir kullanıcı / grup olarak bir hizmet çalıştırmasını bildirirsiniz [Service].

Bunları root olarak ayarlayın (veya root olarak çalışmak varsayılan olarak kaldırın).


Ben yapılandırmak için bir kılavuz kullanırken belirli bir kullanıcı kullanmak için ayarlamıştı. Ancak benim durumumda bu uygun değildi. Varsayılan olarak root olarak çalıştırmak için bunu kaldırdım ve şimdi her şey çalışıyor!
Luke

2
Kök olarak çalışmak, koşmakla aynı şey değildir User=root. Cevabımı gör.
Mark Stosberg

Bu dosya nerede düzenlenebilir?
Matthew


15

Temizlemek için, systemdsistem hizmetleri varsayılan olarak kök olarak çalışır, ancak varsayılan davranış ile bir sistem hizmetini çalıştırma arasında hala bir fark vardır.User=root .

Oluşturulan işlemlerde Ortam değişkenleri'nde belgelendiği gibi , bu değişkenler yalnızca User=şu şekilde ayarlanırsa ayarlanır:

$USER, $LOGNAME, $HOME, $SHELL

Bu bulguyu doğrulamak için test ettim. Bu nedenle, yukarıdaki değişkenlerden birine ihtiyaç duyan bir systemd hizmetini root olarak çalıştırmak istiyorsanız, ayarlamanız gerekir User=root.


Teşekkür ederim! Sahip olduğum bir uygulamada benim için çalışan tek şey buydu
Pedro Torres

NB Kullanıcı = kök ayarladıysanız, büyük olasılıkla Grup = kök de ayarlamalısınız :) superuser.com/a/1452367/39364
rogerdpack

2

geçici bir çözüm, ama bir çimdik içinde çalışmasını sağladı:

/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'

Bir systemd birim dosyasında sudo ayrıcalıklarına sahip bir kullanıcıyla şu şekilde çalışabilir:

[Unit]
Description=Rails Webserver
After=syslog.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/var/www/webserver
ExecStart=/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'
Restart=always
KillSignal=SIGQUIT

[Install]
WantedBy=multi-user.target

Bunun birden fazla sorunu vardır: İlk olarak, ilk iki cevap bir kullanıcı ve sonra sudo kullanmanın neden gereksiz olduğunu açıklar ve bunu yapmanın doğru yolunu gösterir. İkinci olarak, web uygulamanızı yine de root olarak çalıştırmamalısınız. Üçüncü olarak, web uygulamanızın nginx gibi normal bir web sunucusunun arkasında olması gerekir.
Michael Hampton

Hiçbir konuda seninle aynı fikirde değilim. Ama eğer benim gibi biri, bir sunucuyu olabildiğince hızlı bir şekilde çıplak kemikler istiyorsa, bu işe yarayan uygun bir seçenektir.
daino3

Neredeyse olabildiğince hızlı. Açıkçası kullanmak sudobaşlangıçta biraz yavaşlatır. Ve gereksiz.
Michael Hampton

@MichaelHampton Bir arka kapı yazmaya çalışıyorum, bu yüzden bu cevabı faydalı buldum!
P. Soutzikevich

1

Bu durumda sistem kullanıcısı olarak çalıştırın, bu durumda hizmet varsayılan olarak kök olarak çalışır.

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.