Tenho o NICE-DCV instalado no RHEL-8.10 e como root fazendo um dcv list-sessions
mostra todas as sessões no sistema. Mas se um usuário fizer dcv list-sessions
isso, a saída disso é apenas a sessão dele e não relata nenhuma outra sessão; isso é normal.
Ao escrever código C em um esforço administrativo para embelezar a saída list-session e permitir que todos os usuários vejam quais sessões ativas existem atualmente, tentei setuid no meu /usr/local/bin/dcvlist
executável c e ele mostra como -rwsrwxr-x. 1 root root dcvlist
. Como root, quando executo este dcvlist
executável, recebo a saída esperada de todas as sessões acontecendo, mas como uma conta de usuário regular isso ainda não acontece.
Estou fazendo algo errado com base no que expliquei? Estou enganado pensando que o setuid também deve ser aplicado ao system("dcv list-sessions")
dentro do meu código C, o que parece não ser? Tudo o que meu código C está fazendo é system("dcv list-sessions")
... na verdade, a popen
e então estou apenas reimprimindo essa saída.
Além disso, o dcv
programa aceita muitos parâmetros adicionais, list-sessions
então não quero permitir sudo
acesso para que os usuários o executem como root.
Um programa setuid altera o uid efetivo do processo; se um aplicativo estiver verificando o uid real (por exemplo, por meio da
getuid()
chamada), ele não verá a diferença; o uid real ainda é o do usuário.Você pode definir o UID real dentro do seu programa com
setuid(0);
. Isso funcionará se o uid efetivo for zero (então de um programa root setuid).Você precisa ter cuidado com esse tipo de coisa, no entanto; sua
system("dev ...")
chamada permitiria que um usuário criasse seu própriodev
comando e o colocasse no PATH primeiro (por exemplo, create$HOME/bin/dev
e setexport PATH=$HOME/bin:$PATH
). Agora eles têm acesso root completo.Em vez disso, seria melhor usar
sudo
, configurado corretamente. Isso pode dar acesso refinado (por exemplo, permitir que apenas pessoas específicas tenham permissão para fazer isso) e fornecer trilhas de auditoria e muito mais.sudo
pode ser configurado para permitir apenas opções específicas, em vez de todas as opções.por exemplo
Isso só permitirá que pessoas no
dev
grupo corramsudo dev list-sessions
. Se tentarem fazersudo dev anythingelse
isso, não será permitido.