macOS High Sierra : Apple corrige l'énorme faille du compte root

macOS High Sierra : Apple corrige l’énorme faille du compte root

Piratage > Nouvelle partie > Facile

Avatar de l'auteur
Vincent Hermann

Publié dans

Logiciel

29/11/2017 4 minutes
144

macOS High Sierra : Apple corrige l'énorme faille du compte root

Une très importante faille de sécurité existe actuellement dans macOS High Sierra. En passant par le panneau des réglages, il est possible d’obtenir les droits administrateurs sans avoir à entrer le moindre mot de passe. En attendant le correctif promis par Apple, on peut s'en protéger.

Pour une société évoquant régulièrement la sécurité de ses produits et en vantant les mérites sur son site officiel, on peut dire que la découverte fait tache. C’est Lemi Orhan Ergin, développeur chez Iyzico, qui a mis le doigt dessus : en passant par la section « Utilisateurs et groupes » du panneau des Préférences système, on peut court-circuiter la demande de mot de passe et obtenir les droits administrateurs.

Une manipulation très simple, y compris depuis l'écran d'accueil

La faille peut être exploitée de plusieurs manières. La plus simple – et on pourrait dire la plus dangereuse – passe par l'écran de connexion. Si un compte « Autre » est disponible, il suffira alors d'entrer « root » dans la case d'identifiant et de laisser le mot de passe vide. On valide puis on arrive sur un bureau : une session aux droits administrateurs permettant d'accéder aux autres comptes présents sur la machine.

Si « Autres » n'apparaît pas mais que vous arrivez sur une machine où une session est déjà ouverte, vous pourrez également acquérir ces droits. La démarche est on ne peut plus simple :

  • Ouvrir les Préférences puis Utilisateurs et groupes
  • Cliquer sur l’icône de cadenas en bas à gauche de la fenêtre
  • Dans la fenêtre qui surgit, remplacer l’identifiant par root
  • Répéter l’opération dans la nouvelle fenêtre apparue

Emballez, c’est pesé : High Sierra ne bronche pas devant une manipulation aussi grossière. On entend le son caractéristique du cadenas déverrouillé, le système vous faisant signe que les droits administrateur sont activés.

macos high sierra rootmacos high sierra root

La technique permet donc de contourner complètement une demande ordinaire de mot de passe. macOS le réclame normalement pour toute opération un peu « sérieuse », comme la gestion des comptes, l’installation de certains logiciels, etc.

La situation est donc préoccupante, car n’importe quelle personne ayant accès au Mac peut obtenir ces droits et faire ce que bon lui semblera : accéder à des données masquées, installer un malware et ainsi de suite. La faille peut en outre être exploitée à distance via l’écran partagé.

Notez que des utilisateurs évoquaient déjà ces manipulations il y a plusieurs semaines dans les forums officiels d'Apple.

Une seule parade : imposer un mot de passe au compte root

Pour se protéger, il n’existe actuellement qu’une seule solution efficace. Retournez dans Utilisateurs et groupes, puis dans Options. Pour dégriser le panneau, il faudra cliquer sur le cadenas et saisir votre mot de passe (ou passer par l’astuce du root). Cliquez ensuite sur Rejoindre puis sur « Ouvrir Utilitaire d’annuaire ».

Dans ce dernier, il faudra à nouveau déverrouiller le cadenas. Ensuite, il suffira de se rendre dans le menu Edition et de cliquer sur « Modifier le mot de passe root ». Si le compte n’existe pas, il faudra le créer. Suite à quoi toute tentative d’utilisation de root réclamera le mot de passe que vous aurez choisi. Notez que désactiver le compte root ne supprime pas le problème.

macos high sierra rootmacos high sierra root

Apple, de son côté, a pris connaissance du problème. La firme l’a donc reconnu et a indiqué qu’une solution était en préparation. Au vu de la dangerosité du problème et surtout son extrême facilité d’utilisation, on espère que le correctif sera déployé très rapidement. Sur notre machine, la manipulation a en effet fonctionné du premier coup avec trois comptes utilisateur différents. Le problème semble toutefois cantonné à High Sierra, soit la dernière révision de macOS.

On pourra regretter également que Lemi Orhan Ergin ait fait directement part de sa découverte sur Twitter sans en informer Apple discrètement dans un premier temps. La technique s’est de fait répandue comme une trainée de poudre, même si la parade l’a suivie très peu de temps après.

Écrit par Vincent Hermann

Tiens, en parlant de ça :

Sommaire de l'article

Introduction

Une manipulation très simple, y compris depuis l'écran d'accueil

Une seule parade : imposer un mot de passe au compte root

Commentaires (144)


Quelques observations:





  • Ça marche sur toutes les high sierra, de la release jusqu’aux dernières beta

  • Ça a l’air de marcher pour d’autres demandes d’authentification (avec keychain access par exemple)

  • Ça marche aussi sur le panneau de login! Auquel cas on atterrit sur un bureau, en tant que root

  • Ça ne marche pas dans le terminal



    Ce qui m’étonne:



  • Pourquoi c’est pas déjà patché? Le problème est connu depuis hier

  • Pourquoi ça a mis si longtemps à être découvert? High Sierra est public depuis plusieurs mois. C’est le genre de faille qui semble facile à trouver par hasard et sans grandes compétences techniques.




definir le passwd root, première chose à faire lors d’une fresh install pourtant, UNIX rules&nbsp;<img data-src=" />



merci pour l’explication, je l’avais pas compris comme ça sur twitter (login en tant que root)&nbsp;<img data-src=" />



en espérant que le fix désactive pas le compte root …


lol.

Quand on voit la politique d’Apple en matière de sécu, ce style de faille est hallucinant. ^^


Quelqu’un est tombé dessus il y a 15 jours mais personne n’a remarqué :&nbsphttps://forums.developer.apple.com/thread/79235#277225



&nbsp;Je pense que le souci dans “C’est le genre de faille qui semble facile à trouver par hasard et sans grandes compétences techniques”, c’est justement la partie “sans grandes compétences techniques”. L’utilisateur lambda qui tombe dessus se dit “ah cool, il y a une solution de contournement au cas où j’oublie mon password” et ne mesure pas forcément les implications.


Est-ce que cela veut dire que le compte “root” est sans mot de passe par défaut ?



Lorsque l’on démarre un MAC, pour la première fois, il ne demande pas de définir ce mot de passe comme c’est (c’était) le cas sur certains Windows ?








hellmut a écrit :



lol.

Quand on voit la politique d’Apple en matière de sécu, ce style de faille est hallucinant. ^^





En même temps, quand tu vois la faille béante qu’il y avait eu il y a quelques années avec SSL, il n’y a pas de quoi s’étonner.



Cela avait donner du grain à moudre à l’éternel débat “faut-il mettre des accollades pour les blocs de code de 1 ligne ?”.









t1nt1n a écrit :



Pourquoi ça a mis si longtemps à être découvert? High Sierra est public depuis plusieurs mois. C’est le genre de faille qui semble facile à trouver par hasard et sans grandes compétences techniques.



+10

Je ne comprends même pas comment ça a pu tout simplement passer l’étape de l’alpha.

Aucune vérification n’aurait donc été faite?



Si une faille aussi béante arrive à passer inaperçue pendant tout ce temps, je me demande sérieusement combien doivent être encore présentes voire encore plus graves.



Il y a de quoi se méfier quand même.



Une faille aussi béante c’est moche. :o

Après il est quand même bon de se rappeler que l’UAC dans sa configuration par défaut est également bypassable, et ce depuis Windows 7…

https://github.com/hfiref0x/UACME

Testé sous Windows 10 et ça marche, par contre je testerais ça dans une VM. J’ai passé 1-2h à retrouver et effacer les traces laissées par certaines méthodes de bypass qui ont foiré et corrompu des composants de l’OS au passage.


mais le root sans mdp, déja que ça soit faisable c’est pas top du tout…

