в 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
O_CREAT
не присутствует при последующем вызове программы, он также работает нормально. Учитывая ваше направление, я выполнил:
./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
в опубликованном коде отсутствует инструкция для вызова shm_unlink ()
при выполнении с общей памятью