Eu tenho um script no qual preciso montar uma sobreposição para fornecer a um contêiner OCI acesso a um diretório somente leitura montado /nix/store
como se fosse gravável.
Eu gostaria que esse script pudesse ser executado por usuários não-root/não-wheel. Qual seria a maneira mais fácil? Inicialmente, tentei ingenuamente usar SUID
antes de perceber que eles não funcionavam, o que me levou a um monte de respostas e artigos sobre os perigos dos SUID
scripts shell, incluindo um que explicava por que simplesmente envolvê-lo em algum programa C não resolveria o problema. questões de segurança relativas a ambientes não limpos.
Existe um wrapper/utilitário fácil em que eu possa agrupar o script e que cuide de tais vulnerabilidades?
Do ambiente do usuário, eu só preciso de um ENV que é passado apenas para o contêiner docker, porém, o usuário root teria a mesma variável ENV em sua sessão bash, portanto, se uma sugestão funcionar desconsiderando todo o ambiente do usuário e, em vez disso, usar o root one, isso seria bom para o meu caso de uso.
local temp_dir=$(mktemp -d)
mkdir -p {$temp_dir/store,$temp_dir/upper-store,$temp_dir/work-store}
# Create Overlay
sudo mount -t overlay overlay \
-o lowerdir=/nix/store,upperdir=$temp_dir/upper-store,workdir=$temp_dir/work-store $temp_dir/store
# Do some sutff with the mounted overlay
sudo umount $temp_dir/store
rm -rf $temp_dir
Existem algumas variáveis aqui, dependerá de qual distro você está usando e se ela adiciona ou não todos os usuários a um grupo. Estou executando o Ubuntu ATM e todos os meus usuários locais fazem parte do
plugdev
.Então, se eu quisesse permitir que todos eles executassem seu script, adicionaria esta linha a
/etc/sudoers.d/script
:Você também deverá ser capaz de eliminar o uso de
sudo
dentro do script ( mount & unmounting ). Obviamente, você precisa ter esse script em um PATH que todos possam ver, mas de preferência para que não possam editá-lo.A forma adequada de oferecer acesso mount/umount aos seus usuários é via
sudo
, conforme já implementado no script. Ou talvez envolva o script e usesudo wrapper.sh
-o se preferir registrar menos registros syslog.$ man 5 sudoers
oferece conselhos abrangentes sobre como configurar corretamente o utilitário para satisfazer seu caso de uso. Stack Overflow também tem três respostas sobre este tópico.