LINUX.ORG.RU

Наименее инвазивный рутовый шелл на sudo

 , ,


0

2

Хочется иногда удобно получать рутовый шелл, так чтобы сохранить все свои функции из .bashrc и все переменные, включая dbus-ные эндпойнты, DISPLAY, членство в группах, в общем, всё, кроме собственно uid. Пока сделал:

if [[ -z $SUDO_USER ]]; then
    RootShell() {
        sudo -E \
            env HOME="$HOME" PS1="$PS1$On_Red<sudo>$Color_Off " \
            /bin/bash --rcfile "$HOME"/.bashrc
    }
fi

Получилось довольно похоже, но группы не сохраняются:
[d_a@home ~]$ id
uid=1000(d_a) gid=1000(d_a) группы=1000(d_a),10(wheel),18(dialout),135(mock),988(vboxusers),990(wireshark) контекст=unconfined_u:unconfined_r:unconfined_t:SystemLow-SystemHigh
[d_a@home ~]$ RootShell
[root@home ~]# <sudo> id
uid=0(root) gid=0(root) группы=0(root) контекст=unconfined_u:unconfined_r:unconfined_t:SystemLow-SystemHigh
[root@home ~]# <sudo> exit
[d_a@home ~]$ 

У sudo есть ключ -g, но с ним не работает:
[d_a@home ~]$ sudo -E -g \#1000 env HOME="$HOME" PS1="$PS1$On_Red<sudo>$Color_Off " /bin/bash --rcfile "$HOME"/.bashrc
Sorry, user d_a is not allowed to execute '/bin/env HOME=/home/d_a PS1=[\u@\h \W]\$ \e[41m<sudo>\e[0m  /bin/bash --rcfile /home/d_a/.bashrc' as d_a:d_a on home.

Настройка sudo стандартная (%wheel ALL=(ALL) ALL). Конфиг у него очень страшный, хуже только PAM. Можно ли как-нибудь сохранить группы или выкидывать sudo и на чём-то другом делать такой shell?

★★★★★

Ответ на: комментарий от superguest

Ой, так просто, а я проглядел, точнее там было что-то страшное написано, и решил что это не оно. Спасибо вам, но стыдоба такая ¡_¡

Так в итоге костыльненько, но можно кататься https://github.com/Jajauma/dotfiles/blob/master/bash/.bashrc#L125, если кто знает короче, может поделится.

d_a ★★★★★ ()
Последнее исправление: d_a (всего исправлений: 1)
Ответ на: комментарий от superguest

Нет, так совсем плохо -- все мои тулзы из .bashrc и ~/.local/bin пропали.

d_a ★★★★★ ()

А хорошо б ещё впилить, чтобы из этого рутового шелла файлики с моими правами создавались. Т.е. сейчас вот

[d_a@home dotfiles]$ RootShell 
[root@home dotfiles]# <RootShell> touch /tmp/test; ls -l $_
-rw-r--r--. 1 root root 0 фев 18 02:46 /tmp/test
а хорошо бы чтобы они сразу d_a.d_a были. Вот это был бы суперкрутой рут-шелл. Разотмечу я наверное тредик пока.

d_a ★★★★★ ()
Ответ на: комментарий от d_a

у меня работает, но там костыль в .bashrc, что докидывает путь:

[[ -d "${HOME}/.bin" ]] &&  [[ "${PATH}" != *.bin* ]] && export PATH="${HOME}/.bin:${PATH}"

а для доступа пользователю можно так:

sudo -sPE -u root -g $USER
но нужно тогда umask=2 дописывать, потому что создаётся такое: -rw-r--r-- 1 root superguest 0 фев 18 01:58 /tmp/12

superguest ()
Ответ на: комментарий от superguest

Костыли для PATH или umask то ладно, я навинчу, а вот sudo с ключами -u/-g меня не пускает:

[d_a@home dotfiles]$ sudo -sPE -u root -g d_a
[sudo] password for d_a: 
Sorry, user d_a is not allowed to execute '/bin/bash' as root:d_a on home.
Наверное надо sudo как-то настраивать, и/или PAM? Но лезть туда очень не хочется, во-первых, не умею, во-вторых, все эти правочки system-wide они никуда не сохраняются, и на другую машину мне их потом уже не перелить.

d_a ★★★★★ ()
Ответ на: комментарий от d_a

А ну:))) нет, просто у меня всё криво сделано. У рута тупо ссылки на пользовательские ~/.bashrc и ~/.bin

superguest ()
Ответ на: комментарий от superguest

На самом деле дёшево и сердито, я наверное мог бы также устроить, но уж из спортивного интереса помудохаюся.

d_a ★★★★★ ()
Ответ на: комментарий от superguest

Да, я привёл к такому виду как у вас (ALL:ALL), стало пускать. А из коробки там такое (центось):

## Allows people in group wheel to run all commands
%wheel	ALL=(ALL)	ALL
и иди разбирайся, отчего не пускает. Задача моя, не то чтобы упростилась, но немного прояснилась :) Может попробовать написать свой suid-ный бинарник на C и закинуть его прямо в dotfiles. За время ковыряния в судо это видится мне уже проще.

d_a ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.