ça va finir en bloquant le root et en forçant un système à la sudo façons Apple (va bien falloir payer du coup? Rhooo <img data-src=" />)








adrenalinedj a écrit :



En même temps, quand tu vois la faille béante qu’il y avait eu il y a quelques années avec SSL, il n’y a pas de quoi s’étonner.

Cela avait donner du grain à moudre à l’éternel débat “faut-il mettre des accollades pour les blocs de code de 1 ligne ?”.





Ayant commencé à coder en C au 20e siècle, je peux te dire que quand j’ai eu (ou vu) des bugs liés à l’absence initiale d’accolade, j’ai vite décidé de mettre des accolades systématiquement, comme suit, ça ne rajoute qu’une ligne pour l’accolade fermante :





while (i &lt; n) {

_ _ toto[i++] = b;

}



Sinon, j’ai parfois pratiqué la ligne unique, normalement ça ne peut pas générer de bugs :



while (i &lt; n) toto[i++] = b;



éventuellement avec accolades pour être légèrement plus lisible et éviter des bugs en cas d’ajout d’instruction :



while (i &lt; n) { toto[i++] = b; }



PS : y a-t-il moyen de mettre du code en police fixe, un BBCode pour ça ?



Il est quand même drôle que cette faille soit présentée comme une solution dans ce thread, d’autant plus qu’elle a été proposée par des développeurs qui se penchaient sur des problématiques d’identification de comptes. Elle n’a pas été découverte par des personnes&nbsp;&nbsp;“sans grandes compétences techniques”&nbsp;comme tu l’évoques.



Au final, c’est peut-être ça qui fait le plus peur: des “experts” ou “pros” qui voient les problèmes juste devant eux, les étudient, mais qui s’avèrent incapables de reconnaître que&nbsp; c’en est un.

<img data-src=" />








js2082 a écrit :



&nbsp;qu’elle a été proposée par des développeurs qui se penchaient sur des problématiques d’identification de comptes.



Surestimation de l’étiquette “développeurs”.



Mais, les accolades, c’est pas obligatoires?&nbsp;



Je veux dire, je suis système/réseaux, mais pendant mon BTS, j’ai fait un peu de&nbsp; C#, il fallait mettre des accolades.



Peut-être qu’il faut en mettre plus souvent que ne le demande le code?


oops <img data-src=" />








dylem29 a écrit :



Mais, les accolades, c’est pas obligatoires?&nbsp;



Je veux dire, je suis système/réseaux, mais pendant mon BTS, j’ai fait un peu de&nbsp; C#, il fallait mettre des accolades.



Peut-être qu’il faut en mettre plus souvent que ne le demande le code?





Si tu prends le cas du C#, si dans ta boucle ou ta condition, t’as qu’une seule ligne de code, s’est souvent (ça dépend des versions de c# :p) pas obligatoire.



c’est souvent les bugs les plus évidents qui ne sont pas testés.

en général tu penses tellement à chercher la petite bête que tu vois pas la grosse juste à côté.








ndjpoye a écrit :



Surestimation de l’étiquette “développeurs”.





S’pas faux&nbsp;&nbsp;<img data-src=" />&nbsp;

Faut dire aussi que la dénomination “developper forum” induit quelque peu en erreur.



&nbsp;Disons plutôt bidouilleurs, ce serait plus exact.



Quand tu n’as qu’une seule instruction après ta condition, les accolades ne sont pas obligatoires.



if (toto &gt; 0)

&nbsp; toto–;



donnera le même résultat que



if (toto &gt;0){

&nbsp; toto–;

&nbsp;}



En revanche, si tu as plus d’une instruction et que tu ne mets pas d’accolades, seule ta première instruction sera prise en compte dans la condition.


D’expérience, la ligne unique peut aussi générer des bugs <img data-src=" />








DjuL-BzH a écrit :



Quand tu n’as qu’une seule instruction après ta condition, les accolades ne sont pas obligatoires.



if (toto &gt; 0)

&nbsp; toto–;



donnera le même résultat que



if (toto &gt;0){

&nbsp; toto–;

&nbsp;}



En revanche, si tu as plus d’une instruction et que tu ne mets pas d’accolades, seule ta première instruction sera prise en compte dans la condition.





Et c’est ce qui a posé problème dans le cas de la faille SSL chez Apple, il y a quelques années.

Les dévs n’avait pas pour habitude de mettre des accolades pour les blocs d’1 ligne.

Résultat, 1 ligne supplémentaire et elle est exécutée en dehors de la condition donc tout le temps.









OlivierJ a écrit :



Ayant commencé à coder en C au 20e siècle, je peux te dire que quand j’ai eu (ou vu) des bugs liés à l’absence initiale d’accolade, j’ai vite décidé de mettre des accolades systématiquement, comme suit, ça ne rajoute qu’une ligne pour l’accolade fermante :





Sinon, j’ai parfois pratiqué la ligne unique, normalement ça ne peut pas générer de bugs :



éventuellement avec accolades pour être légèrement plus lisible et éviter des bugs en cas d’ajout d’instruction :



PS : y a-t-il moyen de mettre du code en police fixe, un BBCode pour ça ?





Dans mon cas, je n’ai jamais vraiment aimé les blocs sans accolades.

J’ai toujours trouvé que c’était pas très lisible alors j’en met à chaque bloc.

Au moins pour ce type d’erreur, c’est bordé.

(ça n’empêche pas de faire des bétises, non plus…)



les antibiotiques… <img data-src=" />








t1nt1n a écrit :



[list][*]Pourquoi c’est pas déjà patché? Le problème est connu depuis hier







Parce que c’est pas un pauvre site web dont tout le monde se fout… si tu foires ta maj, ce sont des dizaines ou des centaines de millions de machines qui doivent aller au SAV pour une restau.

Faut quand même un minimum de tests…







t1nt1n a écrit :



[*]Pourquoi ça a mis si longtemps à être découvert?







Y’a des failles de plus de 15 ans qui remontent parfois… L’age d’une faille n’est pas important, c’est le temps entre sa découverte et sa résolution qui compte.







Jungledede a écrit :



mais le root sans mdp, déja que ça soit faisable c’est pas top du tout…

ça va finir en bloquant le root et en forçant un système à la sudo façons Apple (va bien falloir payer du coup? Rhooo <img data-src=" />)







Le sudo façon Apple c’est dejà ce qui est en place (d’ailleurs, comme c’est de l’Unix, ils utilisent sudo en vrai). Personne n’utilise root sous macos.



Cette faille est totalement folle. Mais bon, ca arrive a tout le monde de faire des conneries. Faut pas que ça devienne une habitude.









DjuL-BzH a écrit :



Quand tu n’as qu’une seule instruction après ta condition, les accolades ne sont pas obligatoires.



if (toto &gt; 0)

&nbsp; toto–;



donnera le même résultat que



if (toto &gt;0){

&nbsp; toto–;

&nbsp;}



En revanche, si tu as plus d’une instruction et que tu ne mets pas d’accolades, seule ta première instruction sera prise en compte dans la condition.









ndjpoye a écrit :



Si tu prends le cas du C#, si dans ta boucle ou ta condition, t’as qu’une seule ligne de code, s’est souvent (ça dépend des versions de c# :p) pas obligatoire.









psn00ps a écrit :



les antibiotiques… <img data-src=" />





D’accord, j’ai pas tout compris, mais on va dire que les accolades sont plus une hygiènes de programmeur qui permettent d’éviter toutes sorte de bugs. <img data-src=" />&nbsp;









dylem29 a écrit :



D’accord, j’ai pas tout compris, mais on va dire que les accolades sont plus une hygiènes de programmeur qui permettent d’éviter toutes sorte de bugs. <img data-src=" />









Coder les yeux ouvert c’est aussi de l’hygiène <img data-src=" />



Disons qu’un programme est structuré en BLOCs d’instructions.

Un bloc, c’est soit une instruction, soit plusieurs instructions regroupées dans des accolades.



Après un if, le compilo attend un bloc. Si il trouve qu’une instruction sans accolades, c’est son bloc.



Regarde par exemple :



if (true) ;

{ trollerSurNI(); }





Ici, la fonction trollerSurNI() ne sera jamais appelée, parce que mon instruction est vide, c’est le ‘;’



PS : histoire vraie, c’était plutôt dur à trouver comme erreur <img data-src=" />



Tu fais erreur : en l’état ta fonction sera toujours appelée, puisqu’il n’est soumis à aucune condition à cause du point-virgule.








js2082 a écrit :



Je ne comprends même pas comment ça a pu tout simplement passer l’étape de l’alpha.

Aucune vérification n’aurait donc été faite?





Pareil pour celle-là du mois dernier :&nbsp;&nbsphttps://twitter.com/martiano_/status/912733756020191232/photo/1



oh oui !! <img data-src=" /> my bad








OlivierJ a écrit :



[…]







Perso, dès que je peux, je privilégie plutôt les boucle for. Au moins, je sais qu’elle va s’arrêter (si je ne touche pas au compteur) et c’est aussi plus propre (j’ai l’initialisation, le compteur, et la terminaison au même endroit)







dylem29 a écrit :



Mais, les accolades, c’est pas obligatoires? 



Je veux dire, je suis système/réseaux, mais pendant mon BTS, j’ai fait un peu de  C#, il fallait mettre des accolades.



Peut-être qu’il faut en mettre plus souvent que ne le demande le code?





Il faut voir dans l’autre sens, un while, un for, un if…. tout ceci n’agit que sur la prochaine instruction. En utilisant les accolades, tu créer un bloc d’instruction. C’est quelque chose de monobloc, donc ça peut remplacer 1 seul instruction.

Ensuite, ça créer souvent (cela dépend du langage, C, C++, Java… mais pas Python) quelque chose qui pourrait être assimilé à un espace mémoire qui lui est propre (en faite, la pile mémoire revient à son état d’origine à la sortie du bloc, toutes les variable créer dans la pile dans le bloc sont donc “oubliée”).









uzak a écrit :



Disons qu’un programme est structuré en BLOCs d’instructions.

Un bloc, c’est soit une instruction, soit plusieurs instructions regroupées dans des accolades.



Après un if, le compilo attend un bloc. Si il trouve qu’une instruction sans accolades, c’est son bloc.



Regarde par exemple :





Ici, la fonction trollerSurNI() ne sera jamais appelée, parce que mon instruction est vide, c’est le ‘;’



PS : histoire vraie, c’était plutôt dur à trouver comme erreur <img data-src=" />









tazvld a écrit :



Perso, dès que je peux, je privilégie plutôt les boucle for. Au moins, je sais qu’elle va s’arrêter (si je ne touche pas au compteur) et c’est aussi plus propre (j’ai l’initialisation, le compteur, et la terminaison au même endroit)





Il faut voir dans l’autre sens, un while, un for, un if…. tout ceci n’agit que sur la prochaine instruction. En utilisant les accolades, tu créer un bloc d’instruction. C’est quelque chose de monobloc, donc ça peut remplacer 1 seul instruction.

Ensuite, ça créer souvent (cela dépend du langage, C, C++, Java… mais pas Python) quelque chose qui pourrait être assimilé à un espace mémoire qui lui est propre (en faite, la pile mémoire revient à son état d’origine à la sortie du bloc, toutes les variable créer dans la pile dans le bloc sont donc “oubliée”).





Je comprends le principe même si j’ai un peu de mal à l’appréhender. <img data-src=" />&nbsp;



Sous high Sierra après la mise à jour, quand j’ouvrais mon laptop, je voyais mon mot de passe (en petits points) qui se tapait et&nbsp; se loguait automatiquement. Ça s’est arrêté tout seul…



Ça plus le problème des mot de passe en clair (&nbsphttps://www.macg.co/os-x/2017/10/high-sierra-explications-sur-le-bug-de-mot-de-p… )



Ça fait beaucoup !


MacOS est plus secure que Windows ou Linux, pas de problème… <img data-src=" />



Cela dit avec la ligne de commande on peut mettre plus simplement un mot de passe au compte root.


Au passage, je n’ai pas souvenir que le C++ autorise les blocs sans accolades pour les boucles, mais ça fait un bail que je n’en ai pas fait.


Donc pour résumer, si le compte root n’a pas de mot de passe, n’importe qui peut se connecter en tant que root sans saisir de mot de passe. Sans dec’ ?&nbsp; <img data-src=" />


Il n’y a effectivement aucun mot de passe root par défaut.


Et à distance <img data-src=" />








t1nt1n a écrit :



C’est le genre de faille qui semble facile à trouver par hasard et sans grandes compétences techniques.





Les bons numéros au Loto sont tout aussi facile à trouver par hasard et sans grandes compétences techniques, et pourtant, il y a des semaine où aucun des 10 millions de testeurs acharnés n’y arrive.



Joli <img data-src=" />


J’attends toujours une actu sur la faille wpa2, l’ai je manquée ?








GruntZ a écrit :



Les bons numéros au Loto sont tout aussi facile à trouver par hasard et sans grandes compétences techniques, et pourtant, il y a des semaine où aucun des 10 millions de testeurs acharnés n’y arrive.





<img data-src=" />



Je n’hésiterai pas à ressortir cette faille à ceux qui me pompent le chou à dire que chez Apple il n’y a jamais de failles, jamais de malware, rien de rien.

Après, je ne leur jette pas la pierre, Apple et son système de marketo-endoctrinement… Et je suis très étonné qu’ils aient admis la faille, en général même les plus grosses failles font juste l’objet d’une ligne dans un log…

Pardon, je digresse :-)


Je pense que je dois avoir mal compris quelque chose, parce que si la faille, c’est qu’on peut se logger sans mot de passe avec un compte sans mot de passe, c’est pas franchement une grosse découverte <img data-src=" />


Pour les flemmards fenêtrophobes adeptes du clavier, la résolution de la faille peut se faire dans le Terminal :



&gt;&nbsp;sudo passwd root








Winderly a écrit :



J’attends toujours une actu sur la faille wpa2, l’ai je manquée ?







Elle viendra quand la V7 sortira, c’est à dire « bientôt » <img data-src=" />



C’est pas n’importe quel compte, c’est root. Celui qui a accès à tout et a tous les droits par défaut.








guildem a écrit :



C’est pas n’importe quel compte, c’est root. Celui qui a accès à tout et a tous les droits par défaut.





Ça, j’ai bien compris.



A la limite, que le compte puisse être utilisé alors qu’il est désactivé, ok c’est moche, mais si c’est juste qu’aucun mot de passe n’est défini, ça me semble parfaitement normal que l’accès soit autorisé.



Mettre un mot de passe, ou autre méthode d’authentification, c’est la base.









levhieu a écrit :



D’expérience, la ligne unique peut aussi générer des bugs <img data-src=" />





Normalement non, car si je dois ajouter une 2e instruction, visuellement il n’y a pas d’ambigüité, je suis obligé d’ajouter une accolade et une 2e ligne pour la 2e instruction.

Tu as un exemple de bug ?







uzak a écrit :



Ici, la fonction trollerSurNI() ne sera jamais sera toujours appelée, parce que mon instruction est vide, c’est le ‘;’

PS : histoire vraie, c’était plutôt dur à trouver comme erreur <img data-src=" />





En effet, mais je n’ai jamais connu.

Ça ne m’étonnerait pas que depuis, gcc te signale ce genre de chose avec un avertissement. Ces dernières années ils ont rajouté plein de vérifications du genre, avec des messages d’erreurs le plus explicite possible.







le podoclaste a écrit :



Tu fais erreur : en l’état ta fonction sera toujours appelée, puisqu’il n’est soumis à aucune condition à cause du point-virgule.





Tout à fait, en tous cas ça illustrait le problème du point-virgule isolé.







tazvld a écrit :



Perso, dès que je peux, je privilégie plutôt les boucle for. Au moins, je sais qu’elle va s’arrêter (si je ne touche pas au compteur) et c’est aussi plus propre (j’ai l’initialisation, le compteur, et la terminaison au même endroit)





Je fais comme toi, là c’était pour montrer le code le plus compact possible.







le podoclaste a écrit :



Au passage, je n’ai pas souvenir que le C++ autorise les blocs sans accolades pour les boucles, mais ça fait un bail que je n’en ai pas fait.





Ça ne m’évoque rien ; pour moi le C++ a repris le C sans changer ce genre de chose.









GruntZ a écrit :



Les bons numéros au Loto sont tout aussi facile à trouver par hasard et sans grandes compétences techniques, et pourtant, il y a des semaine où aucun des 10 millions de testeurs acharnés n’y arrive.





Joli <img data-src=" />



Oui ok, mais quand tu installes un Linux, on va te demander ton mot de passe root, puis te demander de créer un utilisateur + mot de passe. Si tu met un mot de passe vide (quand la distribution l’accepte), bah c’est pour ta pomme, et tant pis.

Là quand tu installes un mac (enfin, quand tu démarres pour la première fois un mac, la plupart du temps), on te demandes juste de configurer ton utilisateur + mot de passe, c’est tout, jamais on te demande de mettre un mot de passe à root (les utilisateurs lambda te demanderont même de quelle “route” on leur parle ?), et la procédure graphique pour en mettre un est plus que complexe pour le lambda (les rares qui auront compris le problème).



Bref, c’est un réel bug là. La non désactivation de root, avec un mot de passe vide.








guildem a écrit :



Oui ok, mais quand tu installes un Linux, on va te demander ton mot de passe root, puis te demander de créer un utilisateur + mot de passe. Si tu met un mot de passe vide (quand la distribution l’accepte), bah c’est pour ta pomme, et tant pis.

Là quand tu installes un mac (enfin, quand tu démarres pour la première fois un mac, la plupart du temps), on te demandes juste de configurer ton utilisateur + mot de passe, c’est tout, jamais on te demande de mettre un mot de passe à root (les utilisateurs lambda te demanderont même de quelle “route” on leur parle ?), et la procédure graphique pour en mettre un est plus que complexe pour le lambda (les rares qui auront compris le problème).



Bref, c’est un réel bug là. La non désactivation de root, avec un mot de passe vide.





Ok, je comprend mieux, merci <img data-src=" />



J’ai jamais eu de matos Apple, donc ça me semblait assez risible comme faille. Bon, c’est toujours risible, mais pour d’autres raisons <img data-src=" />

Quitte à simplifier, plutôt que ne rien demander, autant demander un mot de passe “administrateur” obligatoire.



Repetez apres moi : Apple n’a jamais de faille, Apple n’a jamais de faille, Apple n’a jamais de faille…



Sinon la police de la bienpensance ou des fans boys en furie pourraient bien débarquer chez vous pour tout saccager!


mec stp, ça serait quand même cool que tu participes quand t’as des connaissances sur le suejet, parce que là tu dis vraiment n’importe quoi.

Et root n’est pas propore à MacOS mais c’est sur du Unix en général. Et c’est une grave faille, c’est pas trop risible.



Et pour info, ta réponse prouve que t’as toujours rien compris à ce que représente l’utilisateur root sur ce genre d’OS. tu devrais aller lire un peu ;)


Bah, sur les anciens macos, le bug n’y est pas, et même si techniquement le root n’a pas de mot de passe, il est aussi désactivé, et donc la procédure détaillée dans l’article ne donne rien d’autre qu’un refus pur et dur. Il a vraiment été introduit dans high sierra, sans aucun réel ajout nul part pour l’utilisateur.



Le truc marrant sur high sierra, c’est que si dans la fenêtre d’authentification, tu met “root” et un mot de passe vide, tu vas être authentifié en root si tu appuies sur la touche entrée, mais l’authentification va être refusée si tu cliques sur le bouton “Authentifier” avec la souris :)


