Exécuter un script en tant que root lorsqu'un utilisateur non root se connecte


0

J'ai déjà vu cette question ici et ici, mais ils sont assez vieux et je n'ai pas réussi à trouver de solution au travail.

Fondamentalement, je dois exécuter un script ou une commande automatiquement en tant que root à chaque fois qu'un utilisateur non root SSH est sur le serveur. Le serveur exécute Ubuntu 16.04 et utilise OpenSSH si cela fait une différence.

EDIT: Pour être plus précis, je veux tuer un processus créé par l’utilisateur A lorsque l’utilisateur B se connecte. Mes compagnons de chambre et moi exploitons la crypto sur mon serveur de jeu Headless et j’aimerais pouvoir s’exécuter pkill miner.shautomatiquement lorsque quelqu'un se connecte. dans, peu importe qui a commencé. Dans la mesure où il serait extrêmement peu sûr de laisser les utilisateurs tuer les processus de chacun, il semble que cela soit plus difficile que prévu.


pam_execmentionné dans la deuxième question est aussi ce que je voudrais essayer. Besoin d'un peu de lecture sur PAM.
dirkt

@ dirkt Oui, j'ai vu ça, mais j'ai eu des erreurs de permission quand j'ai essayé.
J'examinerai plus en détail

Vous obtiendrez peut-être une meilleure réponse si vous expliquez ce que vous voulez réellement faire lors de la connexion (il existe peut-être un meilleur moyen que d’exécuter un script en tant que root).
Omniprésence

Réponses:


1

pam_exec vous a indiqué la bonne direction, mais setuid est un mauvais conseil; la plupart (tous?) des Linux modernes l'ignorent dans les scripts shell et ne la respectent que dans les fichiers exécutables binaires.

Cela poserait-il un problème si le script était exécuté (en tant que root) à un moment autre que la connexion? S'il est correct de le faire tourner plus souvent que strictement nécessaire, vous pouvez créer un script wrapper qui est exécuté à chaque connexion ssh avec des autorisations utilisateur et qui utilise sudo (sans mot de passe) pour exécuter votre script en tant que root. Cela signifie toutefois que les utilisateurs peuvent également l'exécuter manuellement (en tant que root) aussi souvent qu'ils le souhaitent.

Pour le configurer, ajoutez cette ligne à /etc/pam.d/sshd

account optional pam_exec.so /etc/pam.d/LoginWrapper.sh

Ensuite, créez le fichier /etc/pam.d/LoginWrapper.sh avec le contenu:

#!/bin/bash if [[ $EUID -ne 0 ]]; then # Execute only when a user other than root logs in /usr/bin/sudo /path/to/your/root_script.sh fi

Notez que si votre sudo est dans un chemin différent, vous devez le mettre à jour ci-dessus.

Maintenant, dans / etc / sudoers, ajoutez la ligne:

ALL ALL=(root) NOPASSWD: /path/to/your/root_script.sh


Merci pour l'aide @Omnipresence mais j'obtiens toujours pkill: killing pid 2629 failed: Operation not permittedquand j'essaie de l'exécuter. Mon root_script.sh est fondamentalement justepkill miner.sh
jamzsabb

J'ai mis à jour ma question avec plus d'informations, je ne suis pas vraiment décidé à le faire, c'est simplement une chose simple que je voulais faire pour des raisons de commodité et qui m'a amené à approfondir davantage les autorisations des utilisateurs Linux. À ce stade, je veux le faire simplement pour prouver que cela peut être fait!
jamzsabb

0

Résolu cela en ajoutant tous les utilisateurs à un groupe appelé mygroup

sudo groupadd mygroup
sudo usermod -aG mygroup user1
sudo usermod -aG mygroup user2

Puis modification /etc/sudoerspour permettre à ce groupe de s'exécuter sudo pkillsans mot de passe en ajoutant ce qui suit à sudoers

%mygroup ALL=(ALL) NOPASSWD: /usr/bin/pkill

Ensuite, j'ai juste ajouté la commande sudo pkillau bas de /etc/profileet cela a fonctionné avec charme.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.