Я бы не рекомендовал это, но попробуйте:
eval "./script.sh $(./look_up_args.pl 234)"
Это должно сработать, но оставьте помните, что eval
будет оценивать все, что look_up_args.pl
происходит с выводом, что означает, что вы остаетесь уязвимыми для внедрения кода.
Лучшим вариантом было бы то, что @thrig предложил в комментариях: использовать стандартизированный формат данных для передачи данных между инструментами. Даже строка, разделенная новой строкой, была бы прекрасным форматом для конвейера обработки в стиле оболочки.
Поскольку это действительно хороший вопрос, и он представлял для меня интерес, я провел несколько поисков, которые оказались не очень полезными. Наконец я связался с #selinux
на Freenode IRC и спросил, как выбирается роль selinux по умолчанию. К счастью, пользователь grift
смог предоставить недостающую информацию, чтобы ответить на ваш вопрос.
Основным компонентом для настройки контекста selinux является pam_selinux.so
, который отвечает за настройку сеанса. Модуль pam имеет различные параметры конфигурации,а также может интерактивно запрашивать у пользователя желаемый контекст. В случае отсутствия информации во время входа в систему используется информация, хранящаяся в /etc/selinux/$TYPE/contexts/user/$USERID
, если она не определена, используется контекст __default__
, установленный в contexts/default_contexts
.
root@u1604-cnt-host:/etc/pam.d# grep selinux *
lightdm:session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
lightdm:session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
lightdm-autologin:session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
lightdm-autologin:session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
lightdm-greeter:session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
lightdm-greeter:session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
login:session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
login:session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
sshd:session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
sshd:session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
systemd-user:session required pam_selinux.so close
systemd-user:session required pam_selinux.so nottys open
root@u1604-cnt-host:/etc/pam.d#
Поскольку lightdm
использует те же вызовы pam_selinux.so
, что и login
или sshd
, это не должно быть источником проблемы.
Вскоре я попытался заставить работать желаемое изменение в Ubuntu, но у меня сложилось впечатление, что политика selinux была нарушена на уровне процесса. Итак, я провел несколько тестов на Fedora :
.[root@workbench users]# cat /etc/selinux/targeted/contexts/users/staff_u
system_r:local_login_t:s0 guest_r:guest_t:s0 staff_r:staff_t:s0
system_r:remote_login_t:s0 staff_r:staff_t:s0
system_r:sshd_t:s0 guest_r:guest_t:s0 staff_r:staff_t:s0
%<--- snipp ---%<
переключение system_r:sshd_t:s0
на guest_r:guest_t:s0
работает нормально, для работы пользователю selinux должна быть назначена роль. Процесс sshd
выполняется в домене system_r:sshd_t
. При попытке переключить контекст по умолчанию для staff_u
на sysadm_r:sysadm_t|system_r:system_r
логин возвращается к staff_r:staff_t:s0
при простой замене части guest_r:guest_t
. Это связано с политикой для system_r:sshd_t
, которая не разрешает переключение контекста на system_r
или sysadm_t
.
Установка нерабочей комбинации -приводит к unconfined_r:unconfined_t
, который является типом по умолчанию в Fedora targeted
, так как default_contexts
содержит user_r:user_t
для system_r:sshd_t
, но пользователь selinux не имел доступа к user_r
роль во время теста.
Еще немного подробностей по теме:
https://selinuxproject.org/page/PolicyConfigurationFiles#contexts.2Fusers.2F.5Bseuser_id.5D_File
https://selinuxproject.org/page/RefpolicyBasicRoleCreation#Default_Contexts