Exécuter le script en tant que root lors de la connexion (pas d'utilisateur sudoer, session shell)
8
Tout comme /etc/profileet ~/.profilemais exécuté par root au lieu de l'utilisateur fait la connexion. /etc/rc.locals'exécute après le démarrage mais j'ai besoin d'exécuter le script avant la connexion. L'utilisateur n'est pas un sudoer.
Il peut y avoir un moyen de le faire, mais ce ne serait pas comme /etc/profileou ~/.profileparce que l'exécution de code dans ces scripts est effectuée par le shell de l'utilisateur et est soumise au contrôle de l'utilisateur, alors que si vous ne voulez pas que l'utilisateur ait le pouvoir exécuter des programmes comme rooteux-mêmes, alors cela devra être fait par un service en cours d'exécution externe aux processus de l'utilisateur. ... Cela pourrait aider si vous pouviez nous dire le but du script que vous souhaitez exécuter.
Eliah Kagan
J'ai besoin d'effectuer un montage spécifique (--bind) pour un utilisateur spécifique. J'ai essayé fstab avec les options propriétaire et utilisateur, mais cela ne fonctionne pas. /etc/rc.local est une option mais il effectue toujours le montage, que l'utilisateur se connecte ou non. J'ai actuellement accordé des privilèges sudoer pour «monter» à l'utilisateur, mais c'est une solution de contournement et je n'aime pas accorder de privilèges aux utilisateurs standard. Je pense que j'utiliserai plutôt rc.local. Merci!
Antonio Sánchez
Vous pouvez créer un script racine avec uniquement cette mountcommande particulière et donner à l'utilisateur le privilège d'exécuter uniquement ce script (configuration /etc/sudoers). Une commande avec des options données peut être définie directement dans sudoers.
enzotib
J'ai déjà essayé de cette façon. Le fait est que lorsque vient le temps d'exécuter «mount» à l'intérieur du script, «sudo» est de nouveau obligatoire, car le script est exécuté par «user» et non par «root», donc à la fin de la journée, «mount» doit être accordé aussi pour «utilisateur» et au lieu d'une seule règle sudoers maintenant j'en ai deux. C'est mon expérience, alors s'il vous plaît, gardez à l'esprit que je ne suis pas un expert et peut-être que j'ai fait quelque chose de mal. Merci!
Antonio Sánchez
Réponses:
3
Pour revenir à la méthode sudoers, je pense que vous y étiez presque avant d'abandonner. En regardant vos derniers commentaires, je voudrais juste aborder quelque chose qui va probablement régler les choses pour vous:
Si vous exécutez un script en tant que root, vous n'avez pas besoin d'appeler sudo depuis celui-ci.
J'ai un script comme celui-ci:
#! /bin/bash
echo $USER
whoami
Si je cours, sudo ./myscriptje rootreviens pour les deux. La session dans laquelle le script s'exécute est un shell racine.
En bref, cela signifie que tout ce que vous faites dans votre script possède déjà des autorisations root. Vous n'avez pas besoin d'appeler sudo(pas que cela devrait faire mal - a rootgénéralement des sudoautorisations).
Donc écrire votre script, chownà rootet chmodà 700(si seul root peut exécuter, lire ou le modifier) et puis juste permettre à votre utilisateur [s] pour l' exécuter par sudoers. Cela devrait fonctionner.
Si cela ne fonctionne pas, c'est probablement un problème plus important avec le script, pas avec le framework d'autorisations. Je suggère de donner un sudoaccès complet à un utilisateur (l'ajout au groupe admin est le moyen le plus simple), puis d'exécuter votre script.
Étape 1. créez un script avec la commande bind à l'aide de n'importe quel éditeur. Par exemple:
sudo emacs bind_user_directories.sh
Contenu:
#!/bin/bash#NOTE: this file would be placed in /usr/local/sbin/ folder as bind_user_directories.sh#alternatively it could be placed in /etc/init.d/ ... (I guess)### BEGIN INIT INFO# Provides: bind_user_directories# Required-Start: # Required-Stop: # Should-Start: $named# Default-Start: 0 2 3 4 5 6 (I guess...)# Default-Stop: 1# Short-Description: mount --bind for a user# Description: runs mount --bind command for certain pre-defined directories for a specific user### END INIT INFO# What is this?
DESC="bind_user_directories"# See how we were called.case"$1"in
start)
log_progress_msg "bind directories for user..."
sudo mount --bind /source/path /target/path
log_progress_msg "done: bind directories for user";;
stop)
log_progress_msg "umount --bind directories for user..."
sudo umount /target/path
log_progress_msg "done: unbind directories for user";;
restart)
$0 stop
sleep 1
$0 start
;;*)#log_success_msg "Usage: bind_user_directories {start|stop|restart}"
log_success_msg "Usage: service bind_user_directories <start|stop|restart>"
exit 1;;esac
exit 0
Étape 2. enregistrez bind_user_directories.sh et rendez-le exécutable:
chmod a+x bind_user_directories.sh
Étape 3. liez-le à un emplacement approprié tel que / usr / local / sbin:
description "runs mount --bind command for certain pre-defined directories for a specific user"
start on filesystem and net-device-up IFACE!=lo
stop on runlevel [!023456]
console output
respawn
respawn limit 105
exec /usr/local/sbin/bind_user_directories.sh start
Si cela fonctionne pour vous, faites-le moi savoir. Vous pouvez vérifier les messages du journal système après la connexion. (Je ne l'ai pas encore testé et je n'ai jamais rien implémenté comme ça auparavant.) Si vous améliorez la solution, veuillez partager votre solution finale ici. Merci.
Mais ce qu'Antonio Sánchez recherche, c'est comment exécuter un script rootau moment où un utilisateur particulier se connecte .
Eliah Kagan
Le script doit s'exécuter indépendamment la session est graphique ou shell standard. J'ai mis à jour le titre pour le remarquer. J'ai lu quelque chose sur Upstart, mais cela semble compliqué pour la tâche (apparemment) simple qu'elle est. Quoi qu'il en soit et jusqu'à présent, Upstart semble être le seul moyen de le faire. Si vous connaissez Upstart, serait-il difficile d'en apprendre suffisamment pour faire ce travail? Merci!
/etc/profile
ou~/.profile
parce que l'exécution de code dans ces scripts est effectuée par le shell de l'utilisateur et est soumise au contrôle de l'utilisateur, alors que si vous ne voulez pas que l'utilisateur ait le pouvoir exécuter des programmes commeroot
eux-mêmes, alors cela devra être fait par un service en cours d'exécution externe aux processus de l'utilisateur. ... Cela pourrait aider si vous pouviez nous dire le but du script que vous souhaitez exécuter.mount
commande particulière et donner à l'utilisateur le privilège d'exécuter uniquement ce script (configuration/etc/sudoers
). Une commande avec des options données peut être définie directement danssudoers
.Réponses:
Pour revenir à la méthode sudoers, je pense que vous y étiez presque avant d'abandonner. En regardant vos derniers commentaires, je voudrais juste aborder quelque chose qui va probablement régler les choses pour vous:
Si vous exécutez un script en tant que root, vous n'avez pas besoin d'appeler sudo depuis celui-ci.
J'ai un script comme celui-ci:
Si je cours,
sudo ./myscript
jeroot
reviens pour les deux. La session dans laquelle le script s'exécute est un shell racine.En bref, cela signifie que tout ce que vous faites dans votre script possède déjà des autorisations root. Vous n'avez pas besoin d'appeler
sudo
(pas que cela devrait faire mal - aroot
généralement dessudo
autorisations).Donc écrire votre script,
chown
àroot
etchmod
à700
(si seul root peut exécuter, lire ou le modifier) et puis juste permettre à votre utilisateur [s] pour l' exécuter par sudoers. Cela devrait fonctionner.Si cela ne fonctionne pas, c'est probablement un problème plus important avec le script, pas avec le framework d'autorisations. Je suggère de donner un
sudo
accès complet à un utilisateur (l'ajout au groupe admin est le moyen le plus simple), puis d'exécuter votre script.la source
Étape 1. créez un script avec la commande bind à l'aide de n'importe quel éditeur. Par exemple:
Contenu:
Étape 2. enregistrez bind_user_directories.sh et rendez-le exécutable:
Étape 3. liez-le à un emplacement approprié tel que / usr / local / sbin:
Étape 4. créez le script upstart:
Contenu:
Si cela fonctionne pour vous, faites-le moi savoir. Vous pouvez vérifier les messages du journal système après la connexion. (Je ne l'ai pas encore testé et je n'ai jamais rien implémenté comme ça auparavant.) Si vous améliorez la solution, veuillez partager votre solution finale ici. Merci.
la source
mdm
s/etc/mdm/PostLogin/
dans le monde d'Ubuntu !!Pour exécuter un script en tant que root avant la connexion
Vous pouvez démarrer le script avec Upstart .
Vous pouvez ajouter l'appel de script aux scripts de démarrage kdm / gdm / etc existants .
Exemples: Sujet: FAQ: démarrage automatique / exécution automatique, exécution périodique .
la source
root
au moment où un utilisateur particulier se connecte .