L'option "--up" dans OpenVPN est normalement utilisée pour le routage, etc. Et donc elle est traitée avant qu'OpenVPN ne baisse les privilèges root pour s'exécuter en tant que personne. Cependant, j'invoque des scripts shell qui doivent s'exécuter en tant qu'utilisateur non privilégié.
Comment je fais ça? J'ai étudié les privilèges de processus de suppression, en particulier les réponses de polynômes et de tylerl, mais je ne comprends pas comment les implémenter. Je travaille dans Centos 6.5 et suid est bloqué, à la fois comme "chmod u + s" et comme "setuid ()".
Il existe un plugin OpenVPN ("openvpn-down-root.so") qui permet aux scripts invoqués par l'option "--down" de s'exécuter en tant que root. Il pourrait y avoir un équivalent, tel que "openvpn-up-user.so", mais je ne l'ai pas trouvé.
Modifier0
Selon la réponse de Nikola Kotur, j'ai installé runit-rpm d'Ian Meyer . Bien que la commande chpst fonctionne dans le terminal, dans le script up, elle échoue avec "commande introuvable". Ce qui fonctionne est "sudo chpst" plus le réglage de l'affichage et de la langue appropriés. Veuillez consulter Pourquoi mon terminal ne produit-il pas correctement les caractères Unicode? Compte tenu de cela, le script up a besoin de ces quatre lignes:
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 &
Modifier1
Selon le commentaire de 0xC0000022L, je trouve que "sudo -u user" fonctionne aussi bien que "sudo chpst -u user -U user":
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 &
J'étudierai les sudoers de l'homme et je mettrai à jour si / quand je fais travailler sudo seul.
la source
Réponses:
J'utilise RunIt de »
chpst
outil pour des tâches comme celui - ci. Par exemple, à partir du script up, appelez votre script non privilégié:la source
Couvrir seulement runit et sudo manque beaucoup. Il existe en fait toute une famille de jeux d'outils comme runit et un large choix d'outils pour faire exactement cela, la tâche même pour laquelle ils ont été conçus:
setuidgid
:setuidgid
:setuidgid
:chpst
:runuid
:s6-setuidgid
:setuidgid
:Ils ne se mêlent pas aux différentes tâches d' ajout de privilèges et ne tombent jamais dans un mode interactif.
Vos problèmes cloués ne sont guère plus que votre oubli d'avoir
sbin
aussi bien quebin
dans votrePATH
, soit dit en passant.Lectures complémentaires
la source
script qui abandonne les privilèges et exécute un autre script (mais ici je viens de le faire s'exécuter lui-même):
Exemple:
la source
/etc/sudoers
permet d'être très précis quelles variables d'environnement peuvent être transmises au programme exécuté parsudo
et ainsi de suite.man sudoers
. Honnêtement, quiconque utilisesudo
simplement poursudo su -
ou pour changer de contexte utilisateur n'a aucune idée de ce qui se cache derrière ce programme génial et combien vous pouvez verrouiller les choses pour des programmes individuels, des utilisateurs, des hôtes, etc.$0
; l'appelant peut$0
littéralement définir ce qu'il veut. Et utilisez plus de citations.$0
est/directory/name with spaces/script
(et rappelez - vous, les utilisateurs peuvent créer des liens symboliques arbitraires dans des endroits dont ils sont propriétaires, même si elles ne sont pas utiliserexec -a somename yourscript
pour appeleryourscript
un$0
desomename
), vous obtiendrezsudo -u nobody /directory/name with spaces
, avecwith
etspaces
passé comme arguments séparés à votre commande .Qu'en est-il de:
Vous vous êtes plaint de l'environnement dans un commentaire précédent, vous pouvez donc également comparer les différences entre les sorties:
la source
Sous Linux, vous pouvez utiliser
runuser
ousetpriv
si une session PAM n'est pas requise (les deux depuisutil-linux
):Depuis la
su
page de manuel:la source