Para eliminar privilégios, você precisa de um usuário não raiz para acessar. Então é só uma questão de mudar para esse usuário:
#define UNPRIV_UID 48
#define UNPRIV_GID 48
if (getuid() == 0) { // we are root
// setting UID/GID requires root privileges, so if you don't set
// the GID first, you won't be able to do it at all.
if (setgid(UNPRIV_GID)!=0) die("Failed to set nonroot GID");
if (setuid(UNPRIV_UID)!=0) die("Failed to set nonroot UID");
}
ASSERT(getuid() != 0);
Note que isto é feito dentro do programa , em vez de em um script de wrapper. Muitos programas exigem privilégios de root para algum propósito específico (por exemplo, para ligar a uma porta de baixa numeração), mas não precisam de root depois disso. Então, esses programas serão iniciados como root, mas depois abandonarão os privilégios quando não forem mais necessários.
Se você não precisa de privilégios de root, então não o execute como root. Por exemplo:
# Change this:
myprog -C /my/config/file
# To this:
sudo -u someuser myprog -C /my/config/file
# Or this
su someuser -c "myprog -C /my/config/file"