Разрешить чтение файла только через приложение

Я бы использовал find. Вот так:

find <path> -type f -name <filename> > same_name.txt

Пример:

find. -type f -name "foo" > same_name.txt
cat same_name.txt 
./dir_a/foo
./foo
./dir_b/foo
./tmp/foo

Приведенный выше код рекурсивно находит все файлы, начиная с текущего каталога, с именем foo. Результат сохраняется в файлsame_name.txt

1
31.12.2020, 00:40
1 ответ

Используйтеgetuid()вместо geteuid().

Из справочной страницыexecve():

If the set-user-ID bit is set on the program file referred to by pathname, then the effective user ID of the calling process is changed to that of the owner of the program file.

"Настоящий" ID пользователя, который возвращает getuid(), не изменяется, то есть это UID пользователя, запускающего процесс.


Другое дело:

I don't want generator to be executed from a shell. I want it to be executed only from another script generator.sh which calls generator, because I do more stuff in generator.sh.

сложнее, так как у вас не может быть сценариев setuid. Но у вас может быть оболочка setuid, которая запускает скрипт (и ничего больше ), и этот скрипт затем может запускать окончательный двоичный файл. Или используйте sudo для запуска скрипта. Однако у вас могут возникнуть проблемы с оболочкой, которая не любит setuid, см. Бит Setuid, похоже, не влияет на bash и Разрешить setuid в сценариях оболочки .

Также обратите внимание, что включение оболочки может вызвать больше возможных проблем с безопасностью -, и что с любой программой с setuid вы должны быть осторожны, чтобы убедиться, что среда выполнения чистая. Это включает в себя переменные среды и дескрипторы файлов, но, возможно, и другие наследуемые функции. Одной из причин использования sudo является то, что он, по крайней мере, пытается решить подобные проблемы.

Другим, возможно, лучшим способом было бы реализовать привилегированный процесс как сетевую службу, а пользователям просто запустить простую тупую клиентскую программу.

2
18.03.2021, 22:39

Теги

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