3

char デバイスのドライバーである小さな Linux モジュールを作成しています。私のコードでは、デバイス自体よりもデバイスクラスを作成しているため、システムに /dev ファイルが作成されます。問題は、/dev ファイルにルート権限しかなく、ユーザーがそのファイルに対する読み取り、書き込み、実行のいずれの権限も持っていないことです。/dev ファイルの権限を変更したいと考えています。

Web で回答を検索したところ、udev ファイルを変更することがわかりましたが、モジュールがカーネルに読み込まれるときに動的に変更する権限が必要なため、この解決策は私の場合には機能しません。私が書いているモジュールは、常に自分のマシンで実行されるとは限らないため、「その場で」アクセス許可を変更する必要があります。

major_number_firewall = register_chrdev(0, device_name_firewall, &my_file_implementation_firewall);

device_class = class_create(THIS_MODULE, class_name_firewall);

log_file_device = device_create(device_class, NULL, MKDEV(major_number_firewall, MINOR_LOG), NULL, device_name_log_file);

権限を変更する機能はありますか?

4

4 に答える 4

4
  1. これを実現するための小さなudev ルールを作成できます。

  2. char デバイス ドライバーを実装する場合は、上記の呼び出し ( ...)のラッパーであるmisc_register()andを使用することを検討してください。構造体miscdeviceを参照してくださいmisc_unregister()device_create()

    struct miscdevice  {
        int minor;
        const char *name;
        const struct file_operations *fops;
        struct list_head list;
        struct device *parent;
        struct device *this_device;
        const char *nodename;
        umode_t mode;
    };
    

メンバー(struct miscdevice *)->modeを使用して適切な権限を設定できます (S_IRUGO | S_IRWXUGO | S_IALLUGO | など ...)

お役に立てれば。

于 2014-11-05T13:25:46.383 に答える
0

あなたはこれを試すことができます

#include <sys/stat.h>

int chmod(const char *path, mode_t mode); また int fchmod(int fd, mode_t mode);

または内部/etc/udev/udev.conf,

あなたは変更することができますdefault_mode = "0660"

于 2014-05-02T14:20:29.757 に答える