Sous Mac OS, comme sous Ubuntu me semble-t-il, le compte root est désactivé par défaut. Il n’y a normalement pas de moyen de se loguer en root en dehors de cette faille, donc pas de nécessité de mot de passe. On donne les droits d’administrateur à l’utilisateur par défaut et il faut utiliser la commande sudo pour utiliser les fonctionnalités réservé au root (en dehors de la ligne de commande, si une application a besoin de privilèges plus hauts que celle de l’utilisateur en cours, un prompt de saisie de mot de passe apparaît, comme avec l’UAC de Windows).








Glyphe a écrit :



mec stp, ça serait quand même cool que tu participes quand t’as des connaissances sur le suejet, parce que là tu dis vraiment n’importe quoi.





Mec, ce serait quand même cool que tu évites les commentaires qui n’apportent strictement rien hormis te la péter en présupposant que les autres sont des ignorants.







Glyphe a écrit :



Et root n’est pas propore à MacOS mais c’est sur du Unix en général.





Merci mais j’ai jamais dit le contraire.







Glyphe a écrit :



Et c’est une grave faille, c’est pas trop risible.





Edgy/20







Glyphe a écrit :



Et pour info, ta réponse prouve que t’as toujours rien compris à ce que représente l’utilisateur root sur ce genre d’OS. tu devrais aller lire un peu ;)





Pour info, j’ai Linux chez moi depuis plus de 10 ans, je sais parfaitement ce qu’est un compte root. Tu devrais mettre un peu de pommade ;)



Non, pas d’exemple à montrer, car quelques employeurs en arrière.



Cela étant, c’était effectivement la création d’un if(condition); ce que effectivement gcc signale maintenant.








guildem a écrit :



Bah, sur les anciens macos, le bug n’y est pas, et même si techniquement le root n’a pas de mot de passe, il est aussi désactivé, et donc la procédure détaillée dans l’article ne donne rien d’autre qu’un refus pur et dur. Il a vraiment été introduit dans high sierra, sans aucun réel ajout nul part pour l’utilisateur.



Le truc marrant sur high sierra, c’est que si dans la fenêtre d’authentification, tu met “root” et un mot de passe vide, tu vas être authentifié en root si tu appuies sur la touche entrée, mais l’authentification va être refusée si tu cliques sur le bouton “Authentifier” avec la souris :)









le podoclaste a écrit :



Sous Mac OS, comme sous Ubuntu me semble-t-il, le compte root est désactivé par défaut. Il n’y a normalement pas de moyen de se loguer en root en dehors de cette faille, donc pas de nécessité de mot de passe. On donne les droits d’administrateur à l’utilisateur par défaut et il faut utiliser la commande sudo pour utiliser les fonctionnalités réservé au root (en dehors de la ligne de commande, si une application a besoin de privilèges plus hauts que celle de l’utilisateur en cours, un prompt de saisie de mot de passe apparaît, comme avec l’UAC de Windows).





Merci pour les précision <img data-src=" />



Effectivement, c’est pareil sur pas mal de distro Linux.



Ha ben je dois trainer depuis trop d’années sur ArchLinux alors… Je ne savais même pas que les autres distros désactivaient le compte root par défaut&nbsp;<img data-src=" />


Répète après moi: j’ai utilisé le mot pomme tout à fait par hasard <img data-src=" />


Testé au bureau fonctionne parfaitement, cependant j’ai plusieurs machine avec le bouton “Autre” ou “Other” manquant sur l’écran de login comment on fait pour l’afficher sans activer le compte guest ? es que en démarrant en mode avec une combinaison de touche on a accès à ce menu ?


Désactiver le compte root via le terminal fonctionne apparement. Et c’est plus sur que de le laisser activé :

“dsenableroot -d -u root”


ouuuuuuuuuuupppss&nbsp;<img data-src=" />








guildem a écrit :



Ha ben je dois trainer depuis trop d’années sur ArchLinux alors… Je ne savais même pas que les autres distros désactivaient le compte root par défaut <img data-src=" />





Je suis sous manjaro (donc Arch), et j’ai un compte root.



Par “pas mal de distros”, je voulais dire Ubuntu et ses dérivées (c’était comme ça sous Mint), et ça dépend des installeurs.

Après, ça fait un bail que j’ai pas fait de nouvelle installation. Ma manjaro tourne depuis un moment.



Bah j’en installe régulièrement pour tester (sous qemu, avec les nouveautés d’accélération gpu de vfio, c’est top), mais j’ai jamais été vérifier si le compte root était désactivé… Du coup j’en profiterai pour regarder une prochaine fois.


