Développement

Chmod ?

Par dinosaure, le 02/12/2009 à 22h37
Chmod est une commande Unix qui permet de définir les droits que nous avons sur un fichier et/ou un dossier. C'est une commande importante que j'utilise souvent pour rajouter le droit d'exécution à des fichiers que je viens de télécharger. Mais son explication est souvent évasive dans certaines documentation, on vous dit de faire cela sans trop vous expliquer. Je me porte donc garant de votre compréhension sur cette commande basique.

Il faut d'abord comprendre que sur GNU/Linux, il existe 3 droit :

  • Lire
  • Écrire
  • Exécuter

Remarque: dans le cas d'un dossier, le droit exécuter permet de pouvoir ouvrir le dossier. C'est à dire que si un dossier est définit tel que le droit d'exécution n'est pas autoriser pour vous, vous ne pourrez pas y entrer.

On remarque donc qu'il est facile de protéger un fichier et/ou un dossier qui peut contenir des informations secrète comme des films ... hum ... hum ... Bref ! Ces droits sont affectés à qui ? Ils sont affecté à l'utilisateur (u) qui est le propriétaire du fichier et/ou dossier, au groupe auxquels l'utilisateur appartient, aux autres et à tout le monde.

Prenons donc l'exemple d'un dossier qui est accessible à absolument tout le monde. En faisant la commande ls -l, on obtient ceci :
Code : BASH
  1. drwxrwxrwx moi root [...] MonDossierAccessible

Comment faire en sorte que ce dossier ne soit accessible en écriture que par moi ? Eh bien c'est là où intervient a commande chmod. Il suffit de faire :
Code : BASH
  1. chmod go-r MonDossierAccessible

On remarque déjà le mot chmod ... primordial ... mais aussi go ... C'est quoi go ? C'est g + o (logique ?!) avec g qui veut dire Group (le groupe) et o Other (Autre). Au final go veut dire `le groupe et les autres`.
On remarque aussi le -r ... Sa veut dire moins (-) Read qui veut dire en français, moins lire ... Vous comprenez ?

En gros, la phrase veut dire `au groupe (g) et aux autres (o), j'enlève (-) le droit de lire (r)`. J'oubliais, il manque aussi le dossier MonDossierAccessible. Donc si on reprend :
Au groupe et aux autres, j'enlève le droit de lire pour le dossier MonDossierAccessible

Simple non ? Maintenant, prenons le cas où je souhaiterais enlever le droit de lecture et d'écriture :
Code : BASH
  1. chmod go-r-w MonDossierAccessible

On note l'ajout du -w qui veut dire j'enlève la possibilité d'écrire ... Et logique pour enlever le droit d'exécution :
Code : BASH
  1. chmod go-r-w-x MonDossierAccessible

Et là, votre dossier n'est accessible que par vous l'utilisateur (u). Cependant, pour faire court, on peut rassembler le tous comme ceci :
Code : BASH
  1. chmod go-rwx MonDossierAccessible

Qui veut tout simplement dire `au groupe et aux autres, j'enlève le droit à la lecture, à l'écriture et à l'exécution pour le dossier MonDossierAccessible`.

On pouvait aussi faire cette notation un peu plus longue :
Code : BASH
  1. chmod g-rwx,o-rwx MonDossierAccessible


On note ici l'apparition de la virgule ... Ensuite, c'est votre façon d'écrire qui diffèrera. Certains préfèrent une écriture longue est très explicite alors que d'autres voudront une écriture très courte moins expressive ... C'est à vous de voir.

Maintenant, il faut comprendre un bon point très simple mais très pratique. Imaginons que vous vouliez que le dossier ainsi que tout les fichiers de ce dossier ne soit accessible que par vous. Il suffit de rajouter l'option Recursive qui permet d'attribuer les droits définit au dossiers à tout les fichiers contenus dans le dit-dossier et à tout les sous-dossiers ... Bref, du travaille en moins, sa fait :
Code : BASH
  1. chmod -R go-rwx MonDossierAccessible


