Странное поведение sudo

dangerr

Создём значит пользователя browser, добавляем в /etc/sudoers:
tot-to ALL=(browser) NOPASSWD: ALL
(tot-to - логин моего основного пользователя)
Зачем создём скрипт /usr/local/bin/firefox:
 

#!/bin/sh
echo 'firefox wrapper script'
if (whoami | grep -q tot-to)
then
sudo -u browser /usr/bin/firefox "$@" &
else
/usr/bin/firefox "$@" &
fi

Если теперь написать в консоли /usr/local/bin/firefox, то выводится строка 'firefox wrapper script' запускается firefox из-под пользователя browser - то есть всё как я и хочу.
Но у меня (и в gentoo по умолчанию) /usr/local/bin - это первая запись в переменной PATH. Поэтому логично предположить, что набрав просто firefox, я получу тот же результат. Но вместо этого получаю запрос пароля. Причём даже не выводится строка 'firefox wrapper script', что я вообще никак объяснить не могу. То есть вроде как даже до вызова sudo дело не дошло, а меня уже просят ввести пароль.
Надо сказать, что я подобным способом запуска браузера пользуюсь давно и до этого применял вот такой wrapper:
 

#!/bin/sh
if (whoami | grep -q root)
then
su browser -c "DISPLAY=$DISPLAY /usr/bin/firefox $@"
else
if (whoami | grep -q tot-to)
then
sudo /usr/local/bin/firefox "$@"
else
/usr/bin/firefox "$@"
fi
f

а в sudoers было так:
tot-to ALL=(root) NOPASSWD: /usr/local/bin/firefox
В таком варианте всё работает как надо. Но мне он не нравится. Во-перых, ни-к-чему задействовать рута, во-вторых изврат с рекурсивным вызовом скрипта самим собой. Да и лишние процессы висят.
Да и вообще охота понять что происходит-то. :)

Serab

так все-таки, что which firefox выдает?
может, у тебя старый скрипт каким-то боком подхватился :confused: (это от телепат-модуля сообщение)

dangerr

 tot-double ~ $ which firefox
/usr/local/bin/firefox

Я старый скрипт вообще удалил. Чтобы его сюда вставить я на другой комп по ssh зашёл, где ещё старый остался.
Чудеса, чесслово...

fufa58

а там что-то было про то, что баш полные пути кэширует. не оно, не?

dangerr

Намекаешь на то, что надо перелогиниться?

Anturag

 % set -x 

в консоле и скрипте не помогает в диагностике?

artimon

хотя бы баш перезапустить

dangerr

Перелогинился.

tot-double ~ $ set -x
++ echo -ne '\033]0;tot-double:~\007'
tot-double ~ $ firefox
+ sudo /usr/local/bin/firefox
Password:
++ echo -ne '\033]0;tot-double:~\007'
tot-double ~ $ /usr/local/bin/firefox
+ /usr/local/bin/firefox
firefox wrapper script
++ echo -ne '\033]0;tot-double:~\007'
tot-double ~ $ Xlib: extension "RANDR" missing on display ":0.0".
GLib-GIO-Message: Using the 'memory' GSettings backend. Your settings will not be saved or shared with other applications.

И только тогда появляется firefox.
:(

Serab

$ firefox
+ sudo /usr/local/bin/firefox
o_O

Anturag

o_O

Вот-вот.
 % alias | grep firefox 

hiper-hoper

В man, сукины дети!
hash -r

hiper-hoper

а у тебя в /usr/bin/firefox лежит шелл-скрипт, или бинарник?
у меня по крайней мере шелл скрипт, который в том числе проверяет, запущен ли он через судо.

dangerr

alias | grep firefox
Опаньки... вот где собака зарыта-то.
Точно, я ж для того, чтобы старый скрипт лишний раз сам себя не запускал, плодя процессы без толку, и добавил алиас в .bashrc!
Вот, блин, как бывает-то...
Огромное спасибо! :)

dangerr

Там симлинк на бинарник, хотя это в свете решения проблемы уже и не важно. :)
Кстати, а в чём может быть смысл проверки на запущенность через sudo?

Serab

а что, кстати, за унылый which, который не сказал, что там alias? что за шелл?

dangerr

which как which... какой встал, такой и остался... я думаю, он скорее всего входит в system и появился ещё при распаковке stage3.

tot-double ~ $ which which
/usr/bin/which
tot-double ~ $ equery belongs /usr/bin/which
* Searching for /usr/bin/which ...
sys-apps/which-2.20 (/usr/bin/which)

Serab

не-не-не, в нормальном шелле which должен быть встроенной командой. Или я туплю и в баше просто нету такого?

dangerr

Да я как-то вообще хз... баш у меня, есличо тоже какой встал при распаковке stage3, такой и юзаю. :confused:
Как узнать-то чё встроено, а чё запускается из бинаря?

Serab

я узнаю.... командой which :grin: :umn:

evgen5555

Да вроде не встроено ничего

[moat ~]$ which which
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
/usr/bin/which

Serab

ааа, это сносит мне крышу, что это за дистриб?

Serab

это так странно. Как он может прочитать алиасы? хотя я не хочу знать... :)

evgen5555

fc17

evgen5555

Как он может прочитать алиасы?
Да ничего странного тут, читает алиасы из stdin

Serab

а, тфу, туплю :banghead: Да, прикольно :)

hiper-hoper

в баше не показывает, да, зато command -v везде работает.

hiper-hoper

там какие-то проверки на правильность $HOME и комменты про опцию -H.
Оставить комментарий
Имя или ник:
Комментарий: