Вы можете использовать ] eval
для получения и установки значения переменной, зная ее имя; следующая функция работает как в Bash, так и в Dash :
varmunge ()
{
: '
Invocation: varmunge [after]
Function: Adds to the list of directories in . If is
already present in then is left unchanged. If the third
argument is "after" then is added to the end of , otherwise
it is added at the beginning.
Returns: 0 if everthing was all right, 1 if something went wrong.
' :
local pathlist
eval "pathlist=\"\$$1\"" 2>/dev/null || return 1
case ":$pathlist:" in
*:"$2":*)
;;
"::")
eval "$1=\"$2\"" 2>/dev/null || return 1
;;
*)
if [ "$3" = "after" ]; then
eval "$1=\"$pathlist:$2\"" 2>/dev/null || return 1
else
eval "$1=\"$2:$pathlist\"" 2>/dev/null || return 1
fi
;;
esac
return 0
}
Неважно. А синяк, который вы видите у меня на лбу, это от того, что я бился головой об стол...
В файловой системе /opt
я установил nosuid
, несмотря на то, что знал, что двоичный файл агента был setuid()
root.
Нет, нет, нет, нет, нет!
SELinux здесь не просто так. Ваши приложения никогда не должны иметь метки init_exec_t
. Эта метка зарезервирована для systemd или других систем инициализации, которые могут использоваться в системе, как вы можете видеть в политике Fedora (например).
Запуск приложений в этом контексте устанавливает для них особый режим и ожидает, что это приложение будет вести себя как система инициализации (что, конечно же, не так).
Чтобы решить эту проблему, вам нужно поделиться, что это приложение должно делать, как оно запускается и где хранится. Как правило, вы должны иметь возможность установить для исполняемого файла какой-либо разумный контекст выполнения (sbin_exec_t
?), а для других — какой-то общий контекст, читаемый для этих файлов (etc_t
?).
У меня нет под рукой RHEL/Fedora, чтобы дать более конкретные советы в данный момент, но, конечно, ответ не в том, чтобы установить для всего контекста значение init_exec_t
. Это не сработает.