Le seul petit risque que vous ne devez absolument pas faire c'est :
Code : BASH
  1. sudo chmod -R /

Dans ce cas ci, j'ai modifié les droits de la totalité des fichiers de mon disque dur ... Mon système d'exploitation est alors inutilisable et il faut donc que je réinstalle la bête ! C'est juste le point noir de cette technique mais sinon, vous pouvez vous amusez à rendre inaccessible vos dossiers et vos fichiers.

Remarque: on note donc une significative séparation des droits pour les fichiers et les dossiers. Ceci en fait une forte de sécurité pour GNU/Linux car dans le cas où vous seriez victime d'une attaque (ce qui est très rare pour une ordinateur bureautique), les fichiers primordiaux au bon fonctionnement de GNU/Linux ainsi que les données des autres utilisateurs ne seront pas touchés car les attaques ce plient aux droits que vous avez (la modification donc de fichiers tels que ceux du démarrage de votre ordinateur est alors impossible sans connaître le mot de passe).

GTA Vice City ... et Wine

Par dinosaure, le 02/12/2009 à 21h45
Et me voilà de retour avec toutes les musiques de GTA Vice City ! Vous savez, ces musiques qui vous accompagnaient quand vous faisiez un meurtre, quand vous faisiez de belles cascades, quand vous vous branchiez une femme dans une belle Infernus ! À la belle époque. Je dois dire que Rockstar a superbement bien fait ce gens même si aujourd'hui son graphisme est très très médiocre (on ce rappelle des mains de Vercetti qui rester immobile) et si quelques scènes de ce jeu vidéo sont un peu improbable.

J'ai réellement était plus marqué par Vice City que par San Andreas (où on frisait un peu le ridicule).

C'est donc les musiques de ce jeu que je nomme de mythique que j'écoute avec nostalgie ! Bref, sinon au lieu de parler du passé, pourquoi ne pas tenter d'installer Vice City sur GNU/Linux ? Là, on doit vite faire le lien avec Wine. Pour ceux qui ne le serait pas, Wine est une sorte d'émulateur Windows (même si Wine veut dire Wine Is Not an Emulator). En gros, il permet d'exécuter des programmes fait pour Microsoft Windows dans un environnement tel que GNU/Linux.

L'avantage de Wine (car il existe aussi la virtualisation), c'est que votre application sera intégré à votre système d'exploitation (Ubuntu) et qu'il est moins gourmand en ressources que ses collègues de la virtualisation comme VirtualBox. Il faut donc préciser ici que Wine s'intègre parfaitement à un environnement GNU/Linux (selon systray) et qu'il n'est pas vraiment gourmand (selon htop). Ce qu'il faut signaler aussi, c'est que Wine n'est pas un émulateur qui recréer un Windows dans GNU/Linux (sa c'est la virtualisation), il implémente juste l'interface de programmation Win32 (celle qui permet de faire des logiciels sur Windows). Ce qu'il faut donc retenir, c'est que Wine simule Windows, il n'émule pas !

Continuons danns notre cher petit Wine. Il faut savoir que Wine fonctionne grâce à votre système d'exploitation (logique ?!). Il faut alors préciser que si votre GNU/Linux ne sait pas lire des partitions de type NTFS (partition que l'on retrouve souvent sur Windows), Wine ne pourra pas non plus ... Le fonctionnement de Wine dépend donc de votre système d'exploitation. Ceci permet de prouver que Wine n'émule pas un Windows, il simule un Windows grâce à l'environnement qu'on lui offre.

