Программно удалить кеш Linux как пользователь без полномочий root

В целях тестирования я могу удалить кэшированную память, записав файл drop_caches в Linux под procfs. Я могу сделать это только как root. Это на встроенном Linux, поэтому sudo нет.

sync; echo 3 > /proc/sys/vm/drop_caches

Я могу написать в файл программно в C ++, делая что-то из поста -> Как программно очистить кэш памяти файловой системы в C ++ в системе Linux?

sync();
std::ofstream ofs("/proc/sys/vm/drop_caches");
ofs << "3" << std::endl;

Сложность заключается в желании сделать это во время работы приложения от имени пользователя без полномочий root. При перезагрузке разрешения выглядят так:

# cd /proc/sys/vm/
# ls -lrt drop_caches
-rw-r--r--    1 root     root             0 Feb 13 19:50 drop_caches

И вы не можете изменить эти разрешения — даже с правами root:

# chmod 777 drop_caches
chmod: drop_caches: Operation not permitted
# chown user:user drop_caches
chown: drop_caches: Operation not permitted

Как я могу сделать это в Linux? Можно ли изменить разрешения файла procfs? Я могу полностью настроить свое ядро ​​при необходимости. Спасибо —

5

Решение

Вы можете создать вспомогательный исполняемый файл (будьте очень осторожны, это опасно), который любой пользователь может запустить с правами суперпользователя.

Это называется УИП.

По соображениям безопасности вы не можете setuid скрипт оболочки.

Извлечение из вики, как его использовать:

Биты setuid и setgid обычно устанавливаются командой chmod с помощью
установка восьмеричной цифры старшего разряда на 4 (для setuid) или 2 (для
setgid). «chmod 6711 file» устанавливает биты setuid и setgid
(2 + 4 = 6)

Обновить

Как отметил @rici, вам все равно потребуется разрешение на выполнение, чтобы можно было удалить разрешение на выполнение из others и держи его только на group, Таким образом, только тот, кто является членом группы, может выполнить его.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector