Mengkonfigurasi Layanan Systemd untuk dijalankan dengan akses root

21

Saya memiliki layanan dalam bentuk aplikasi node.js yang diatur dengan Systemd di Raspbian Jessie dan menggunakan akun penggunanya sendiri. Namun, saya menemukan bahwa layanan tidak berjalan dengan benar karena tidak memiliki izin yang diperlukan. Salah satu modul simpul yang saya instal memerlukan akses root. Jika saya menjalankan aplikasi secara manual dengan sudo semuanya berfungsi dengan baik.

Apakah ada cara untuk memberitahu systemd untuk menjalankan layanan dengan sudo?

Luke
sumber
2
Bagaimana file unit Anda terlihat, tambahkan ke pertanyaan Anda? Biasanya systemdmenjalankan file unit dengan hak root.
Thomas

Jawaban:

31

beri tahu systemd untuk menjalankan layanan sudo?

sudo tidak ada hubungannya dengan itu.

Biasanya Anda menginstruksikan systemd untuk menjalankan layanan sebagai pengguna / grup tertentu dengan a User=dan Group=arahan di [Service]bagian file unit.

Atur agar root (atau hapus, menjalankan sebagai root adalah default).

HBruijn
sumber
Saya mengaturnya untuk menggunakan pengguna tertentu karena saya menggunakan panduan untuk mengkonfigurasinya. Namun dalam kasus saya ini tidak sesuai. Saya menghapus ini untuk dijalankan sebagai root secara default dan sekarang semuanya berfungsi!
Lukas
2
Menjalankan sebagai root tidak sama dengan menjalankan User=root. Lihat jawaban saya.
Mark Stosberg
Di mana file ini dapat diedit?
Matius
15

Untuk menghapus, systemdlayanan sistem berjalan sebagai root secara default, tetapi masih ada perbedaan antara perilaku default dan menjalankan layanan sistem dengan User=root.

Seperti yang didokumentasikan dalam variabel Lingkungan dalam proses spawned , variabel-variabel ini hanya ditetapkan jika User=diatur:

$USER, $LOGNAME, $HOME, $SHELL

Saya menguji untuk mengkonfirmasi temuan ini. Jadi jika Anda ingin menjalankan layanan systemd sebagai root yang membutuhkan salah satu dari variabel di atas, Anda perlu mengatur User=root.

Mark Stosberg
sumber
Terima kasih! Itu adalah satu-satunya hal yang berhasil bagi saya pada aplikasi yang saya miliki
Pedro Torres
NB jika Anda mengatur User = root Anda mungkin juga harus mengatur Group = root :) superuser.com/a/1452367/39364
rogerdpack
2

solusi sementara, tetapi berhasil dalam keadaan darurat:

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

Dapat dijalankan dengan pengguna yang memiliki hak sudo dalam file unit systemd seperti:

[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
Daino3
sumber
Ini memiliki beberapa masalah: Pertama, dua jawaban pertama menjelaskan mengapa menggunakan pengguna dan kemudian sudo tidak perlu, dan menunjukkan cara yang tepat untuk melakukannya. Kedua, Anda seharusnya tidak menjalankan webapp sebagai root. Ketiga, aplikasi web Anda harus berada di belakang server web normal seperti nginx.
Michael Hampton
Saya tidak akan setuju dengan Anda pada poin Anda. Tetapi jika seseorang, seperti saya, menginginkan standup server yang sederhana, secepat mungkin, ini adalah opsi yang bisa digunakan.
daino3
Hampir secepat yang Anda bisa. Jelas menggunakan sudoakan memperlambat startup sedikit. Dan itu tidak perlu.
Michael Hampton
@MichaelHampton Saya mencoba untuk menulis pintu belakang, jadi saya menemukan jawaban ini sangat membantu!
P. Soutzikevich
1

Jalankan sebagai pengguna sistem dalam hal ini secara default layanan berjalan sebagai root.

Umut
sumber