Bref, après cette petite explication de ce qu'est Wine (en un peu plus de profondeur), on peut commencer l'installation (sachez que je ne suis pas vraiment adepte de Wine, je le déteste d'ailleurs ... Donc si vous voulez de l'aide, c'est pas moi qui faut aller voir), en sachant que sur la version Karmic, il faut rajouter un dépôt ppa:ubuntu-wine/ppa :
Code : BASH
  1. sudo add-apt-repository ppa:ubuntu-wine/ppa
  2. sudo apt-get install wine


Installation très simple comme d'hab' ... Mais maintenant, il faut comprendre Wine en profondeur ! Wine s'installe dans votre répertoire personnel dans le dossier .wine (note: les dossiers cachés commencent par un point). Or, on a un petit problème (qui ne me concerne pas) qui est dans le cas où nous avons plusieurs utilisateurs. Si les 3 utilisateurs installe GTA Vice City, cela voudrais dire qu'il y a 3 GTA Vice City dans 1 seul ordinateur ... En gros ... Donc comment faire ? La documentation Ubuntu est là pour tout vous expliquer. Et par simple logique, il suffirait de créer un nouvelle utilisateur du nom de Wine comme ça, tout le monde est fixé (note: tout utilisateur utilisant Wine par le biais de l'utilisateur Wine devra appartenir au groupe Wine créer en même temps que la création de l'utilisateur) !

Un simple adduser avec quelques options pour cacher l'utilisateur dans le panel de connexion (recherche !) et un coup de chmod ug+rw /home/Wine pour rendre l'écriture et la lecture du dossier possible par tout utilisateur appartenant au groupe wine (note: il faudra toujours rendre vos applications Windows sous la propriété de wine et faire un coup de chmod ug+x à vos *.exe).

Remarque: si votre /home est dans une partition séparé des autres (comme moi), on notera quand cas de plantage de l'ordinateur, tout vos programme reste sain et sauf (enfin normalement).

Après cette petite explication brève et pas très précise, il faut configurer Wine ... Donc winecfg dans un terminal ou vous chercher dans votre menu et on commence le paramétrage. Sauf que ... n'ayant pas Wine et ne voulant pas l'installer pour mes lecteurs, l'explication va devoir s'arrêter là. Normalement, si vous avez un bon Français et de la débrouillardise, vous devez y arriver.

On va maintenant parler de piratage. Depuis tout à l'heure, on essaye d'installer GTA Vice City. Si vous n'avez pas suivit l'astuce expliquée plus haut, c'est pas grave, du moment que Wine fonctionne, c'est bon. Or, on a un problème. Les jeux demandent à ce que l'utilisateur insère un CD mais dans GNU/Linux, on a toujours eu un problème avec les CDs. Wine ne l'est reconnait pas ... Ainsi, je pourrait vous inciter à utiliser, par exemple ..., la techologie du NoCD qui permet d'exécuter un logiciel qui requiert un CD sans le CD (en tous cas, Wine et GTA San Andreas fonctionne parfaitement avec un NoCD) mais je ne ferais que vous citer un site anglais qui est semblable à une mine d'or : www.gamecopyworld.com ...

Maintenant, après cette brève partie piratage, on va parler de PlayOnLinux ! C'est un logiciel GNU/Linux qui permet l'installation de jeux vidéos sur votre Ordinateur GNU/Linux. Ce projet est un peu neuf quand même mais il est très prometteur ! En tous cas, c'est le logiciel que je conseille pour l'installation facile de jeux vidéos et si, un journ il vous arrive un bug, le forum est là (et la recherche aussi). Même si ce logiciel semble être une révolution, il faut avoir activé l'accélération graphique et une connexion internet.
Je vous conseille aussi de toujours être mise à jour avec PlayOnLinux, ainsi, il faut rajouter les dépôts de PlayOnLinux :
Code : BASH
  1. sudo wget http://deb.playonlinux.com/playonlinux_karmic.list -O /etc/apt/sources.list.d/playonlinux.list
  2. sudo apt-get update
  3. sudo apt-get install playonlinux


Ainsi, il suffit de ce faire guider tout seul, ou au pir à l'aide de la documentation française du projet : www.playonlinux.com. Et normalement, l'installation de GTA Vice City doit ce faire normalement. N'oubliez pas que, en cas de problème, vous avez à disposition non seulement le site internet de Wine, le forum de la documentation française d'ubuntu et le forum de PlayOnLinux qui sont une mine d'or pour non seulement apprendre mais aussi comprendre et arriver à son objectif.

Savoir si JavaScript est activé en PHP

Par dinosaure, le 25/11/2009 à 21h45
Normalement, un site bien fait, c'est un site qui fonctionne bien partout. C'est à dire qu'un site doit fonctionner même si le client utilise Internet Explorer ou même si JavaScript est désactivé. Cependant, sur certains site, cette accessibilité n'est pas présente. Ainsi, il est souvent utile de savoir si le client a activé JavaScript pour faire en conséquence ensuite mais le faire de façon invisible ... C'est une autre histoire ...

Mais Dino est là ! Et il a trouvé la technique. Il faut tout d'abord savoir qu'il nous est impossible de savoir de façon invisible si le client a désactivé JavaScript. Cependant, il est possible de savoir si JavaScript est activé ! Nous allons donc commencer notre quête inutile. Tout d'abord, il s'agirait de vous expliquer ce qu'est cette technique.

C'est très simple, dans le cas ou le client a activé JavaScript, nous lançons une requête HTTP par l'AJAX (donc présence obligatoire de JavaScript) vers une fichier javascript.php qui définit une variable SESSION de type booléenne que l'on mettra sur TRUE.
Remarque : Il existe plusieurs techniques AJAX pour entrer en contact avec un fichier PHP, cependant, pour les novices, je vous conseille vivement d'utiliser cette technique : XHR.
Dans le cas où le client n'a pas activé JavaScript, la requête HTTP par l'AJAX est impossible ainsi, nous pourrons pas définir la variable SESSION à partir du fichier javascript.php et nous savons donc que le client n'a pas activé JavaScript.
Si on suit cette logique, dès que vous serez fasse à une situation où le JavaScript est crucial au bon fonctionnement de votre page, vous ferez :
Code : PHP
  1. <?php
  2. if( isset( $_SESSION['javascript'] ) ) {
  3. //Votre code JavaScript
  4. } else {
  5. //Votre code de secours sans JavaScript
  6. }
  7. ?>


Alors, j'ai vraiment la flemme de vous faire un fichier contenant la fonction JavaScript pour faire appelle au fichier javascript.php et j'ai la flemme de vous faire aussi le contenue du fichier javascript.php. C'est pas très compliqué et si vous avez besoin d'aide, je vous donne quelques liens.
Bref, passons ... Nous avons un problème. Cette technique de vérification (c'est à dire la fonction JavaScript) doit être présente sur la totalité de vos pages et doit ce faire appeler pendant le chargement de la page. Pour ce faire, il suffit juste de rajouter à la balise <body> un onload :
Code : HTML
  1. <body onload="ma_fonction_javascript_de_vérification();"

Pourquoi vérifier toutes les pages ? Tout simplement parce que si votre client ne passe pas par l'index (ce qui est fort probable), la vérification n'aura pas lieu. Cependant on notera que cela pourra peut être ralentir le chargement de toutes nos pages. Il faut donc mettre en place un mini pseudo système de cache ! Comment faire ? Eh bien, la vérification que nous mettons en place est inutile dans le cas où la variable SESSION est défini. Donc il suffit de mettre dans la balise <body> ceci :
Code : PHP
  1. <body<?php if( !isset( $_SESSION['javascript'] ) ) { ?> onload="ma_fonction_javascript_de_vérification();"<?php } ?>>

Et voilà, terminer ! Vous savez maintenant si votre client a JavaScript activé ou pas ... Cependant, je tiens à dire que cette technique est selon moi inutile car un bon site est un site qui s'adapte à toutes configurations. Donc si vous êtes fan de cette technique, il serait temps de vous remettre en cause et de vous demandez si votre site a réellement besoin de JavaScript.