Quelle est la security de sudo lors de l'exécution à partir de la racine pour exécuter une application en tant qu'user less privilégié?

Disons que je suis connecté à un terminal racine et que je lance quelque chose comme la command suivante:

sudo -u '#1000' dbus-launch chromium 
  • Y a-t-il des problèmes de security potentiels dont je devrais m'inquiéter?
  • Y a-t-il un moyen plus sûr de le faire? Avec l'exigence que cela fonctionne avec les applications d'interface graphique, ce qui n'est pas le cas de runuser . Si j'utilise runuser j'ai failed to open display .

Avec cela je peux exécuter des commands de terminal de mon keyboard par des pilotes personnalisés (g15daemon), qui ne peuvent être lancés qu'en tant que root.

sudo

De la page de manuel pertinente:

Les uid et gid réels et efficaces sont configurés pour correspondre à ceux de l'user cible, comme spécifié dans le file passwd.

En outre, dans la description de l'option -P (préserver le vector de groupe) à sudo:

Les ID de groupe réels et effectifs, cependant, sont toujours définis pour correspondre à l'user cible.

En gros, toutes les commands exécutées à l'aide de sudo seront exécutées avec les ID d'user et de groupe effectifs de l'user cible.

Pour répondre à la question "Existe-t-il un moyen plus sûr de le faire" , lorsque je lance sudo en tant qu'user non privilégié, je préfère utiliser l'option -H (HOME) pour "définir la variable d'environnement HOME sur l'homedir de la cible user " . Quelque time dans le passé, j'ai été pris par un comportement inattendu (je ne me souviens plus des détails) que j'ai pu empêcher en ajoutant l'option -H aux scripts shell qui utilisaient sudo.

Vous devriez également vous assurer que les options secure_path et env_reset sont correctement définies dans votre /etc/sudoers . Exécuter sudo -V montre quelles variables d'environnement seront transmises aux commands lancées par sudo et qui ne seront pas accompagnées d'autres informations intéressantes / utiles.

su

Vous pouvez également utiliser su $(id -un 1000) -c 'dbus-launch chromium' pour exécuter Chromium avec l'ID user et l'ID de groupe de l'user # 1000.

Si vous utilisez su pour accomplir la même tâche, vous devez être conscient que (par défaut) su ne définit que les variables d'environnement HOME et SHELL à celles de l'user cible. Dans ce cas (où l'user cible n'est pas privé, c'est-à-dire pas un super-user), USER et LOGNAME sont également définis sur ceux de l'user cible. Les variables d'environnement restantes (telles que PATH ) sont conservées.

Pour éviter de divulguer des données d'environnement aux process non privilégiés exécutés, su doit être exécuté avec l'option --login ou -l pour un shell de connection, par exemple su $(id -un 1000) -lc 'dbus-launch chromium'

La --login toutes les variables d'environnement sauf TERM , puis réinitialise HOME , SHELL , USER et LOGNAME comme indiqué ci-dessus. En outre, le PATH est défini sur une valeur par défaut pré-compilée et le directory de travail en cours est défini sur le directory de base de l'user cible avant d'exécuter le script de connection de l'user cible.

Je préfère généralement sudo sur su en raison de sa capacité de journalisation et son système de billetterie qui évite la nécessité de retaper votre mot de passe dans les 5 minutes de la sudo succès précédemment.