Qt, Linux, vérifiez si un utilisateur a des privilèges sudo

Je suis sous Fedora 17 KDE x64 et Qt 4.8.1.

En contraste avec Ubuntu, Fedora, ça ne donne pas le premier utilisateur créé des privilèges sudo et il n'ajoute pas le premier utilisateur créé à l' /etc/sudoers fichier. Par conséquent, lors de l'installation de programmes sur Fedora 17 KDE (ne l'ai pas testé le Gnome et etc. tours), il nécessite root (pas sudo) les privilèges. Donc, nous avons trois niveaux de privilèges (énumérés par ordre décroissant selon le niveau de privilèges):

1) de la racine
2) sudo
3) l'utilisateur

Dans Fedora 17 KDE si vous avez accès à la root compte utilisateur, vous pouvez donner sudo privilèges d'un autre utilisateur que vous souhaitez simplement en modifiant l' /etc/sudoers fichier et l'ajout de la ligne:

user ALL = (ALL) ALL

... en dessous de la ligne:

root ALL = (ALL) ALL

Remplacer user avec le nom du compte que vous souhaitez donner sudo accès.

Mais pas à chaque utilisateur a accès à la root compte de l'utilisateur. C'est pourquoi la root utilisateur peut donner de super-utilisateur (sudo) les privilèges de certains comptes d'utilisateurs.

Ce que je veux, c'est de vérifier si l'utilisateur actuel de l'exécution de l'application est enregistrée en tant que super-utilisateur. Si donc je vais faire le /usr/bin/kdesu l'utilisation des outils de la /usr/bin/sudo outil qui demande sudo mot de passe.

Si l'utilisateur n'est pas super-utilisateur je laisse /usr/bin/kdesu se comporter comme il le fait, par défaut, il utilise le /usr/bin/su outil qui nécessite root mot de passe.

Actuellement, je suis en utilisant getenv('USER') (“nom d'utilisateur” sur Windows, mais j'ai besoin de cette fonctionnalité sur Linux seulement) pour obtenir de l'utilisateur actuel. Le nom de l'utilisateur actuel peut être acquis en parcourant QProcess::systemEnvironment() où le nom d'hôte et les variables UTILISATEUR sont répertoriés.

L'analyse de la /etc/sudoers fichier n'est pas une option depuis l'ouverture du fichier nécessite sudo ou root privilèges.

l'homme getuid() ? Pas spécifiques de Qt. la racine est toujours UID zéro.
Mais je ne veux pas savoir si l'utilisateur actuel est l'utilisateur "root", je veux vérifier si l'utilisateur possède les privilèges du super-utilisateur.
sudo -l listes sudo droits de l'utilisateur courant. Si vous l'exécutez, l'utilisateur doit saisir son mot de passe. Vous pouvez utiliser quelque chose comme expect pour vérifier si l'utilisateur a déjà tapé le mot de passe avant et est actuellement dans un "sudo fenêtre de temps".
Je pense que l'utilisateur ne doit pas entrer son mot de passe pour sudo -l. Je viens de vérifier sur un compte sans droits et la commande n'a pas à demander un mot de passe, mais simplement permis de commandes.
vous n'êtes pas à l'inscription de toutes les complications encore. Juste pour ajouter un peu: dependending sur la config, vous devez être dans le groupe "wheel" pour être autorisé à utiliser su pour devenir root. Cependant, getgid() pourrait être votre ami: si les listes de racine, vous êtes ok, si c'listes de roue, vous pourriez être ok, etc.

OriginalL'auteur Ivan | 2012-07-01