Cette approche est passionnante, bien que non simple ni cadrée en terme 
d'effort à consentir (h, j, s, m ?). 
Car elle invite à considére les internes du système utilisé quotidiennement. 

Mais avant ça, la question me semble être : 
Est-qu'un fichier truc.desktop qui contient 'Terminal=true' et surtout 
'Exec=sudo /usr/local/bin/truc' 
qui déclenche l'appel d'une fenêtre d'un agent de sécurité (lequel attend le 
pwd du sudoer présumé), 
pose ou non un problème de sécurité ? (Vs un 'sudo truc' en CLI, dont je crois 
qu'il fait la même chose) 


De: "Basile Starynkevitch" <[email protected]> 
À: "Liste Debian" <[email protected]> 
Envoyé: Mardi 7 Mars 2023 08:01:30 
Objet: Re: debian 11 - créer une "desktop icon"... simplement 




On 07/03/2023 01:44, [ mailto:[email protected] | [email protected] ] 
wrote: 



----- Mail original -----
De: "hamster" [ mailto:[email protected] | <[email protected]> ] À: "Liste 
Debian" [ mailto:[email protected] | 
<[email protected]> ] Envoyé: Lundi 6 Mars 2023 21:31:25
Objet: Re: debian 11 - créer une "desktop icon"... simplement

Le 06/03/2023 à 17:34, [ mailto:[email protected] | [email protected] ] a 
écrit : 

BQ_BEGIN

Je n'ai pas vraiment mélangé.
J'ai reporté mon expérience selon 2 voies communément relayées sur internet.

*Procédé 1/CLI : *
Je crée un fichier (que je dois saisir avec mes doigts et un clavier) 
que j'enregistre dans ~/Desktop :

$ cat ~/Desktop/test.desktop
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec=/usr/bin/gedit
Name=gedit
Comment=gedit
Icon=/home/test/Desktop/logo.png

SUR LE BUREAU, ou dans une fenête de navigateur (nautilus),
Je clique droit dessus et je choisis ouvrir avec "Create launcher on the 
panel". 



Non non non. Ce fichier EST le launcher, il ne faut donc pas essayer de 
créer un launcher avec. Tu a juste a faire ce fichier et lui donner les 
droits d'execution, pas a faire de clic droit dessus ou autres opérations.

En fait, c'est bien plus simple que ce que tu essaye de faire.

OUI, OUI, OUI ! En effet. 

BQ_BEGIN

J'ai alors une erreur :
"Failed to add a plugin to the panel
GDBus.Error:org.freedesktop.DBus.Error.Service.UNknown: The name 
org.xfce.Panel was not provided by any .service files"
Voir image ci-dessous.

C'est cette commande qui ne s'exécute pas :
$ ps aux | grep xfce
... *xfce4-panel --add=launcher /home/test/Desktop/test.desktop* 

BQ_END

Logique : tu essaye de créer un launcher qui lance… un autre launcher.

Maintenant, c'est clair. Je m'attendais à ce qu'un launcher soit créé
avec l'amorce de définition du fichier .desktop . 

BQ_BEGIN

Il apparaît donc cette commande que j'ignorais et qui me permet à 
présent d'être à 100% en CLI :
'xfce4-panel --add=launcher /home/test/Desktop/test.desktop' 

BQ_END

Je suppose que cette commande marcherait si tu lui passait comme 
paramètre le chemin d'un binaire executable ou d'un script. 

BQ_END





Une possibilité complémentaire (pour faire un "lanceur") qui a besoin des 
privilèges de root, serait de coder un petit programme (soigné, il doit 
vérifier chaque appel système listé dans [ 
https://man7.org/linux/man-pages/man2/syscalls.2.html | 
https://man7.org/linux/man-pages/man2/syscalls.2.html ] ) en C (ou C++) dont le 
binaire serait mis dans /usr/local/bin/ par exemple 





coder avec soin un programme (plutôt minimal) toto.c qui fait les appels 
systèmes détaillés ci-dessous. 


le compiler avec gcc -Wall -Wextra -g -O toto.c -o /tmp/toto.bin et d'autres 
options choisies avec soin, peut-être -I rep h et -L repl et -l biblio où reph 
est un repertoire d'entêtes (peut-être /usr/local/include/ ...) et repl un 
répertoire de bibliothèques (peut-être /usr/local/lib/ ...) qu'on nomme biblio 


le déboguer convenablement (en ligne de commande, et avec [ 
https://man7.org/linux/man-pages/man1/strace.1.html | strace(1) ] et [ 
https://man7.org/linux/man-pages/man1/gdb.1.html | gdb(1) ] ....) et peut-être 
même avec l'aide de [ https://frama-c.com/ | Frama-C ] et d'annotations ACSL 

une fois qu'on est sûr de soi on installe le binaire exécutable avec le 
privilège setuid. 

cp -v /tmp/toto.bin /usr/local/bin/ 

chmod u+s /usr/local/bin/toto.bin 




Les appels systèmes et fonctions significatifs à utiliser avec soin et rigueur 
dans toto.c sont parmi les suivants 

    * [ https://man7.org/linux/man-pages/man2/fork.2.html | fork(2) ] 
    * [ https://man7.org/linux/man-pages/man2/execve.2.html | execve(2) ] 
    * [ https://man7.org/linux/man-pages/man2/pipe.2.html | pipe(2) ] 
    * [ https://man7.org/linux/man-pages/man2/sigaction.2.html | sigaction(2) ] 
    * [ https://man7.org/linux/man-pages/man2/seteuid.2.html | seteuid(2) ] 
    * [ https://man7.org/linux/man-pages/man2/setresuid.2.html | setresuid(2) ] 
    * [ https://man7.org/linux/man-pages/man3/mkfifo.3.html | mkfifo(3) ] 
    * [ https://man7.org/linux/man-pages/man3/atexit.3.html | atexit(3) ] 





et des dizaines d'autres! 




Si on est parano, on ferait peut-être même des exécutables intermédiaires. 




Cordialement 
-- 
Basile Starynkevitch [ mailto:[email protected] | 
<[email protected]> ] (only mine opinions / les opinions sont miennes 
uniquement)
92340 Bourg-la-Reine, France
web page: starynkevitch.net/Basile/ & refpersys.org 

Répondre à