사용자가 psmouse 모듈을 로드/언로드하는 스크립트(루트 없음)

사용자가 psmouse 모듈을 로드/언로드하는 스크립트(루트 없음)

modprobe -r psmouse루트 권한 없이 사용자가 or 를 실행하는 것만으로 실행할 수 있는 쉘 스크립트를 작성하고 싶습니다 modprobe psmouse. 가능합니까? 나는 이 모듈을 가지고 있습니다 :

$ ls -l /lib/modules/4.4.0-116-generic/kernel/drivers/input/mouse/psmouse.ko 
-rw-r--r-- 1 root root 219670 Feb 12 17:06 /lib/modules/4.4.0-116-generic/kernel/drivers/input/mouse/psmouse.ko

권한을 변경하는 것만으로도 충분합니까?

답변1

sudo 보안 정책을 조정하고 규칙을 만드세요 /etc/sudoers.d.

  • 정의된 사용자 집합(필요에 따라 한 명의 사용자 또는 사용자 집합일 수도 있음)
  • 만 실행 modprobe하고 rmmod,
  • cmd 매개변수에서만 psmouse,
  • sudo 비밀번호 유무에 관계없이.

이것이 "/etc/sudoers.d"가 일반적으로 사용되는 것입니다. 그래서 여기에... (단일 호스트 구성을 가정하고 찾은 파일이 정렬된 어휘 순서로 구문 분석 /etc/sudoers.d된다는 것을 기억합니다.)sudo

  • 해당 줄을 반드시 /etc/sudoers포함 하세요.#include /etc/sudoers.d
  • /etc/sudoers.d/00_aliases나는 일반적 으로 사용자, cmd, 호스트 및 그룹 별칭을 정의하는 개인 기본 파일을 사용합니다 . 이렇게 하면 기본 기본 시스템 설정이 포함된 sudo visudoTweak 사용을 크게 줄일 수 있을 뿐만 아니라 다른 파일도 에서 먼저 해결되는 별칭을 사용합니다 ./etc/sudoers/etc/sudoers.d/sudo/etc/sudoers.d/00_aliases
  • /etc/sudoers.d예를 들어 20_psmouse라는 이름의 파일을 에 배치합니다 .

포함된 sudoers.d 파일을 광범위하게 사용할 계획이 없다면 다음을 수행할 수 있습니다.아니요/etc/sudoers.d/00_aliases아래와 같이 임시 별칭을 만들고 포함된 파일에 직접 포함합니다.

User_Alias  MOUSE_TWKR = user1[, user2[, user3[, ...]]]
Cmnd_Alias  MOUSE_MOD_TWK = /usr/bin/modprobe, /usr/bin/rmmod
MOUSE_TWKR  your-host = NOPASSWD: MOUSE_MOD_TWK psmouse

진실은 푸딩에 있으므로 다음을 수행해야 합니다.
1) 그것을 찾아보고 man sudoers(Archlinux에서 예제는 2038년의 1911번째 줄에서 시작됩니다!!)
2) 몇 가지 실험을 수행해야 합니다. 예를 들어, 위의 규칙이 너무 허용적이어서 cmd 및 관리 중인 컨텍스트 내에서
옵션 사용을 제한하려는 경우 파일 항목을 다음으로 바꾸십시오.modprobermmod

 MOUSE_TWKR  your-host = NOPASSWD: MOUSE_MOD_TWK [!-] psmouse

...그리고 비밀번호를 강제로 입력하세요.

 MOUSE_TWKR  your-host = MOUSE_MOD_TWK [!-] psmouse

(*) "your-host"를 호스트 이름으로 바꾸거나 ALL모든 호스트 허용으로 바꾸면 호스트 예가 됩니다...

답변2

파일에 대한 권한을 변경하면 psmouse.ko누군가가 파일을 변경할 수 있게 만드는 것 외에는 많은 일을 하지 않습니다(나쁜 일이 될 것입니다!) modprobe및 를 실행하도록 허용할 수 있지만 rmmod이론적으로 로드 및 언로드할 수 있기 때문에 위험합니다. 시스템에 모든 커널 모듈이 설치되어 있습니다!

원하는 것은 작은 도우미 스크립트를 만들고 허용된 사용자가 이를 실행할 수 있도록 허용하는 것입니다 root.

  1. 스크립트 만들기:

    /usr/local/bin/load_mouse.sh

    #!/bin/sh
    /sbin/modprobe psmouse
    

    /usr/local/bin/unload_mouse.sh

    #!/bin/sh
    /sbin/rmmod psmouse
    

    /usr/local/bin이러한 스크립트는 소유자 root:root및 권한이 있는 공개적으로 액세스 가능한 디렉토리(제가 선호하지만 이는 개인 취향임)에 있어야 합니다 755. root소유권은 필수는 아니지만 사람들이 변경하기가 더 어려워집니다. 이 스크립트는 수퍼유저로 실행되어야 하므로 안전해야 한다는 점을 기억하세요!

  2. 사용자가 실행할 수 있도록 허용

    visudo에 포함된 파일을 사용하거나 추가하려면 /etc/sudoers.d다음을 추가하세요.

    username ALL=(root) /usr/local/bin/load_mouse.sh,/usr/local/bin/unload_mouse.sh
    

    username적절한 사용자 이름으로 바꾸 거나 %groupname그룹 구성원이 이 명령을 실행할 수 있도록 하려는 경우.

    sudo /usr/local/bin/load_mouse.sh이제 사용자는 (또는 ) 을 사용하여 스크립트를 실행할 수 있습니다 unload_mouse. /usr/local/bin그것이 그들의 것이라면 그것도 PATH괜찮 sudo load_mouse.sh습니다.

  3. (선택사항) sudo통화 종료

    sudo마지막으로, 이를 더 쉽게 입력/실행할 수 있도록 다른 스크립트로 래핑할 수 있습니다 .

    /usr/local/bin/mouse_on

    #!/bin/sh
    sudo /usr/local/bin/load_mouse.sh
    

    /usr/local/bin/mouse_off

    #!/bin/sh
    sudo /usr/local/bin/unload_mouse.sh
    

    특별한 권한이 필요하지 않지만 root:root권한이 있는 것이 마음에 듭니다 755. 이제 사용자는 mouse_onand mouse_off(스크립트 실행을 허용하는 한) 만 입력할 수 있습니다.

관련 정보