为什么我得到"操作不被允许"在尝试安装Linux内核模块时?

时间:2017-02-17 14:13:11

标签: linux linux-kernel

我在尝试运行一段非常简单的代码时遇到了一些麻烦,而且无法找出原因。

我正在

  

不允许操作

尝试从.ko文件(KO_NAME)安装Linux内核模块时。

这是代码的摘录:

if (strcmp(argv[1], "-init")==0) {

    fd=open(KO_NAME, O_RDONLY|O_CLOEXEC);
    if (fd<0) {
      perror("Error");
      printf("Error number: %d\n", errno);
    } else {
      printf("fd: %d\n", fd);
    }
    uid=getuid();
    if (uid!=ROOT_UID) {
      printf("Error: not root\n");
      return -1;
    }
    if (access(KO_NAME, F_OK)==-1) {
      printf("Error: File \"%s\" doesn't exist\n", argv[2]);
      return -1;
    }
    rc=syscall(__NR_finit_module, fd, "", 0);
      close(fd);
      if (rc!=0) {
          perror("Error");
          printf("rc=%d\n", rc);
          printf("Error number: %d\n", errno);
      }

这是运行时的结果:

fd: 3

rc=-1

Error number: 1

为什么我收到错误number 1

  

不允许操作

2 个答案:

答案 0 :(得分:1)

我也在安装Linux内核时出现“不允许操作”错误。我正在运行Sophos Anti-Virus,它有一个已知的bug。 "30s delay of file create and "Operation not permitted" errors with fanotify and cifs – This is a kernel issue and Sophos is working with the Linux community to fix this issue"

要解决此问题,请先禁用sophos-av,然后在每次安装Linux内核后启用它。我在Linux内核安装期间只遇到过这个问题,而不是在常见更新期间。

sudo /opt/sophos-av/bin/savdctl disable

运行Update Manager并安装Linux内核。

sudo /opt/sophos-av/bin/savdctl enable

答案 1 :(得分:0)

默认情况下,root用户只能访问内核模块。 所以在insmod之后你必须用root用户打开设备文件。

因此您必须使用sudo来打开文件。