C’est la nostalgie du login des Windows 9x que si tu avais oulier le mot de passe tu appuyait sur echap pour logguer le dernier user (ou user par défaut je sais plus, mais ça marchait bien au bahut à l’époque <img data-src=" />)


Whaou !

J’ai dû m’y reprendre à 2 fois (enfin, 4x <img data-src=" />) pour bypasser l’élévation de droits sur ma VM HighSierra avec le root. <img data-src=" />

Pendant un moment, je me suis dis : C’est pas possible, y’a que chez moi que ça foire… <img data-src=" />

Mais non, tout va bien, c’est pareil ! <img data-src=" />








ActionFighter a écrit :



Je pense que je dois avoir mal compris quelque chose, parce que si la faille, c’est qu’on peut se logger sans mot de passe avec un compte sans mot de passe, c’est pas franchement une grosse découverte <img data-src=" />





Un compte root sans mot de passe ne veut pas dire que l’on peut se logger root sans mot de passe, au contraire.



Par exemple, les ubuntu sont sans mot de passe root par défaut et s’appuient sur sudo pour l’administration.



extrait du man de shadow :



Si le champ du mot de passe contient une chaîne qui ne peut pas



        être un résultat valable de crypt(3), par exemple si elle contient   

les caractères ! ou *, alors l'utilisateur ne pourra pas utiliser

son mot de passe UNIX pour se connecter (mais il se peut que

l'utilisateur puisse se connecter au système par d'autres moyens).






        Ce champ peut être vide. Dans ce cas aucun mot de passe n'est   

nécessaire pour s'authentifier avec l'identifiant de connexion

indiqué. Cependant, certaines applications qui lisent le fichier

/etc/shadow peuvent n'autoriser aucun accès si le mot de passe est

vide.





Et comme l’utilisation du terminal ne permet pas d’avoir un accès root, ils ont bien dû mettre une * dans le champ.







guildem a écrit :



Oui ok, mais quand tu installes un Linux, on va te demander ton mot de passe root, puis te demander de créer un utilisateur + mot de passe. Si tu met un mot de passe vide (quand la distribution l’accepte), bah c’est pour ta pomme, et tant pis.

Là quand tu installes un mac (enfin, quand tu démarres pour la première fois un mac, la plupart du temps), on te demandes juste de configurer ton utilisateur + mot de passe, c’est tout, jamais on te demande de mettre un mot de passe à root (les utilisateurs lambda te demanderont même de quelle “route” on leur parle ?), et la procédure graphique pour en mettre un est plus que complexe pour le lambda (les rares qui auront compris le problème).



Bref, c’est un réel bug là. La non désactivation de root, avec un mot de passe vide.







Cela dépend des Linux, comme je le dis juste au dessus. Sur Ubuntu, c’est comme sur Mac, on ne te demande de configurer qu’un compte utilisateur. Cela n’empêche pas que le compte root n’est pas accessible.



Pour bien comprendre la programmation, dans sa partie fondamentale, il faudrait avoir des notions d’assembleur et de compilation pour comprendre tout ce qu’implique la gestion de la mémoire (la pile et le tas), un appel de fonction (la mise sur la pile des paramètres)… Ca permet ainsi de comprendre par exemple les notion de portée de variables que l’on retrouve dans bon nombre de langage mais aussi, ce qu’implique la création d’un bloc d’instruction a niveau de la mémoire (la pile dans ce cas). Après, tous les langage ne gèrent pas la mémoire de la même manière et les langages de haut niveau, comme python ou R, vont être très différents (a priori pour ces 2 là, les variables sont gérées dans des sortes de dictionnaires incluant la notion de portée)



Il faut aussi de notion de “grammaire”. C’est en quelque sorte la formalisation de toutes les structures d’un langage. Par exemple ça va dire comment on écrit un valeur numérique







C#_Decimal-digits a écrit :



decimal-digits:

__decimal-digit

__decimal-digits decimal-digit

decimal-digit: one of

__0 1 2 3 4 5 6 7 8 9





(tu remarqueras l’appel récursif dans decimal-digits : decimal-digits decimal-digit)

A des structures comme la boucle for :





C#_for statement a écrit :



for-statement:

__for ( for-initializeropt ; for-conditionopt ; for-iteratoropt ) embedded-statement

for-initializer:

__local-variable-declaration

__statement-expression-list

for-condition:

__boolean-expression

for-iterator:

__statement-expression-list

statement-expression-list:

__statement-expression

__statement-expression-list , statement-expression



embedded-statement:

__block

__empty-statement

__expression-statement

__selection-statement

__iteration-statement

__jump-statement

__try-statement

__checked-statement

__unchecked-statement

__lock-statement

__using-statement

__yield-statement





Ainsi, par exemple, ici, tu peux lire que dans la partie “initialisation” et “iteration” d’un for, tu peux mettre plusieurs expressions en les séparant d’une virgules (statement-expression-list)



(j’ai récupéré ça de la doc officiel de C# :https://www.microsoft.com/en-us/download/details.aspx?id=7029 , section B Grammar)









fred42 a écrit :



Cela dépend des Linux, comme je le dis juste au dessus. Sur Ubuntu, c’est comme sur Mac, on ne te demande de configurer qu’un compte utilisateur. Cela n’empêche pas que le compte root n’est pas accessible.





Oui tout à fait. Ça a été précisé par le podoclaste un peu plus haut. Je n’avais pas connaissance de cette configuration par défaut sur ces distributions là, c’est une bonne chose je pense quand on est sur des distributions préconfigurées.



Oui, j’ai vu, le temps que je commente, il y a eu plein d’échanges.

Ah les news Apple, ça fait causer !


<img data-src=" />





euh, non en fait je cherchais :

<img data-src=" />








fred42 a écrit :



Un compte root sans mot de passe ne veut pas dire que l’on peut se logger root sans mot de passe, au contraire.



Par exemple, les ubuntu sont sans mot de passe root par défaut et s’appuient sur sudo pour l’administration.



extrait du man de shadow :



Si le champ du mot de passe contient une chaîne qui ne peut pas



        être un résultat valable de crypt(3), par exemple si elle contient   

les caractères ! ou *, alors l'utilisateur ne pourra pas utiliser

son mot de passe UNIX pour se connecter (mais il se peut que

l'utilisateur puisse se connecter au système par d'autres moyens).






        Ce champ peut être vide. Dans ce cas aucun mot de passe n'est   

nécessaire pour s'authentifier avec l'identifiant de connexion

indiqué. Cependant, certaines applications qui lisent le fichier

/etc/shadow peuvent n'autoriser aucun accès si le mot de passe est

vide.





Et comme l’utilisation du terminal ne permet pas d’avoir un accès root, ils ont bien dû mettre une * dans le champ.





Dans ton exemple, le root est désactivé, et le user administrateur fait partie du groupe “root”.



Mais si tu actives un compte root sans mot de passe, tu peux (même si dans les faits la plupart des distros empêchent par défaut ce fonctionnement), te logger root sans mot de passe.



edit : d’ailleurs, en faisant une recherche google, c’est fou le nombre d’inconscients qui cherchent à se logguer root sans mot de passe. Y compris sur des serveurs distants…



Pitoyable.








Drepanocytose a écrit :



Pitoyable.





Ça arrive même aux meilleurs.



Comme la faille sur CryptSetup qui permettait d’avoir un accès root en appuyant je ne sais plus combien de fois sur entrée sans rentrer de mot de passe LUKS <img data-src=" />









le podoclaste a écrit :



Sous Mac OS, comme sous Ubuntu me semble-t-il, le compte root est désactivé par défaut. Il n’y a normalement pas de moyen de se loguer en root en dehors de cette faille, donc pas de nécessité de mot de passe.









ActionFighter a écrit :



Merci pour les précision <img data-src=" />

Effectivement, c’est pareil sur pas mal de distro Linux.









guildem a écrit :



Ha ben je dois trainer depuis trop d’années sur ArchLinux alors… Je ne savais même pas que les autres distros désactivaient le compte root par défaut <img data-src=" />





Heu non, sur Ubuntu, on peut se connecter en root, ou du moins travailler directement en root, par exemple avec “sudo su -” (sorte de pléonasme original quand on a pratiqué depuis les années 90 le plus simple “su -” avec entrée du mot de passe root, donc là c’est pareil avec une 2e couche de “sudo”).

Dès que j’ai plusieurs commandes privilégiées à exécuter, je passe root dans un terminal c’est plus simple (et c’est comme ça qu’on bosse encore en admin dans la majeure partie des cas, ce qui me semble normal).







fred42 a écrit :



Par exemple, les ubuntu sont sans mot de passe root par défaut et s’appuient sur sudo pour l’administration. […]

Et comme l’utilisation du terminal ne permet pas d’avoir un accès root, ils ont bien dû mettre une * dans le champ.





De mon côté pour Ubuntu j’avais pensé que le compte root dispose du même mot de passe que le compte utilisateur (quand on installe la distro), mais que le login direct en root est désactivé.









OlivierJ a écrit :



Heu non, sur Ubuntu, on peut se connecter en root, ou du moins travailler directement en root, par exemple avec “sudo su -” (sorte de pléonasme original quand on a pratiqué depuis les années 90 le plus simple “su -” avec entrée du mot de passe root, donc là c’est pareil avec une 2e couche de “sudo”).

Dès que j’ai plusieurs commandes privilégiées à exécuter, je passe root dans un terminal c’est plus simple (et c’est comme ça qu’on bosse encore en admin dans la majeure partie des cas, ce qui me semble normal).





Tu travailles avec les mêmes privilèges, mais ce n’est pas le user root en lui-même, qui est désactivé :

http://www.generation-linux.fr/?post/2009/03/24/Cours-Linux-%3A-sudo



C’est d’ailleurs pour cela que tu passes par “sudo su -u” qui va aller vérifier que ton user fait partie des administrateurs et qui te configure ton shell comme si tu étais avec le user root, et non simplement “su -”, qui lui te logge par défaut avec le user root.









ActionFighter a écrit :



Tu travailles avec les mêmes privilèges, mais ce n’est pas le user root en lui-même, qui est désactivé :

http://www.generation-linux.fr/?post/2009/03/24/Cours-Linux-%3A-sudo





On joue sur les mots là, on apparaît logué comme root.







ActionFighter a écrit :



C’est d’ailleurs pour cela que tu passes par “sudo su -u” qui va aller vérifier que ton user fait partie des administrateurs et qui te configure ton shell comme si tu étais avec le user root, et non simplement “su -”, qui lui te logge par défaut avec le user root.





En fait je tape “su -” justement, avec “sudo” devant pour que ça marche sur Ubuntu.

Je me retrouve logué exactement comme si le login en root était possible (HOME=/root et exécution des fichiers de profil de “/root”, comme les “.bash_aliases”).









OlivierJ a écrit :



On joue sur les mots là, on apparaît logué comme root.



En fait je tape “su -” justement, avec “sudo” devant pour que ça marche sur Ubuntu.

Je me retrouve logué exactement comme si le login en root était possible (HOME=/root et exécution des fichiers de profil de “/root”, comme les “.bash_aliases”).





Ça peut paraître “jouer sur les mots”, mais ce sont deux choses différentes, avec à la fin un résultat qui paraît similaire si tu es le seul user de ton poste.



Tu n’est pas logué avec le user root, mais tu en as les privilèges et les variables d’environnement qui correspondent.

Ça permet d’avoir plusieurs comptes administrateurs (qui peuvent avoir des privilèges d’administration différents) avec des mots de passes différents, plutôt qu’un compte unique qui peut tout faire, avec un mot de passe partagé.



“et qui te configure ton shell comme si tu étais avec le user root” –&gt; non, tu ES root


Tu fais partie du groupe Root mais tu n’est pas logué avec le user root qui est désactivé :

https://doc.ubuntu-fr.org/root








OlivierJ a écrit :



On joue sur les mots là, on apparaît logué comme root.





En fait je tape “su -” justement, avec “sudo” devant pour que ça marche sur Ubuntu.

Je me retrouve logué exactement comme si le login en root était possible (HOME=/root et exécution des fichiers de profil de “/root”, comme les “.bash_aliases”).





Tu es sûr d’être en UID=0 ?









OlivierJ a écrit :



Heu non, sur Ubuntu, on peut se connecter en root, ou du moins travailler directement en root, par exemple avec “sudo su -” (sorte de pléonasme original quand on a pratiqué depuis les années 90 le plus simple “su -” avec entrée du mot de passe root, donc là c’est pareil avec une 2e couche de “sudo”).

Dès que j’ai plusieurs commandes privilégiées à exécuter, je passe root dans un terminal c’est plus simple (et c’est comme ça qu’on bosse encore en admin dans la majeure partie des cas, ce qui me semble normal).







Pour passe en shell avec droits root :

sudo -s

est plus dans l’esprit.



MAis à utiliser avec précautions, c’est comme cela qu’on fait des conneries. <img data-src=" />



De mon côté pour Ubuntu j’avais pensé que le compte root dispose du même mot de passe que le compte utilisateur (quand on installe la distro), mais que le login direct en root est désactivé.





Et non, root n’a pas de mot de passe (* dans le champ passwd de /etc/shadow)









fred42 a écrit :



Un compte root sans mot de passe ne veut pas dire que l’on peut se logger root sans mot de passe, au contraire.





On parle de MacOS, pas d’une distribution Linux.

C’est ce que permet cette faille.









ActionFighter a écrit :



Ça peut paraître “jouer sur les mots”, mais ce sont deux choses différentes, avec à la fin un résultat qui paraît similaire si tu es le seul user de ton poste.





Pas “qui paraît similaire”, identique.





ActionFighter a écrit :



Tu n’est pas logué avec le user root, mais tu en as les privilèges et les variables d’environnement qui correspondent.





En fait tu es logué en root, tu n’as aucun moyen de voir une différence. Je n’utilise Ubuntu et ce système que depuis 2012 environ, avant je me loguais en root avec “su -” et en tapant le mot de passe.







ActionFighter a écrit :



Ça permet d’avoir plusieurs comptes administrateurs (qui peuvent avoir des privilèges d’administration différents) avec des mots de passes différents, plutôt qu’un compte unique qui peut tout faire, avec un mot de passe partagé.





Sous Linux ? T’es sûr ?







Tsunoo92 a écrit :



“et qui te configure ton shell comme si tu étais avec le user root” –&gt; non, tu ES root





On est d’accord.







ActionFighter a écrit :



Tu fais partie du groupe Root mais tu n’est pas logué avec le user root qui est désactivé :

https://doc.ubuntu-fr.org/root





Non, le login classique est désactivé.







guildem a écrit :



Tu es sûr d’être en UID=0 ?





Évidemment ; quel ID voudrais-tu que j’aie ?







fred42 a écrit :



Pour passe en shell avec droits root :

sudo -s

est plus dans l’esprit.





En fait, à la place de “sudo su -” que j’utilise sous Ubuntu, je devrais faire “sudo -i” (i pour simulate initial login), qui en est l’équivalent ; la commande historique “su -” est un raccourci pour “su -l”/“su -login”.

Du coup je vais enfin passer au “sudo -i”, après tant d’années. <img data-src=" />

(ça me fait 2 caractères en moins à taper, je vais gagner un temps fou ;-) ;-) )







fred42 a écrit :



Et non, root n’a pas de mot de passe (* dans le champ passwd de /etc/shadow)





A vrai dire, je n’avais jamais vérifié.









OlivierJ a écrit :



En fait tu es logué en root, tu n’as aucun moyen de voir une différence. Je n’utilise Ubuntu et ce système que depuis 2012 environ, avant je me loguais en root avec “su -” et en tapant le mot de passe.





En fait, tu as au moins un moyen de voir la différence :



root n’apparaît pas dans les utilisateurs loggés quand tu utilises la commande users ou who

Mais du point de vue de ton shell, c’est effectivement pareil.



Bon, on va arrêter de polluer l’article sur macOS. Mais bon, vu le peu d’infos qu’on avait, il fallait bien parler d’autre chose. <img data-src=" />









Tsunoo92 a écrit :



“et qui te configure ton shell comme si tu étais avec le user root” –&gt; non, tu ES root









OlivierJ a écrit :



Pas “qui paraît similaire”, identique.



En fait tu es logué en root, tu n’as aucun moyen de voir une différence. Je n’utilise Ubuntu et ce système que depuis 2012 environ, avant je me loguais en root avec “su -” et en tapant le mot de passe.





Je viens de vérifier chez moi, c’est vous qui aviez raison.



Je pensais que le compte était totalement désactivé, mais sudo permet justement d’utiliser su en superutilisateur, et donc de se loguer sous l’utilisateur root.



Mea culpa donc.







fred42 a écrit :



En fait, tu as au moins un moyen de voir la différence :



root n’apparaît pas dans les utilisateurs loggés quand tu utilises la commande users ou who

Mais du point de vue de ton shell, c’est effectivement pareil.





Oui, mais un whoami te renvoie “root”.







fred42 a écrit :



Bon, on va arrêter de polluer l’article sur macOS. Mais bon, vu le peu d’infos qu’on avait, il fallait bien parler d’autre chose. <img data-src=" />





<img data-src=" />









levhieu a écrit :



D’expérience, la ligne unique peut aussi générer des bugs <img data-src=" />







Il fut un temps ou les programmeurs relisaient vraiment le code qu’ils écrivaient. Et ils testaient soigneusement et systématiquement toutes les conditions d’erreurs.



Il faut dire qu’en ce temps la, les moyens de mises à jour étaient quasiment inexistants. Et il n’était pas rare de voir des programmes gravés en usine dans des ROM non modifiables. Une simple erreur pouvait coûter très cher car il fallait refaire les masques de fabrication, produire de nouvelles ROM et enfin les faire installer en SAV dans les équipements.



Mais c’était surtout le temps ou l’on donnait aux informaticien le salaire et le temps nécessaire pour faire un travail de qualité.



La rigueur, c’est du temps, donc de l’argent. Aujourd’hui, le monde de l’informatique travaille en mode productivité et les programmeurs ressemblent plutôt à des poulets en batterie.



Comme on dit, on récolte ce que l’on sème…









adrenalinedj a écrit :



En même temps, quand tu vois la faille béante qu’il y avait eu il y a quelques années avec SSL, il n’y a pas de quoi s’étonner.



Cela avait donner du grain à moudre à l’éternel débat “faut-il mettre des accollades pour les blocs de code de 1 ligne ?”.







Il faut savoir qu’en C/C++, la mise en forme du code est très importante.



Si le code est mis en forme correctement, les erreur de ce genre sautent facilement aux yeux.



Malheureusement, la façon dont on apprends aujourd’hui aux jeunes programmeurs à présenter le code n’est à mon humble opinion pas la meilleure.









fred42 a écrit :



En fait, tu as au moins un moyen de voir la différence :



root n’apparaît pas dans les utilisateurs loggés quand tu utilises la commande users ou who

Mais du point de vue de ton shell, c’est effectivement pareil.





Ah oui, bonne remarque.







ActionFighter a écrit :



Je pensais que le compte était totalement désactivé, mais sudo permet justement d’utiliser su en superutilisateur, et donc de se loguer sous l’utilisateur root.





En fait, plutôt que l’original “sudo su -”, c’est tout simplement “sudo -i” qu’il faut taper (my bad).







ActionFighter a écrit :



Oui, mais un whoami te renvoie “root”.





Bonne remarque, je n’avais essayé que “w” et “who”, comme quoi :-) .

