public inbox for gentoo-user-ru@lists.gentoo.org
 help / color / mirror / Atom feed
* [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 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: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 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