* [gentoo-user-ru] root->user
@ 2008-04-22 20:15 Alex Efros
2008-04-22 21:06 ` Andrey Vasyutchenko
2008-04-22 21:15 ` Mad Deer
0 siblings, 2 replies; 5+ messages in thread
From: Alex Efros @ 2008-04-22 20:15 UTC (permalink / raw
To: gentoo-user-ru
Hi!
Иногда root должен выполнить какой-нить скриптик под аккаунтом юзера.
Если выполняемая команда элементарна (например, id или date :)) - нет
проблем, есть куча простейших способов это сделать. Но если команда
требует привычную полноценную среду в виде домашнего каталога и переменных
окружения... то всё становится значительно сложнее.
На данный момент самый корректный вариант у меня выглядит так:
su - USER -c 'exec bash -l -c "COMMAND"'
Недостатков здесь три:
1) длинная, уродливая, не очевидная команда
2) сложность с использованием кавычек внутри COMMAND т.к. команда уже
внутри обоих типов кавычек и приходится выстраивать лес слешей
3) хотя обычно этой команды хватает, она тоже не совсем корректно работает:
- нет кучи переменных (COLUMNS,HISTSIZE,MAIL,etc.)
- отличается SHELLOPTS
- не подгружается BASH_COMPLETION
Альтернативные варианты, например:
su - USER -c 'COMMAND'
sudo -u USER bash -c 'COMMAND'
setuidgid USER bash -c 'COMMAND'
chpst -u USER bash -c 'COMMAND'
работают ещё менее корректно - не инициализирую кучу переменных
окружения, которые есть в первом варианте.
Они начинают работать более-менее корректно только в таком виде:
HOME=~USER USER=USER LOGNAME=USER setuidgid USER bash -l -c "COMMAND"
но это не лучше первого варианта, и к тому же при этом варианте
наследуется часть root-овых переменных окружения (LS_COLORS,MAIL,SSH_*,...).
Есть мысли как эту задачу решить проще (ну, кроме оформления первой
команды отдельным скриптиком run_as) и правильнее?
--
WBR, Alex.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [gentoo-user-ru] root->user
2008-04-22 20:15 [gentoo-user-ru] root->user Alex Efros
@ 2008-04-22 21:06 ` Andrey Vasyutchenko
2008-04-22 21:23 ` Alex Efros
2008-04-22 21:15 ` Mad Deer
1 sibling, 1 reply; 5+ messages in thread
From: Andrey Vasyutchenko @ 2008-04-22 21:06 UTC (permalink / raw
To: gentoo-user-ru
[-- Attachment #1: Type: text/plain, Size: 188 bytes --]
Честно говоря непонятен смысл таких действий. Что мешает открыть вкладку в
Х-терминале или, там переключиться на соседний виртуальный и залогиниться
как нужный юзер?.
/me разводит руками
[-- Attachment #2: Type: text/html, Size: 213 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [gentoo-user-ru] root->user
2008-04-22 21:06 ` Andrey Vasyutchenko
@ 2008-04-22 21:23 ` Alex Efros
0 siblings, 0 replies; 5+ messages in thread
From: Alex Efros @ 2008-04-22 21:23 UTC (permalink / raw
To: gentoo-user-ru
Hi!
On Wed, Apr 23, 2008 at 01:06:39AM +0400, Andrey Vasyutchenko wrote:
> Честно говоря непонятен смысл таких действий. Что мешает открыть вкладку в
> Х-терминале или, там переключиться на соседний виртуальный и залогиниться
> как нужный юзер?.
> /me разводит руками
Ну, например у меня при загрузке машины таким образом поднимаются X-ы -
через выполнение startx от юзера. Почему я не хочу запускать X-ы от root и
использовать всякие *dm - это отдельный вопрос.
Далее, аналогичным образом запускаются некоторые другие сервисы, которые
тоже нужно поднять при загрузке машины и которые должны иметь доступ к
X-ам. Например - тулзовина которая добавляет поддержку мультимедийных
кнопок на клаве. Для её работы вообще-то X-ы не нужны, но некоторые
команды, которые я повесил на мультимедийные кнопки, работают с X-ами - и
когда она их запускает у них должен быть адекватный environment.
Запускать их из ~/.xinitrc неправильно, т.к. это сервисы, они должны
автоматом перезапускаться если что, и вообще (у меня стоит runit и все
сервисы запущены под ним, как и положено).
Дальше есть задача разворачивания нового проекта на сервере. Проектов
много, серверов тоже, и делать это ручками облом. А при разворачивании
проекта нужно половину операций выполнить как root (создать пользователя,
дать доступ к базе, настроить апач, etc.) а другую часть как обычный юзер -
собственно распаковка/настройка проекта, cron, etc. И делать вторую часть
от root не правильно и не безопасно. Поэтому в середине скрипта нужно
переключиться на юзера, отработать, а потом продолжить как root.
etc.
--
WBR, Alex.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [gentoo-user-ru] root->user
2008-04-22 20:15 [gentoo-user-ru] root->user Alex Efros
2008-04-22 21:06 ` Andrey Vasyutchenko
@ 2008-04-22 21:15 ` Mad Deer
2008-04-22 21:31 ` Alex Efros
1 sibling, 1 reply; 5+ messages in thread
From: Mad Deer @ 2008-04-22 21:15 UTC (permalink / raw
To: gentoo-user-ru
Alex Efros пишет:
> su - USER -c 'COMMAND'
> sudo -u USER bash -c 'COMMAND'
> setuidgid USER bash -c 'COMMAND'
> chpst -u USER bash -c 'COMMAND'
>
как на счёт sudo -u USER bash -c '. /etc/profile; COMMAND'
или в особо сложных случаях sudo -u USER bash -c '. ~/.bashrc; COMMAND'
пропробуй в /etc/sudoers закоментить "Defaults env_reset" она сбрасывает переменые
а вообще чем такие сложные построения выполнять проще именно со скриптом
--
Да здравствует то, благодаря чему мы, несмотря ни на что.(c) Задорнов
Registered Linux User #317544
Linux 2.6.24-gentoo-r5 i686 AMD Athlon(tm) 64 X2 Dual Core Processor 5000+
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [gentoo-user-ru] root->user
2008-04-22 21:15 ` Mad Deer
@ 2008-04-22 21:31 ` Alex Efros
0 siblings, 0 replies; 5+ messages in thread
From: Alex Efros @ 2008-04-22 21:31 UTC (permalink / raw
To: gentoo-user-ru
Hi!
On Wed, Apr 23, 2008 at 01:15:07AM +0400, Mad Deer wrote:
> как на счёт sudo -u USER bash -c '. /etc/profile; COMMAND'
> или в особо сложных случаях sudo -u USER bash -c '. ~/.bashrc; COMMAND'
Это работать не будет - $HOME никто не выставил. Я поэтому и выстраивал
цепочку HOME= USER= LOGNAME= перед вызовом sudo. Но давайте проверим:
# sudo -u USER bash -c '. /etc/profile; echo $HOME'
/root
# sudo -u USER bash -c '. ~/.bashrc'
bash: /root/.bashrc: Permission denied
> пропробуй в /etc/sudoers закоментить "Defaults env_reset" она сбрасывает
> переменые
Это ничего не даёт, что вполне логично.
В общем, спасибо за ответ, но Вы бы проверяли то, что советуете, хоть в
общих чертах. Конкретно в моём случае не требуется для этого подготавливать
сложную тестовую среду, достаточно просто выполнить команду перед тем, как
отправлять её в maillist.
--
WBR, Alex.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2008-04-22 21:31 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-22 20:15 [gentoo-user-ru] root->user Alex Efros
2008-04-22 21:06 ` Andrey Vasyutchenko
2008-04-22 21:23 ` Alex Efros
2008-04-22 21:15 ` Mad Deer
2008-04-22 21:31 ` Alex Efros
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox