В upstart v1.4 setuid и setgid изначально поддерживаются в конфигурационном файле.
Запуск новых заданий в качестве непривилегированных пользователей
Какой канонический способ заставить задание выскочки изменить свой ИД пользователя и запустить скрипт как непривилегированный пользователь?
Очевидно, что можно использовать su
или sudo
, но это кажется хакерским (и может генерировать ненужные строки журнала).
8 ответов на вопрос
- Популярные
- Новые
- С комментариями
- Активные
Спрашивая на канале #upstart на freenode, официальный ответ на этот вопрос таков:
Будущий выпуск Upstart будет иметь встроенную поддержку для этого, но сейчас вы можете использовать что-то вроде:
exec su -s /bin/sh -c 'exec "$0" "$@"' username -- /path/to/command [parameters...]
Как насчет использования start-stop-daemon?
exec start-stop-daemon --start --chuid daemonuser --exec /bin/server_cmd
Рекомендуемый метод для систем Debian и Ubuntu - использовать вспомогательную утилиту
start-stop-daemon
. […]start-stop-daemon
Не накладывает ограничения PAM («сменный модуль аутентификации») на процесс, который он запускает.
Примечание: start-stop-daemon
не поддерживается в RHEL.
Есть несколько способов сделать это, все с немного другой семантикой, особенно относящейся к членству в группе:
setuidgid
поместит вас в указанную вами группу.- Исходные daemontools 'поместят
setuidgid
вас только в эту группу, поэтому вы не сможете получить доступ к файлам, принадлежащим другим группам, членом которых вы являетесь. setuidgid
От DaemonTools-бис аsetuidgid
из Nosh набора инструментов оба имеют-s
(он же--supplementary
) вариант, который поставит вас в этой группе, а также поставить вас во всех дополнительных групп для пользователя, который вы укажете.
- Исходные daemontools 'поместят
Использование, как
newgrp
только вы станете менее привилегированным пользователем, добавит одну группу к вашему набору групп, но также создаст новый подоболочек, что затруднит использование внутри скриптов.start-stop-daemon
сохраняет членство в вашей группе и делает намного больше, чем просто setuid / setgid.chpst -u username:group1:group2:group3... commandname
позволит вам точно указать, какое членство в группе следует принять, но (в Ubuntu ) он поставляется только сrunit
пакетом, который является альтернативойupstart
.su -c commandname username
собирает все членство в группах с именами пользователей, как, впрочемsudo -u username commandname
, и, вероятно, это путь к наименьшему удивлению.
Используйте setuidgid
из пакета daemontools
.
Документация здесь: http://cr.yp.to/daemontools/setuidgid.html
На экземпляре Ubuntu 10.10 в Amazon EC2 мне повезло с start-stop-daemon
командой.
Я также боролся с некоторыми другими выскочившими строфами . Я вызываю приложение Python с конкретными virtualenv
и некоторыми параметрами для моей исполняемой программы.
Вот что сработало для меня.
script export PYTHONPATH=.:/home/ubuntu/.local/lib/python2.7/site-packages/:/home/ubuntu/python/lib/python2.7/site-packages/ exec start-stop-daemon --start --chuid ubuntu --exec /home/ubuntu/python_envs/MyProj/bin/python /home/ubuntu/www/MyProj/MyProj.py -- --config-file-dir=/home/ubuntu/www/MyProj/config/ >> /home/ubuntu/startup.log 2>&1 & end script
PYTHONPATH
, Чтобы получить некоторые пакеты, установленные из источника в PYTHON путь модуля при выполнении этого выскочки работы. Я должен был делать все по абсолютному пути, потому что chdir
строфа, похоже, не работала.
Я использовал CentOS 6, и я не смог заставить рекомендованный хак (для Upstart 0.6.5) работать на меня или трюк 'su', потому что количество задействованных вилок (я думаю, 4) не отслеживалось ожидаемым форком или ожидать демона.
В конце концов я просто сделал
chown user:group executable chmod +s executable
(т.е. установите бит setuid и измените владельца).
Возможно, это не самый безопасный метод, но для внутреннего проекта НИОКР в нашем случае это не имело значения.
Существует третья возможность в зависимости от того, что вы пытаетесь достичь. Возможно, вы сможете ослабить контроль доступа к файлам / устройствам, о которых идет речь . Это может позволить непривилегированному пользователю монтировать или получать доступ к элементам, к которым он обычно не имеет права. Просто убедитесь, что вы не отдаете ключи от королевства в процессе.
Вы также можете изменить тайм-аут кэша паролей sudo . Но я не рекомендую его, если ваша машина физически не защищена (то есть вы считаете, что маловероятно, что прохожий попытается получить доступ к sudo).
Есть веская причина, по которой существует очень мало способов выполнения привилегированных действий и что они выполняют ненужную необходимую регистрацию. Свободные ограничения могут быть угрозой безопасности для вашей системы, а отсутствие журналирования означает, что невозможно узнать, что произошло, когда вы были скомпрометированы.
Если размер ваших файлов журнала является проблемой, то, вероятно, что-то не так. Судо генерирует только одну линию за использование в нормальных условиях.
Похожие вопросы
-
4
Требуется хороший бесплатный образ Ubuntu Server VMWare
-
8
Ожидание ноутбука в Linux / Ubuntu
-
1
Как я могу получить доступ к принтеру Windows Vista из Ubuntu по сети?
-
-
3
Могу ли я запустить Microsoft Office 2007 под Ubuntu?
-
6
Virtualbox, VMware, KVM или другое для виртуализации Ubuntu?
-
4
Функция Windows 7 «Aero Snap» в Ubuntu GNOME
-
5
ПО для управления iPod для Linux
-
1
Возвращаясь из Dual-boot к просто Windows
-
2
Firefox печать в PDF-файл
-
5
Как получить максимальное разрешение на Ubuntu в Microsoft Virtual PC?