(“who am i” renvoie la même chose que “who”, fort logiquement).

Sinon, “id” renvoie bien “root” aussi.







sr17 a écrit :



Il fut un temps ou les programmeurs relisaient vraiment le code qu’ils écrivaient. Et ils testaient soigneusement et systématiquement toutes les conditions d’erreurs.

[…]

Mais c’était surtout le temps ou l’on donnait aux informaticien le salaire et le temps nécessaire pour faire un travail de qualité.

La rigueur, c’est du temps, donc de l’argent. Aujourd’hui, le monde de l’informatique travaille en mode productivité et les programmeurs ressemblent plutôt à des poulets en batterie.

Comme on dit, on récolte ce que l’on sème…





C’est marrant, j’entendais déjà ça à la fin des années 90. <img data-src=" />



Et en fait ça dépend des boîtes : j’ai bossé en 2007 dans une grande SSII qui développait un logiciel Web pour le ministère de l’agriculture, les choses étaient faites correctement, en particulier les tests, qui étaient menés par une équipe dédiée et qui trouvait des bugs (alors qu’en ce qui me concerne j’avais déjà pas mal testé).









OlivierJ a écrit :



C’est marrant, j’entendais déjà ça à la fin des années 90. <img data-src=" />







Pas étonnant, à cette période la, c’était déjà du grand n’importe quoi.





Et en fait ça dépend des boîtes : j’ai bossé en 2007 dans une grande SSII qui développait un logiciel Web pour le ministère de l’agriculture, les choses étaient faites correctement, en particulier les tests, qui étaient menés par une équipe dédiée et qui trouvait des bugs (alors qu’en ce qui me concerne j’avais déjà pas mal testé).





C’est malheureusement plutôt l’exception que la règle, même en 2007. Et depuis, de l’eau à coulé sous les ponts. La “mondialisation” est passée par la…




Mise à jour dispo.


Cette faille à déjà un statut culte.


« Nous regrettons profondément cette erreur et présentons nos excuses aux utilisateurs de Mac, pour la sortie d’une version boguée et pour les soucis causés. Nos clients méritent mieux. Nous procédons à un audit de nos processus de développement pour empêcher une telle erreur de se reproduire ».



C’est beau <img data-src=" />

Ça m’a presque tiré une larme.

Ils sont nominés aux Oscars ou pas ?








OlivierJ a écrit :



Normalement non, car si je dois ajouter une 2e instruction, visuellement il n’y a pas d’ambigüité, je suis obligé d’ajouter une accolade et une 2e ligne pour la 2e instruction. &nbsp;



&nbsp;

if (testalakon)

&nbsp;&nbsp; instruction1, instruction2;

