로그인시 스크립트를 루트로 실행하십시오 (sudoer 사용자 없음, 쉘 세션)


8

많은 같은 /etc/profile~/.profile대신 사용자의 루트에 의해 실행 된 로그인을 다하고 있습니다. /etc/rc.local부팅 후 실행되지만 로그인하기 전에 스크립트를 실행해야합니다. 사용자는 sudoer가 아닙니다.

감사!


이 할 수있는 방법이 될 수 있지만처럼되지 않을 것 /etc/profile또는 ~/.profile그 스크립트의 실행 코드가 사용자의 쉘에 의해 수행하고 사용자가이하지 않으려면 반면, 사용자의 지배의 대상이되기 때문에 프로그램 root자체 를 실행할 수 있다면, 이는 사용자 프로세스 외부에서 실행중인 일부 서비스에 의해 수행되어야합니다. ... 실행하려는 스크립트의 목적을 알려 주면 도움이 될 수 있습니다.
Eliah Kagan

한 명의 특정 사용자에 대해 하나의 특정 (-바인드) 마운트를 수행해야합니다. 소유자 및 사용자 옵션으로 fstab을 시도했지만 작동하지 않습니다. /etc/rc.local은 하나의 옵션이지만 사용자 로그인 여부에 관계없이 항상 마운트를 수행합니다. 나는 현재 사용자에게 '마운트'에 대한 sudoer 권한을 부여했지만 해결 방법이며 표준 사용자에게 권한을 부여하는 것을 좋아하지 않습니다. 대신 rc.local을 사용한다고 생각합니다. 감사!
안토니오 산체스

해당 특정 mount명령 만으로 루트 스크립트를 작성하고 해당 스크립트 만 실행할 권한을 사용자에게 부여 할 수 있습니다 (구성 /etc/sudoers). 주어진 옵션이있는 명령은에서 직접 설정할 수 있습니다 sudoers.
enzotib

나는 이미 그런 식으로 시도했다. 문제는 스크립트 내에서 'mount'를 실행할 시간이 오면 스크립트가 'root'가 아닌 'user'에 의해 실행되므로 'mount' 'user'에게도 부여되어야하며 단 하나의 sudoers 규칙 대신 이제 두 가지가 있습니다. 이것은 나의 경험입니다. 제발, 전문가가 아니고 내가 잘못한 일을 명심하십시오. 감사!
Antonio Sánchez

답변:


3

sudoers 방법으로 돌아 가기 위해, 나는 당신이 포기하기 전에 거의 거기에 있었다고 생각합니다. 귀하의 최신 의견을 살펴보면 아마도 당신을 위해 문제를 해결할 수있는 무언가를 다루고 싶습니다.

루트로 스크립트를 실행하면 그 안에서 sudo를 호출 할 필요가 없습니다.

다음과 같은 스크립트가 있습니다.

#! /bin/bash

echo $USER
whoami

내가 달리면 두 가지 모두 반환 된 sudo ./myscript것을 볼 수 root있습니다. 스크립트가 실행중인 세션은 루트 셸입니다.

즉, 스크립트에서하는 모든 작업에 이미 루트 권한이 있음을 의미합니다. 전화를 걸 필요가 없습니다 sudo(손상되지 않아야 함- root일반적으로 sudo권한이 있음).

그래서, 스크립트를 쓰기 chownroot하고 chmod그것을 위해 700(때문에 루트 만이 실행 읽거나 편집 그것을 할 수 있습니다) 다음은 당신의 사용자가 [들]의 sudoers를 통해 실행할 수 있습니다. 작동합니다.

작동하지 않으면 권한 프레임 워크가 아니라 스크립트에서 더 큰 문제 일 수 있습니다. 사용자에게 모든 sudo액세스 권한을 부여하고 (관리자 그룹에 추가하는 것이 가장 쉬운 방법 임) 스크립트를 실행 하는 것이 좋습니다 .


2

단계 1. 편집기를 사용하여 bind 명령으로 스크립트를 작성하십시오. 예를 들면 다음과 같습니다.

sudo emacs bind_user_directories.sh

내용:

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

단계 2. bind_user_directories.sh를 저장하고 실행 가능하게하십시오.

chmod a+x bind_user_directories.sh

3 단계 : / usr / local / sbin과 같은 적절한 위치에 연결합니다.

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

단계 4. upstart 스크립트를 작성하십시오.

sudo emacs /etc/init/bind_user_directories.conf

내용:

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

이것이 효과가 있으면 알려 주시기 바랍니다. 로그인 한 후 시스템 로그에서 메시지를 확인할 수 있습니다. (아직 테스트하지 않았으며 이전에는 이와 같은 것을 구현 한 적이 없습니다.) 솔루션을 개선하려면 여기에서 최종 솔루션을 공유하십시오. 감사.


예, 작동합니다! 우분투 세계 mdm/etc/mdm/PostLogin/스크립트에 대한 훌륭한 대안 입니다!
Adam Ryczkowski

systemd와 비슷한 솔루션이 있습니까? ... Cf. askubuntu.com/questions/847930/…
Adam Ryczkowski

0

로그인하기 전에 루트로 스크립을 실행하려면

  1. Upstart로 스크립을 시작할 수 있습니다.

  2. 기존 kdm / gdm / etc 시작 스크립트에 스크립트 호출을 추가 할 수 있습니다 .

예 : 주제 : FAQ : 자동 시작 / 자동 실행, 정기적 실행 .


그러나 Antonio Sánchez 가 찾고 root 있는 것은 특정 사용자가 로그인 할 때 스크립트를 실행하는 방법 입니다 .
Eliah Kagan

스크립트는 독립적으로 실행되어야합니다. 세션은 그래픽 또는 표준 쉘입니다. 나는 이것을 언급하기 위해 제목을 업데이트했습니다. Upstart에 대해 읽었지만 간단한 작업으로는 복잡해 보입니다. 어쨌든 지금까지 Upstart가 유일한 방법 인 것 같습니다. Upstart를 알고 있다면이 일을 완수하기에 충분히 배우기가 어려울까요? 감사!
안토니오 산체스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.