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.sh
automatiquement 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_exec
mentionné dans la deuxième question est aussi ce que je voudrais essayer. Besoin d'un peu de lecture sur PAM.Réponses:
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
la source
pkill: killing pid 2629 failed: Operation not permitted
quand j'essaie de l'exécuter. Mon root_script.sh est fondamentalement justepkill miner.sh
Résolu cela en ajoutant tous les utilisateurs à un groupe appelé mygroup
Puis modification
/etc/sudoers
pour permettre à ce groupe de s'exécutersudo pkill
sans mot de passe en ajoutant ce qui suit à sudoers%mygroup ALL=(ALL) NOPASSWD: /usr/bin/pkill
Ensuite, j'ai juste ajouté la commande
sudo pkill
au bas de/etc/profile
et cela a fonctionné avec charme.la source