Отказано в доступе к сегментам общей памяти в / dev / shm /

в Ubuntu 20.04 У меня проблемы с доступом к сегментам разделяемой памяти разными пользователями. Связанные файлы создаются с использованием shm_open () с комбинацией флагов O_CREAT и O_RDWR и помещаются в / dev / shm . У меня есть следующая программа rxample:

#include <stdio.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>

int main()
{
        int ret = 0;
        errno = 0;
        ret = shm_open("/testshm", O_CREAT | O_RDWR, 00666);
        fprintf(stderr, "return value %d\n", ret);
        fprintf(stderr, "result %d: %s\n", errno, strerror(errno));

        return 0;
}

Когда я запускаю ее в первый раз, она работает, как ожидалось, и создается / dev / shm / testshm :

$ ls -la /dev/shm
total 0
drwxrwxrwt  2 root   root     60 Aug  3 16:34 .
drwxr-xr-x 18 root   root   4580 Aug  3 12:41 ..
-rw-rw-r--  1 krejci krejci    0 Aug  3 14:37 testshm

Затем снова запускаю программу от имени того же пользователя работает нормально, но когда я пытаюсь запустить программу от имени root, я получаю сообщение «Permission denied»:

# id
uid=0(root) gid=0(root) groups=0(root)
# ./test
return value -1
result 13: Permission denied
  • Тот же код отлично работает в другом дистрибутиве Linux, а также в Ubuntu 19.10.
  • Если флаг O_CREAT не присутствует при последующем вызове программы, он также работает нормально.
  • Я не нашел ничего полезного в журналах.
  • отключение AppArmor не помогает
2
задан 3 August 2020 в 18:12

2 ответа

Учитывая ваше направление, я выполнил:

./untitled1;  ls -la /dev/shm;  sudo su; ./untitled1  

Результат:

return value 3
result 0: Success
total 0
drwxrwxrwt  2 root    root      60 Aug  7 13:19 .
drwxr-xr-x 20 root    root    4640 Aug  6 13:26 ..
-rw-r--r--  1 richard richard    0 Aug  6 18:17 testshm
[sudo] password for richard: 
root@richard-desktop:/home/richard/Documents/forum#  ./untitled1
return value 3
result 0: Success

Примечание: я уже обновился до 20, как видел:

uname -a 
Linux richard-desktop 4.15.0-112-generic #113-Ubuntu SMP Thu Jul 9 23:41:39 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
0
ответ дан 11 August 2020 в 20:14

в опубликованном коде отсутствует инструкция для вызова shm_unlink () при выполнении с общей памятью

0
ответ дан 11 August 2020 в 20:14

Другие вопросы по тегам:

Похожие вопросы: