ユーザーがpsmouseモジュールをロード/アンロードするスクリプト(ルートなし)

ユーザーがpsmouseモジュールをロード/アンロードするスクリプト(ルートなし)

modprobe -r psmouseroot権限なしでユーザーが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

  • 定義されたユーザーセット(必要に応じて1人のユーザーまたはユーザーのセットにすることもできます)
  • だけ実行modprobermmod
  • 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と権限を持つ公的にアクセス可能なディレクトリ(私が好むが個人的な好み)になければなりません755root所有権は必須ではありませんが、人々が変更するのは難しくなります。このスクリプトはスーパーユーザーとして実行する必要があるため、安全でなければならないことを忘れないでください。

  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(スクリプトの実行を許可する限り)のみを入力できます。

関連情報