Хочется иногда удобно получать рутовый шелл, так чтобы сохранить все свои функции из .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?