Execute o script como root no login (nenhum usuário sudoer, sessão de shell)

8

Muito parecido com /etc/profile e ~/.profile , mas executado por raiz, em vez de o usuário fazer login. /etc/rc.local é executado após a inicialização, mas eu preciso executar o script antes do login. O usuário não é um sudoer.

Obrigado!

    
por Antonio Sánchez 24.11.2011 / 19:08

3 respostas

3

Apenas para voltar ao método sudoers, acho que você estava quase lá antes de desistir. Analisando seus comentários mais recentes, gostaria de abordar algo que provavelmente consertará as coisas para você:

Se você executar um script como root, não precisará chamar o sudo de dentro dele.

Eu tenho um script como este:

#! /bin/bash

echo $USER
whoami

Se eu executar sudo ./myscript , vejo root retornado para ambos. A sessão em que o script está sendo executado é um shell raiz.

Em suma, isso significa que tudo o que você faz no seu script já tem permissões de root. Você não precisa chamar sudo (não que isso deva doer - root normalmente tem sudo permissões).

Portanto, escreva seu script, chown para root e chmod para 700 (para que somente o root possa executá-lo, lê-lo ou editá-lo) e permitir que seu usuário o execute através de sudoers. Isso deve funcionar.

Se não estiver funcionando, provavelmente será um problema maior com o script, não com a estrutura de permissões. Eu sugiro dar um usuário sudo completo (adicionando ao grupo de administração é a maneira mais fácil) e, em seguida, executando o script.

    
por Oli 17.04.2012 / 01:37
2

Passo 1. Crie um script com o comando bind usando qualquer editor. Por exemplo:

sudo emacs bind_user_directories.sh

conteúdo:

#!/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

Etapa 2. salve bind_user_directories.sh e torne-o executável:

chmod a+x bind_user_directories.sh

Passo 3. associe-o a um local adequado como / usr / local / sbin:

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

Etapa 4. criar o script upstart:

sudo emacs /etc/init/bind_user_directories.conf

conteúdo:

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

Se isso funcionar para você, por favor me avise. Você pode verificar o log do sistema em busca de mensagens depois de fazer o login. (Eu não testei ainda e nunca implementei nada parecido antes.) Se você melhorar a solução, compartilhe sua solução final aqui. Obrigado.

    
por MountainX 16.04.2012 / 18:50
0

Para executar um script como root antes do login

  1. Você pode iniciar o script com o Upstart .

  2. Você pode adicionar a chamada de script aos scripts de inicialização existentes do kdm / gdm / etc .

Exemplos: Tópico: FAQ: Autostart / Autorun, Execução periódica .

    
por user26687 24.11.2011 / 20:54