&nbsp;



Vu qu’OSX est devenu un concentré de bugs, qui s’accumulent de version en version, ce serait bien qu’ils notent ça en gras sur tous les murs de l’Apple Park…


Dur d’augmenter la qualité. Par contre pour les prix c’est plus facile


Cent déconner. <img data-src=" />








sr17 a écrit :



Pas étonnant, à cette période la, c’était déjà du grand n’importe quoi.





Eh bien non, car ça dépend vraiment des boîtes et des situations. C’était ce que j’expliquais, et j’avais des ainés pour me le confirmer.







heret a écrit :



if (testalakon)

   instruction1, instruction2;





On n’est plus en mono-ligne là.

Exemple qui ne marche pas, et en plus on ne met pas 2 instructions sur la même ligne (ou c’est bien rare).









LordZurp a écrit :



definir le passwd root, première chose à faire lors d’une fresh install pourtant, UNIX rules&nbsp;<img data-src=" />




merci pour l'explication, je l'avais pas compris comme ça sur twitter (login en tant que root)&nbsp;<img data-src=">  






en espérant que le fix désactive pas le compte root ...







définir des sudoers

ne jamais être sur le net avec un compte root

etc

mais bon…

il serait aussi bon de pouvoir virer la partoch de recovery, sachant que le resetpassword permet de….réinitialiser le mot de passe root

&nbsp;





OlivierJ a écrit :



Eh bien non, car ça dépend vraiment des boîtes et des situations.

C’était ce que j’expliquais, et j’avais des ainés pour me le confirmer.





On n’est plus en mono-ligne là.

Exemple qui ne marche pas, et en plus on ne met pas 2 instructions sur la même ligne (ou c’est bien rare).



pour faire un usb bootable sisi ^^



Développer des logiciels, c’est un métier. Il ne faut jamais confondre vitesse et précipitation.



Manifestement, ils ont raté les effets de bord de leur patch.

J’étais surpris que leur patch sorte si vite.


C’est plus subtil que ça, puisque tu peux avoir des droits administrateurs avec un simple compte qui théoriquement n’en a pas le privilège. Un peu comme si tu donnais au cambrioleur les clés de ta maison en plus de ton adresse.


ouf, en tant que développeur j’utilise assez souvent le compte root, et l’ai par conséquent verrouillé dès le début, ce qui est la règle. Je pense d’ailleurs que c’est la raison pour laquelle personne ne s’en était aperçu : à moins d’être développeur, qui irait chercher une telle manip ? Notons qu’une faille similaire était sur windows il y a quelques années, il suffisait d’appuyer escape une dizaine de fois lors du logging.








OlivierJ a écrit :



Exemple qui ne marche pas, et en plus on ne met pas 2 instructions sur la même ligne (ou c’est bien rare).







Dis pas ça au participant de la catégorie “best one liner” de l’IOCCC:



main(int c,charv){return!m(v[1],v[2]);}m(chars,chart){returnt-42?s?63==t|s==t&&m(s+1,t+1):!t:m(s,t+1)||*s&&m(s+1,t);}



<img data-src=" />









Ayak973 a écrit :



Dis pas ça au participant de la catégorie “best one liner” de l’IOCCC:



main(int c,charv){return!m(v[1],v[2]);}m(chars,chart){returnt-42?s?63==t|s==t&&m(s+1,t+1):!t:m(s,t+1)||*s&&m(s+1,t);}



<img data-src=" />





Je n’ai pas essayé de compiler pour voir, mais dans la même veine, j’ai déjà vu un bout de code à peine plus long qui te sort un certain nombre de décimales de Pi, genre 100 ou 1000. Je croyais que c’était Fabrice Bellard https://bellard.org/ impressionnant) mais je n’ai pas retrouvé l’info.

Le programme est sur ma machine chez moi, il faudrait que j’aille voir.









tontonCD a écrit :



ouf, en tant que développeur j’utilise assez souvent le compte root, et l’ai par conséquent verrouillé dès le début, ce qui est la règle. Je pense d’ailleurs que c’est la raison pour laquelle personne ne s’en était aperçu : à moins d’être développeur, qui irait chercher une telle manip ? Notons qu’une faille similaire était sur windows il y a quelques années, il suffisait d’appuyer escape une dizaine de fois lors du logging.





sauf que tu peux le déverrouiller à partir de la partition de recovery…









OlivierJ a écrit :



Eh bien non, car ça dépend vraiment des boîtes et des situations. C’était ce que j’expliquais, et j’avais des ainés pour me le confirmer.







Si on veut raisonner sur des cas particulier, il est évident qu’il y a toujours eu des bonnes et des mauvaises boites. Et autant de situations différentes qu’il y a de développeurs.



L’évolution du marché, c’est autre chose. Le développement de haute qualité ne représente aujourd’hui qu’une niche de marché. Le gros du marché est allé vers le low cost et la taylorisation. Et ce n’est pas un hasard, la majorité des clients veulent du “pas cher” avant tout.



Quand aux anciens dont tu parle, il faut remarquer que les entreprises qui emploient aujourd’hui des programmeurs d’âge mûr font partie d’une catégorie très spécifique et vraiment pas représentative de la moyenne. Les boites qui font de la prod low cost préfèrent des codeurs qui pondent vite et ne coûtent pas cher, donc des jeunes.


















L’utilisateur sans grande compétence technique va essayer admin, pas root.








Ayak973 a écrit :



Dis pas ça au participant de la catégorie “best one liner” de l’IOCCC:



main(int c,charv){return!m(v[1],v[2]);}m(chars,chart){returnt-42?s?63==t|s==t&&m(s+1,t+1):!t:m(s,t+1)||*s&&m(s+1,t);}



<img data-src=" />







Ce que je trouve amusant avec le C/C++, c’est de voir qu’il y a toujours une certaine fascination pour la complexité, l’obfuscation et le code illisible.



Et malheureusement, cette fascination donne parfois le sentiment à certains programmeurs que c’est le but à atteindre.



Pourtant, en entreprises, la vraie qualité d’un bon programmeur dans ce langage, c’est au contraire d’écrire le plus clairement possible.



Faire des choses qui soient puissantes, claires et limpides, cela demande souvent plus d’effort et d’expérience. Et pour cela, le C/C++ est aussi un langage fabuleux.









fred42 a écrit :



Développer des logiciels, c’est un métier. Il ne faut jamais confondre vitesse et précipitation.



Manifestement, ils ont raté les effets de bord de leur patch.

J’étais surpris que leur patch sorte si vite.







Ce genre de situation n’est jamais simple à gérer.



Patcher au plus vite, c’est prendre le risque de ne pas avoir bien cerné toutes les conséquences.



Prendre le temps de cerner toutes les conséquences, c’est prendre un risque certain que la faille soit exploitée dans le laps de temps et soit la cause d’un préjudice réel.



Bref, dans ce genre de situation, il n’est pas évident de faire le meilleur choix, sachant que même le programmeur qui fera le meilleur choix n’est pas certain d’éviter pour autant tous les risques.









sr17 a écrit :



Ce que je trouve amusant avec le C/C++, c’est de voir qu’il y a toujours une certaine fascination pour la complexité, l’obfuscation et le code illisible.





C’est normal, c’est amusant, c’est un jeu de l’esprit.







sr17 a écrit :



Et malheureusement, cette fascination donne parfois le sentiment à certains programmeurs que c’est le but à atteindre.





Je n’ai jamais vu quelqu’un me dire ça.







sr17 a écrit :



Pourtant, en entreprises, la vraie qualité d’un bon programmeur dans ce langage, c’est au contraire d’écrire le plus clairement possible.





Ben évidemment…







sr17 a écrit :



Faire des choses qui soient puissantes, claires et limpides, cela demande souvent plus d’effort et d’expérience. Et pour cela, le C/C++ est aussi un langage fabuleux.





Le C pas tellement, et Dieu sait si j’ai aimé faire du C. Le C++ c’est un langage délicat à bien manier du fait de sa puissance (surcharge d’un peu tout par ex), mais on peut coder plus clairement si bien fait.

Pour ma part c’est en passant au Java et en pratiquant professionnellement que j’ai trouvé qu’on fait facilement du code propre et concis, avec le soulagement de ne pas avoir à gérer la mémoire ni les dépassement de tampons (sauf exception).

D’ailleurs au tournant du siècle on disait qu’un code Java étant en moyenne 50 fois moins bugué que du code C++, le C se plaçant bien mieux que le C++.



Tu peux avoir un code de qualité ou de merde avec n’importe quel langage.

Et je ne vois même pas l’intérêt de dire qu’avec tel ou tel langage on peut faire du code de qualité et du coup dénigrer les autres.



Je sais, j’ai eu à gérer ce genre de situation dans un autre domaine logiciel.



Mais jamais on n’a lâché un logiciel en 24h quand il s’agissait de modifier un truc un peu complexe, ne serait-ce que parce qu’il faut faire des tests de non régression.



Et même si je ne connais pas la cause de leur bug, quand je vois à quoi correspond le truc à lancer à la main pour corriger l’effet de la correction, je me dis qu’ils ont été un peu optimistes sur l’absence de régression.



Ils disent qu’ils vont revoir leurs procédures, mais j’ai le sentiment qu’ils se sont assis dessus sur ce coup.



Je suis d’accord avec toi que la faille était très grosse et la divulgation les a mis dans la merde, mais était-on à 24 heures près ? il fallait quand même un accès local à la machine, le cas de l’écran partagé étant assez anecdotique.



Enfin, tu parles “du programmeur”, mais justement, dans ces cas là, il ne faut pas laisser un développeur seul corriger le problème. Il faut qu’il explique la root cause, comment il a corrigé et ensuite se demander quels sont les effets de bords possibles et ce qu’il faut tester pour éviter les régressions, pour ce dernier point, le développeur ne doit pas être seul.








gallean a écrit :



pour faire un usb bootable sisi ^^





Je n’ai pas compris. <img data-src=" />









Cara62 a écrit :



Tu peux avoir un code de qualité ou de merde avec n’importe quel langage.

Et je ne vois même pas l’intérêt de dire qu’avec tel ou tel langage on peut faire du code de qualité et du coup dénigrer les autres.





Et pourtant, il y a des langages qui rendent plus facile pour faire du code correct (au sens qui fonctionne comme souhaité), ça a été étudié (cf mon commentaire sur la question).









OlivierJ a écrit :



Et pourtant, il y a des langages qui rendent plus facile pour faire du code correct (au sens qui fonctionne comme souhaité), ça a été étudié (cf mon commentaire sur la question).







Ok donc, il y a d’autres langages ou pour faire du code “correct” c’est juste plus “difficile”, mais du coup on peut le faire quand même.



On peut faire facilement du code correct avec du C/C++ parce que c’est un langage très stricte ?



