В целях тестирования я могу удалить кэшированную память, записав файл 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? Я могу полностью настроить свое ядро при необходимости. Спасибо —
Вы можете создать вспомогательный исполняемый файл (будьте очень осторожны, это опасно), который любой пользователь может запустить с правами суперпользователя.
Это называется УИП.
По соображениям безопасности вы не можете setuid
скрипт оболочки.
Извлечение из вики, как его использовать:
Биты setuid и setgid обычно устанавливаются командой chmod с помощью
установка восьмеричной цифры старшего разряда на 4 (для setuid) или 2 (для
setgid). «chmod 6711 file» устанавливает биты setuid и setgid
(2 + 4 = 6)
Как отметил @rici, вам все равно потребуется разрешение на выполнение, чтобы можно было удалить разрешение на выполнение из others
и держи его только на group
, Таким образом, только тот, кто является членом группы, может выполнить его.
Других решений пока нет …