Apa cara kanonikal untuk memiliki pekerjaan pemula mengubah userid-nya dan menjalankan skrip sebagai pengguna yang tidak memiliki hak pribadi?
Jelas seseorang dapat menggunakan su
atau sudo
, tapi ini kelihatannya hacky (dan dapat menghasilkan baris log yang tidak perlu).
initctl --version
untuk menemukan versi pemula Anda saat ini.Bertanya di saluran #upstart di freenode, pejabat yang menangani masalah ini adalah:
sumber
su
itu berartiexpect fork
dan bahkanexpect daemon
tidak menangkap PID terakhir.exec su -s /bin/sh -c 'HOME=/foo/bar exec "$0" "$@" &>/var/log/foobar.log' username -- /path/to/command [parameters...]
Bagaimana dengan menggunakan start-stop-daemon?
Dari buku masak pemula :
Catatan:
start-stop-daemon
tidak didukung di RHEL.sumber
Ada beberapa cara untuk melakukannya, semua dengan semantik yang sedikit berbeda, terutama yang berkaitan dengan keanggotaan grup:
setuidgid
akan menempatkan Anda dalam grup yang Anda tentukan.setuidgid
akan menempatkan Anda dalam grup itu, sehingga Anda tidak akan dapat mengakses file milik grup lain yang menjadi anggota Anda.setuidgid
from daemontools-encore dansetuidgid
dari nosh toolset keduanya memiliki opsi-s
(alias--supplementary
) yang akan menempatkan Anda dalam grup itu, dan juga menempatkan Anda di semua grup tambahan untuk pengguna yang Anda tentukan.Menggunakan
newgrp
setelah Anda menjadi pengguna yang kurang beruntung akan menambahkan satu grup ke set grup Anda, tetapi juga membuat subkulit baru, membuatnya sulit untuk menggunakan skrip dalam.start-stop-daemon
mempertahankan keanggotaan grup Anda, dan melakukan banyak hal lebih dari sekadar setuid / setgid.chpst -u username:group1:group2:group3... commandname
akan memungkinkan Anda menentukan dengan tepat keanggotaan grup apa yang akan diadopsi, tetapi (dalam Ubuntu ) hanya disertakan denganrunit
paket, yang merupakan alternatifupstart
.su -c commandname username
mengambil semua keanggotaan grup nama pengguna, seperti halnyasudo -u username commandname
, jadi mereka mungkin rute yang paling tidak mengejutkan.sumber
Gunakan
setuidgid
dari paketdaemontools
.Dokumentasi di sini: http://cr.yp.to/daemontools/setuidgid.html
sumber
Pada contoh Ubuntu 10.10 di Amazon EC2, saya lebih beruntung dengan
start-stop-daemon
perintah itu.Saya juga berjuang dengan beberapa bait pemula lainnya . Saya memanggil aplikasi python dengan
virtualenv
parameter tertentu dan beberapa untuk program saya yang dijalankan.Berikut ini yang berhasil bagi saya.
The
PYTHONPATH
adalah untuk mendapatkan beberapa paket diinstal dari sumber ke PYTHON jalan modul saat pekerjaan pemula ini berjalan. Saya harus melakukan segalanya di jalur absolut karenachdir
bait tampaknya tidak bekerja.sumber
Saya menggunakan CentOS 6, dan saya tidak bisa mendapatkan retasan yang disarankan (untuk Upstart 0.6.5) bekerja untuk saya, juga trik 'su' karena jumlah garpu yang terlibat (4 saya pikir) tidak dilacak oleh 'fork fork 'atau' harapkan daemon '.
Saya akhirnya hanya melakukannya
(Yaitu mengatur bit setuid dan mengubah kepemilikan).
Ini mungkin bukan metode yang paling aman, tetapi untuk proyek R&D internal, itu tidak masalah dalam kasus kami.
sumber
chmod 1700
atau setidaknyachmod u+sx,go-x
di sana, bukan hanya+s
, itu akan memenuhi syarat sebagai "cukup aman." :)Ada kemungkinan ketiga tergantung pada apa yang ingin Anda capai. Anda mungkin dapat melonggarkan kontrol akses pada file / perangkat yang dimaksud . Ini dapat memungkinkan pengguna yang tidak berkepentingan untuk memasang atau mengakses item yang biasanya tidak diizinkan. Pastikan Anda tidak memberikan kunci kerajaan dalam prosesnya.
Anda juga dapat mengubah batas waktu cache kata sandi sudo . Tetapi saya tidak merekomendasikannya kecuali mesin Anda secara fisik aman (yaitu, Anda yakin bahwa orang yang lewat tidak akan berusaha mendapatkan akses sudo).
Ada alasan bagus bahwa ada sangat sedikit cara untuk melakukan tindakan istimewa dan bahwa mereka melakukan penebangan yang
tidakperlu . Pembatasan longgar akan menjadi bahaya keamanan untuk sistem Anda, dan kurangnya pencatatan berarti tidak ada cara untuk mengetahui apa yang terjadi ketika Anda telah dikompromikan.Jika ukuran file log Anda mengkhawatirkan maka ada sesuatu yang mungkin salah. Sudo hanya menghasilkan satu baris per penggunaan dalam kondisi normal.
sumber
Di CentOS 6, pemula 0.6.5, berikut ini yang berhasil bagi saya.
atau :
Saat digunakan
proses pekerjaan tidak bisa dihentikan
initclt stop
. Saya pikir alasannya adalah:sumber