Moi c’est simple je suis dev web en PHP, et je sais que tous les autres dev qui utilisent un autre langage, C, Java etc… Crachent sur le PHP, pour eux c’est un langage pourri parce qu’on peut faire que du code dégueulasse etc…. (Souvenir des études toussa toussa)



Hors c’est totalement faux, on peut faire du code de “qualité” en PHP sans soucis.



Par contre oui, contrairement à du C par exemple, comme le PHP est un langage très permissif il est beaucoup plus facile de faire de la m* .

Et encore ça tend à évoluer puisque PHP devient de plus en plus stricte. ;)



De tout façon in fine, c’est nous dev qui avons la responsabilité de faire du code de “qualité”.



Même si, je suis d’accord avec l’un des INpactiens, le problème actuellement, c’est qu’on a même plus le temps nécessaire pour en faire, du code de “qualité”, pour moi ce n’est même plus une histoire que tel ou tel langage c’est le meilleur.









OlivierJ a écrit :



C’est normal, c’est amusant, c’est un jeu de l’esprit.







Certes, mais il est dommage de voir que les amateurs de jeux d’esprit sont plus souvent fascinés par la complexification que par l’inverse.



Croyez moi, ce n’est pas sans effet sur l’esprit des étudiants.





Le C pas tellement, et Dieu sait si j’ai aimé faire du C. Le C++ c’est un langage délicat à bien manier du fait de sa puissance (surcharge d’un peu tout par ex), mais on peut coder plus clairement si bien fait.





Je partage à 100% cela.





Pour ma part c’est en passant au Java et en pratiquant professionnellement que j’ai trouvé qu’on fait facilement du code propre et concis, avec le soulagement de ne pas avoir à gérer la mémoire ni les dépassement de tampons (sauf exception).





Java permet plus facilement d’écrire du code propre au départ. Et ce n’est pas un hasard si la plupart des entreprises ont abandonné C/C++ pour Java.



Cela étant dit, passé un certain niveau, entre de bonnes mains, C++ permet de faire beaucoup mieux que Java.



Mais il est évident que si C/C++ est un langage plus puissant, il requiert aussi plus d’expérience et de temps de travail pour faire de bonnes choses.



C’est la raison pour laquelle on utilise C/C++ pour les logiciels à très forte valeur ajoutée qui doivent être performants et des langages comme Java pour le tout venant que l’on doit d’écrire rapidement tout en préservant la meilleure qualité possible.





D’ailleurs au tournant du siècle on disait qu’un code Java étant en moyenne 50 fois moins bugué que du code C++, le C se plaçant bien mieux que le C++.





De la même manière qu’il sera toujours plus risqué de piloter une Formule 1 sur un circuit que de conduire un utilitaire sur l’autoroute.



Pour ce qui est de la comparaison entre C et C++, je ne suis pas d’accord : Entre de bonnes mains, C++ s’avère beaucoup plus sûr que C. Par exemple, il est bien moins risqué d’utiliser une classe qui gère les chaines de caractère que d’utiliser des buffers et les fonctions de manipulations de chaine du C.

Un bon programmeur en C++ sait encapsuler et factoriser les parties à risque, ce qui peut au final rapprocher de la sécurité d’un langage comme Java.



Mais comme tu parle du “tournant du siècle”, je comprends bien pourquoi. C’est vrai que c’était l’époque ou les compilateur C++ se retrouvaient entre les mains du premier stagiaire venu. Et le résultat n’était logiquement pas beau à voir…









Cara62 a écrit :



Tu peux avoir un code de qualité ou de merde avec n’importe quel langage.







Tout à fait. Mais cela est plus ou moins facile suivant les langages en fonction du niveau du programmeur.





Et je ne vois même pas l’intérêt de dire qu’avec tel ou tel langage on peut faire du code de qualité et du coup dénigrer les autres.





C’est vous qui le comprenez comme cela. Mais ce n’est pas du tout le sens de mon propos.



D’abord, ce n’est pas aussi simple. Par exemple, un langage comme C++ peut être merdique, voir carrément dangereux entre les mains d’un stagiaire, mais fabuleux entre les mains d’un développeur expérimenté.



Par exemple, PHP à causé beaucoup de problèmes entre de mauvaises mains. Et de surcroît, il ne deviendra jamais fabuleux, même avec un bon programmeur. Ce qui ne l’empêche pas d’avoir aussi quelques vertus intéressantes qui méritent d’inspirer.



Ce qui est faux en revanche, c’est de croire que tous les langages se valent dans toutes les situations.



Mais cela ne signifie pas pour autant que le monde se diviserait de manière simpliste entre d’un côté des bons langages et de l’autre, de mauvais langages.



va réviser le C, et en particulier l’usage de la virgule.








Cara62 a écrit :



On peut faire facilement du code correct avec du C/C++ parce que c’est un langage très stricte ?







On peut dire que les langages fortement typés donnent de meilleures habitudes de programmation plus rapidement et permettent également d’éviter beaucoup de problèmes.



Cela ne veut pas dire pour autant que n’importe quel langage fortement typé soit idéal pour tout.



Un chef de projet qui mettra une armée de stagiaire sur du C/C++ risque d’apprendre à courir très vite <img data-src=" />





Hors c’est totalement faux, on peut faire du code de “qualité” en PHP sans soucis.





On peut, c’est juste que le langage n’y incite pas du tout naturellement.



Pour moi, le vrai problème du langage PHP, c’est qu’il cumule beaucoup de défaut. En plus d’être peu rigoureux, il est aussi peu performant.



Donc au final, c’est logique qu’il ne soit pas trop aimé par les programmeurs expérimentés.



Mais cela ne signifie nullement que PHP soit dépourvu de qualité. Ce langage est très accessible et sa bibliothèque possède un très bon rapport simplicité/puissance qui devrait inspirer d’autres langages…





Par contre oui, contrairement à du C par exemple, comme le PHP est un langage très permissif il est beaucoup plus facile de faire de la m* .

Et encore ça tend à évoluer puisque PHP devient de plus en plus stricte. ;)





Logiquement, quand il y a des évolutions, c’est parce qu’il y a des défauts.



Si personne ne critiquait jamais les langages, ils n’évolueraient pas…



Prenez conscience que des langages comme PHP ou Javascript étaient au départ des petits langages qui ont été pensés sur un coin de table.



Mais les évolutions ne rendront pas pour autant tous les langages équivalents. Car il est impossible de concentrer toutes les qualités dans un seul langage pour la simple raison que certaines caractéristiques sont incompatibles.





De tout façon in fine, c’est nous dev qui avons la responsabilité de faire du code de “qualité”.



Même si, je suis d’accord avec l’un des INpactiens, le problème actuellement, c’est qu’on a même plus le temps nécessaire pour en faire, du code de “qualité”, pour moi ce n’est même plus une histoire que tel ou tel langage c’est le meilleur.





Comme pour tous les produits, le budget est d’une influence capitale sur la qualité.



Mais se tromper de langage dans un projet informatique peut se révéler tout aussi néfaste.



C’est pourquoi les critiques qu’on entends sur les langages sont souvent justifiées et utiles.



