Opsi "--up" di OpenVPN biasanya digunakan untuk perutean dll. Jadi itu diproses sebelum OpenVPN menjatuhkan hak akses root untuk dijalankan sebagai bukan siapa-siapa. Namun, saya menggunakan skrip shell yang harus dijalankan sebagai pengguna yang tidak memiliki hak.
Bagaimana aku melakukan itu? Saya telah mempelajari Drop Process Privileges , terutama jawaban polinomial dan tylerl, tetapi saya tidak mengerti bagaimana cara mengimplementasikannya. Saya bekerja di Centos 6.5, dan suid diblokir, baik sebagai "chmod u + s" dan sebagai "setuid ()".
Ada plugin OpenVPN ("openvpn-down-root.so") yang memungkinkan skrip yang dipanggil oleh opsi "--down" untuk dijalankan sebagai root. Mungkin ada yang setara, seperti "openvpn-up-user.so", tapi saya belum menemukannya.
Sunting0
Per jawaban Nikola Kotur, saya telah menginstal runit-rpm Ian Meyer . Meskipun perintah chpst bekerja di terminal, dalam skrip up gagal dengan "perintah tidak ditemukan". Yang berfungsi adalah "sudo chpst" plus pengaturan tampilan dan bahasa yang tepat. Silakan lihat Mengapa terminal saya tidak mengeluarkan karakter unicode dengan benar? Mengingat itu, skrip up membutuhkan empat baris ini:
LANG="en_US.UTF-8"; export LANG
GDM_LANG="en_US.UTF-8"; export GDM_LANG
DISPLAY=:0; export DISPLAY
sudo chpst -u user -U user /home/user/unprivileged.sh &
Sunting1
Per komentar 0xC0000022L, saya menemukan bahwa "sudo -u pengguna" berfungsi juga "sudo chpst -u pengguna -U pengguna":
LANG="en_US.UTF-8"; export LANG
GDM_LANG="en_US.UTF-8"; export GDM_LANG
DISPLAY=:0; export DISPLAY
sudo -u user /home/user/unprivileged.sh &
Saya akan mempelajari man sudoers dan memperbarui jika / ketika saya mendapatkan sudo sendiri untuk bekerja.
sumber
Jawaban:
Saya menggunakan runit 's
chpst
alat untuk tugas-tugas seperti ini. Misalnya, dari skrip atas panggil skrip tidak terprivat Anda:sumber
Meliputi hanya runit dan sudo sangat dirindukan. Sebenarnya ada seluruh keluarga toolet seperti runit, dan berbagai pilihan alat untuk melakukan hal ini, tugas yang mereka rancang untuk:
setuidgid
:setuidgid
:setuidgid
:chpst
:runuid
:s6-setuidgid
:setuidgid
:Mereka tidak berbaur dalam tugas yang berbeda untuk menambahkan hak istimewa, dan tidak pernah jatuh ke mode interaktif.
Omong- omong masalah Anda sedikit lebih dari lupa Anda untuk memiliki
sbin
sertabin
di AndaPATH
, omong-omong.Bacaan lebih lanjut
sumber
skrip yang menghapus hak istimewa dan menjalankan skrip lain (tapi di sini saya membuatnya agar berjalan sendiri):
Contoh:
sumber
/etc/sudoers
memungkinkan untuk menjadi sangat spesifik variabel lingkungan apa yang dapat disampaikan ke program yang dijalankan olehsudo
dan sebagainya.man sudoers
. Jujur saja, siapa pun yang menggunakansudo
hanya untuksudo su -
atau beralih konteks pengguna tidak memiliki petunjuk tentang apa yang ada di balik program yang luar biasa ini dan seberapa banyak Anda dapat mengunci hal-hal untuk program individu, pengguna, host dll ...$0
; penelepon dapat mengatur skrip$0
untuk apa pun yang mereka inginkan. Dan gunakan lebih banyak kutipan.$0
adalah/directory/name with spaces/script
(dan ingat, pengguna dapat membuat symlink sewenang-wenang di lokasi mereka sendiri, bahkan jika mereka tidak menggunakanexec -a somename yourscript
untuk memanggilyourscript
dengan$0
darisomename
), maka Anda akan mendapatkansudo -u nobody /directory/name with spaces
, denganwith
danspaces
lulus sebagai argumen terpisah untuk perintah Anda .Bagaimana dengan:
Anda mengeluh tentang lingkungan di komentar sebelumnya, jadi Anda mungkin juga membandingkan perbedaan antara output:
sumber
Di Linux Anda dapat menggunakan
runuser
atausetpriv
jika sesi PAM tidak diperlukan (keduanya dariutil-linux
):Dari
su
halaman manual:sumber