9 votes

Exécuter script en tant que root à la connexion (pas d'utilisateur sudoer, session script).

Un peu comme /etc/profile y ~/.profile mais exécuté par root au lieu de l'utilisateur qui se connecte. /etc/rc.local s'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.

Merci !

3voto

Mufaka Points 54

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 arranger les choses pour vous :

Si vous exécutez un script en tant que root, vous n'avez pas besoin d'appeler sudo à l'intérieur de celui-ci.

J'ai un script comme ceci :

#! /bin/bash

echo $USER
whoami

Si je cours sudo ./myscript Je vois. root est revenu pour les deux. La session dans laquelle script est exécutée est une script racine.

En bref, cela signifie que tout ce que vous faites dans votre script a déjà les autorisations root. Vous n'avez pas besoin d'appeler sudo (non pas que cela doive faire mal - root a généralement sudo permissions).

Alors écrivez votre script, chown il à root y chmod il à 700 (de sorte que seul root puisse l'exécuter, le lire ou le modifier), puis autorisez vos utilisateurs à l'exécuter via sudoers. Cela devrait fonctionner.

Si cela ne fonctionne pas, il s'agit probablement d'un problème plus important avec le script, et non avec le cadre de permissions. Je suggère de donner à un utilisateur les droits complets sudo accès (l'ajout au groupe admin est le moyen le plus simple) et ensuite exécuter votre script.

2voto

Ajit George Points 1160

Étape 1. Créez un script avec la commande bind en utilisant n'importe quel éditeur. Par exemple :

sudo emacs bind_user_directories.sh

le 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 :

sudo ln -s bind_user_directories.sh /usr/local/sbin/bind_user_directories.sh

Étape 4. Créez le script de démarrage :

sudo emacs /etc/init/bind_user_directories.conf

le contenu :

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 10 5

exec /usr/local/sbin/bind_user_directories.sh start

Si cela fonctionne pour vous, faites-le moi savoir. Vous pouvez vérifier le journal du système pour les messages après avoir ouvert une session. (Je ne l'ai pas encore testé et je n'ai jamais implémenté quelque chose comme ça auparavant). Si vous améliorez la solution, veuillez partager votre solution finale ici. Merci.

0voto

user26687 Points 14424

Pour exécuter un script en tant que root avant le login

  1. Vous pourriez commencer le script avec le Upstart .

  2. Vous pourriez ajouter l'appel script à l'appel existant de l'option kdm/gdm/etc startup scripts .

Exemples : Sujet : FAQ : Démarrage automatique / Autorun, Exécution périodique .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X