on peut définir un passwd pour verrouiller le boot (je sais plus comment, mais il m’a demandé mon passwd lors de l’instal&nbsp;<img data-src=" />&nbsp;)








Cara62 a écrit :



On peut faire facilement du code correct avec du C/C++ parce que c’est un langage très stricte ?





Attention, tu mélanges C et C++, alors qu’on les considère bien différemment sur le côté sécurité de codage. Le C étant moins complexe, il est jugé plus sûr ; le C++ est jugé casse-gueule.







Cara62 a écrit :



Moi c’est simple je suis dev web en PHP, et je sais que tous les autres dev qui utilisent un autre langage, C, Java etc… Crachent sur le PHP, pour eux c’est un langage pourri parce qu’on peut faire que du code dégueulasse etc…. (Souvenir des études toussa toussa)





Bien sûr on peut faire du PHP propre, j’en ai fait aussi, mais il faut reconnaître que l’API est souvent peu cohérente, et qu’il y a des pièges, j’ai parfois eu des bugs subtils avec les changements.







Cara62 a écrit :



De tout façon in fine, c’est nous dev qui avons la responsabilité de faire du code de “qualité”.





Bien sûr mais dans l’absolu c’est appréciable quand un langage génère naturellement moins de risques d’erreurs.







sr17 a écrit :



Par exemple, PHP à causé beaucoup de problèmes entre de mauvaises mains. Et de surcroît, il ne deviendra jamais fabuleux, même avec un bon programmeur. Ce qui ne l’empêche pas d’avoir aussi quelques vertus intéressantes qui méritent d’inspirer.





Je n’ai pas suivi l’évolution de PHP depuis 2012, mais ça s’était un peu amélioré je pense.









heret a écrit :



va réviser le C, et en particulier l’usage de la virgule.





Je connais l’opérateur virgule, et je persiste dans ce que je disais dans ma réponse précédente. <img data-src=" />









Cara62 a écrit :



Hors Or c’est totalement faux





<img data-src=" />

Marrant cette erreur, je me permets une réponse juste pour la signaler.

“or” = la conjonction de coordination (et introduit un aspect logique, comme “car”, “donc”, etc. cf “mais où est donc Ornicar ?”)

“hors” = “hormis” / “en dehors” en gros.









sr17 a écrit :



Mais se tromper de langage dans un projet informatique peut se révéler tout aussi néfaste.







Ouep, c’est pas comme si on décidait un jour de coder des services/applications en full javascript… Oh wait ! <img data-src=" />



‘tain les mecs que se prennent la tête sur quel est le langage le plus sur alors que tout le monde sait que c’est le basic. <img data-src=" />








OlivierJ a écrit :



Je connais l’opérateur virgule, et je persiste dans ce que je disais dans ma réponse précédente. <img data-src=" />





Et bien il semblerait que tu l’aies un peu oublié. Une révision ici :https://c.developpez.com/cours/bernard-cassagne/node99.php#SECTION00928000000000… <img data-src=" />



T’es stupide ou quoi ? Je te dis que je sais ce que c’est. <img data-src=" />

J’ai commencé le C à la fin des années 80…

Et ça ne change rien à ce que je disais sur le monoligne pour une instruction conditionnelle.


Cette fois-ci, tu as commencé le C à la fin des années 80, et quelques posts plus haut, tu écris que c’était il y a 25 ans. 2017-25=1992. 1992, ce n’est pas exactement la fin des années 80.

Est-ce que tu comprends ce que tu lis ? Est-ce que tu comprends ce que tu écris ? Sais-tu encore ce que tu fais, ou es-tu déjà atteint par Alzheimer ?

Et puis ton concours de bite, hein, ça devrait t’être passé à ton âge.

&nbsp;








Ayak973 a écrit :



Ouep, c’est pas comme si on décidait un jour de coder des services/applications en full javascript… Oh wait ! <img data-src=" />







Comme si les programmeurs d’applications web avaient vraiment le choix du langage…



On pourra toujours débattre des qualités de tel ou tel langage, mais en revanche, nous devrions être tous d’accord sur le fait qu’il faut combattre tout système qui impose un langage unique sans possibilité de choix.









OlivierJ a écrit :



Attention, tu mélanges C et C++, alors qu’on les considère bien différemment sur le côté sécurité de codage. Le C étant moins complexe, il est jugé plus sûr ; le C++ est jugé casse-gueule.









En fait, cela dépends d’énormément de facteurs.



Un bon codeur peut aboutir avec du C++ a une sécurité de codage bien plus importante qu’en C.



Avec un jeu d’objets bien validés et le bon style de programmation, on peut quasiment oublier les erreurs de type “buffer overflow” qui sont si faciles à commettre en C et qui sont la cause de tant de failles.



Bien sûr, si on prends le pire cas d’incompétence, le C++ permet plus de “créativité” pour créer des soucis complexes.












heret a écrit :



if (testalakon)

   instruction1, instruction2;







En même temps, il y a toujours un risque a utiliser une forme peu commune.









heret a écrit :



Cette fois-ci, tu as commencé le C à la fin des années 80, et quelques posts plus haut, tu écris que c’était il y a 25 ans. 2017-25=1992. 1992, ce n’est pas exactement la fin des années 80.

Est-ce que tu comprends ce que tu lis ? Est-ce que tu comprends ce que tu écris ? Sais-tu encore ce que tu fais, ou es-tu déjà atteint par Alzheimer ?

Et puis ton concours de bite, hein, ça devrait t’être passé à ton âge.





En parlant de savoir lire et de savoir comprendre, tu es assez drôle.

Il y a environ 25 ans c’était à titre professionnel, je l’ai écrit <img data-src=" />

Donc arrête de déconner.

On parlait de mono-ligne, donc virgule ou point-virgule, si tu mets 2 instructions ce n’est plus ce qu’on appelle du mono-ligne pour un “if” avec une instruction derrière et pas de block, qui était le coeur du sujet.







sr17 a écrit :



En fait, cela dépends d’énormément de facteurs.

Un bon codeur peut aboutir avec du C++ a une sécurité de codage bien plus importante qu’en C.

Avec un jeu d’objets bien validés et le bon style de programmation, on peut quasiment oublier les erreurs de type “buffer overflow” qui sont si faciles à commettre en C et qui sont la cause de tant de failles.





Certes, mais comme il y a au final peu de bons codeurs (ce que je peux dire avec le recul pour avoir travaillé au sein de plusieurs équipes pendant des années), et que c’est long de devenir un bon codeur, disons qu’on s’améliore pendant les premières années, c’est mieux de partir directement avec un langage qui permet plus facilement un codage sûr.

Il y aura toujours des gens pour coder très bien quelque soit le langage, avec de l’expérience.









sr17 a écrit :



Comme si les programmeurs d’applications web avaient vraiment le choix du langage…







Rooh, pourquoi tant de sérieux, me suis mal exprimé, je voulais troll dire “JS côté serveur”…







sr17 a écrit :



On pourra toujours débattre des qualités de tel ou tel langage, mais en revanche, nous devrions être tous d’accord sur le fait qu’il faut combattre tout système qui impose un langage unique sans possibilité de choix.







Toutafé d’accord, cependant, il y a souvent des contraintes de temps, de coûts et de rentabilité liés au développement, qui limitent le choix des langages…









OlivierJ a écrit :



On parlait de mono-ligne, donc virgule ou point-virgule, si tu mets 2 instructions ce n’est plus ce qu’on appelle du mono-ligne pour un “if” avec une instruction derrière et pas de block, qui était le coeur du sujet. &nbsp;



Tu confirmes donc que tu ne connais pas l’opérateur virgule.

&nbsp;





OlivierJ a écrit :



En parlant de savoir lire et de savoir comprendre, tu es assez drôle.



&nbsp;Et bien ça sera sera le seul point sur lequel on sera d’accord : je suis ton con et tu es le mien.

Et n’oublie pas tes gouttes.









sr17 a écrit :



Comme si les programmeurs d’applications web avaient vraiment le choix du langage…/quote]

[quote:5964390:Ayak973]Rooh, pourquoi tant de sérieux, me suis mal exprimé, je voulais troll dire “JS côté serveur”…





J’avais implicitement compris ta remarque sur le JS par rapport au côté serveur. Effectivement ça m’a beaucoup étonné quand j’ai vu l’arrivée de cette mode (Node.js et compagnie), qui apparemment perdure, le choix du JS pour de la programmation serveur me semblant assez peu pertinent, pour ne pas dire saugrenu.







sr17 a écrit :



En même temps, il y a toujours un risque a utiliser une forme peu commune.





Je ne sais pas pourquoi il s’obstine dans ce truc…

(tout comme il s’obstine à penser que je ne connais pas l’opérateur, qui s’apparente à un point-virgule puisqu’il permet d’enchaîner des instructions, contrairement à ce qu’on fait habituellement avec l’opérateur “?” suivi de “:” pour l’alternative, dont le but est de n’exécuter qu’une seule instruction au final)







heret a écrit :



Tu confirmes donc que tu ne connais pas l’opérateur virgule.





Je sais qu’on est vendredi mais à un moment donné il faut arrêter les conneries…









Ayak973 a écrit :



Rooh, pourquoi tant de sérieux, me suis mal exprimé, je voulais troll dire “JS côté serveur”…







Des millions de programmeurs ont été formés à Javascript à cause du web, cela crée forcément des opportunités commerciales qui aboutissent inéluctablement à voir Javascript adapté à toutes les sauces.



Le phénomène se produit invariablement depuis des temps immémoriaux à chaque fois qu’un langage fait la mode éphémère du moment. Et dans l’informatique, on en a vu passer beaucoup.





Toutafé d’accord, cependant, il y a souvent des contraintes de temps, de coûts et de rentabilité liés au développement, qui limitent le choix des langages…





Choisir un langage inadapté à un projet, c’est vraiment excellent moyen de perdre du temps et de l’argent.



Il y a deux catégories de programmeurs : ceux qui sont jeunes et qui tombent dans le panneau du truc à la mode du moment.



Et il y a ceux qui ont été jeunes, se sont déjà fait avoir, en ont bien bavé… Ceux la, on ne la leur fera plus. Et il ne ferons plus la connerie de choisir un outil sur le seul critère que le copain l’utilise.









Cela me rappelle le Basic. Parce que tout le monde apprenait ce langage, il a été utilisé à toutes les sauces.



Certains ont même essayé de faire de gros projets avec quand bien même tout le monde savait que c’était pas le top.









OlivierJ a écrit :



Je n’ai pas compris. <img data-src=" />





cf ici :https://support.apple.com/en-us/HT201372

ouai j’évite les lion diskmaker et autre diskmaker x image disl maker pour faire mes médias usb…









OlivierJ a écrit :



Certes, mais comme il y a au final peu de bons codeurs (ce que je peux dire avec le recul pour avoir travaillé au sein de plusieurs équipes pendant des années), et que c’est long de devenir un bon codeur, disons qu’on s’améliore pendant les premières années, c’est mieux de partir directement avec un langage qui permet plus facilement un codage sûr.

Il y aura toujours des gens pour coder très bien quelque soit le langage, avec de l’expérience.







Je suis d’accord. C’est effectivement tout le problème.



D’un autre côté, il y a aussi des limites à ce qu’on peut faire avec les langages qui “permettent plus facilement un codage sûr”.



Si le C/C++ est un langage qui présente certains dangers, c’est aussi parce qu’il dispose d’une puissance et d’une granularité de contrôle très fin que d’autres langages ne permettent pas. Et pour certains types d’applications, cela fait une énorme différence.



Et pour compliquer l’affaire, le C/C++ permet aussi de comprendre des notions de programmation de bas niveau qui sont très utiles pour bien programmer dans tous les langages.



L’idéal pour un programmeur, c’est probablement de pratiquer plusieurs langages de la même manière que dans les sports, on varie les exercices pour mieux s’entraîner.









sr17 a écrit :



Des millions de programmeurs ont été formés à Javascript à cause du web, cela crée forcément des opportunités commerciales qui aboutissent inéluctablement à voir Javascript adapté à toutes les sauces.



Le phénomène se produit invariablement depuis des temps immémoriaux à chaque fois qu’un langage fait la mode éphémère du moment. Et dans l’informatique, on en a vu passer beaucoup.







C’est vrai mais enfin le JS, quoique je ne soit pas spécialement fan de ce langage, peut difficilement etre qualifié de mode éphémère.









Cashiderme a écrit :



C’est vrai mais enfin le JS, quoique je ne soit pas spécialement fan de ce langage, peut difficilement etre qualifié de mode éphémère.







Rappelons au passage que le langage C frise les 50 ans d’age. Et certains langages sont plus anciens encore…



Le Javascript est bien plus jeune en comparaison. Et pendant très longtemps, son utilisation n’a pas dépassé le cadre de petits scripts.



L’usage de Javascript dans des projets de plus grande taille est relativement récent.



Javascript est un langage éphémère parce qu’il ne se maintient pas par ses qualités intrinsèques, mais par le fait qu’il est imposé.



Mais le développement du web à amené le besoin d’applications web. C’est ce qui a poussé l’usage de Javascript au delà des capacités de ce langage. C’est un problème similaire au principe de Peter.



Forcément, le besoin de faire tourner d’autres langages se fait cruellement sentir. Et malgré l’inertie, le besoin finira par avoir raison du principe de langage unique dans les navigateurs. Même si cela prendra du temps, les développements sont en bonne voie…



Et forcément, le jour ou la concurrence sera la, Javascript, le petit langage de script bourré de tares qui a été écrit sur un coin de table aura du mal à lutter avec les vrais langages de programmation sérieux quand il s’agira d’écrire de vrais projets.



La notion de “langage éphémère” peut être difficile à cerner pour les jeunes, sachant qu’un langage éphémère peut parfois se maintenir pendant plus de 10 ans. Et l’humain a tendance à penser que ce qu’il a toujours connu ne peut pas disparaître. Le temps vous montrera que c’est une erreur.



Si l’on prends un exemple extrême de durée d’un langage éphémère, l’utilisation à outrance du langage BASIC à duré des décennies. Mais les défauts de ce langage ont bel et bien fini par avoir raison de ce langage…



Même s’il faut parfois du temps, ce qui est médiocre finit toujours par disparaître…









OlivierJ a écrit :



Je sais qu’on est vendredi mais à un moment donné il faut arrêter les conneries…&nbsp;





Mais quel mauvais coucheur, mais quel grognon, mais quel mauvais caractère !

Tu ne devrais pas te mettre dans un état pareil. Étant donné ton âge, c’est mauvais pour ton cœur. Tu ne vas pas faire de vieux os. D’un autre côté, on aura moins longtemps à te subir…