Category Archives: hosting

don’t crypt password with mysql functions

Au début ça me paraissait une bonne idée, de déléguer le cryptage des mots de passe à mysql. Mais, non. Et c’est normal. Quoique.

Le cryptage doit bien sûr être asymétrique, genre md5 ou sha1, pour ne pas stocker de passe qui soit décryptable, juste stocker un hash qui valide un mot de passe. (select * from user where md5(“‘.$_POST[“pw”].'”)=passmd5) (oui, un petit coup d’électricité de rappel d’injection sql)

par contre la fonction password c’est juste une combinaison de deux sha1 (!!!)

https://unix.stackexchange.com/questions/44883/encrypt-a-password-the-same-way-mysql-does

python -c 'from hashlib import sha1; print "*" + sha1(sha1("right").digest()).hexdigest().upper()'
 
perl -MDigest::SHA1=sha1_hex -MDigest::SHA1=sha1 -le 'print "*". uc sha1_hex(sha1("right"))'
 
php -r 'echo "*" . strtoupper(sha1(sha1("right", TRUE))). "\n";'

 

Et donc 1 : ya pas de salt

mais bon, les gens ont la curieuse idée de stocker le salt avec le code, $X$salt$code$ = utilise le protocole X avec le salt en paramètre. Un peu comme de noter l’adresse et le digicode sur son porte clé. ou le code de CB. bref..

L’autre truc c’est que c’est pas random. password(‘toto’) donnera toujours la même chose. Et ce serait mieux qu’il donne à chaque fois des valeurs différentes. Le seul moyen de tester serait de le passer à la fonction de vérification pass_verif(pass saisi, contenu de la base).

C’est fourni par le vieux code crypt(), ou le nouveau http://php.net/manual/fr/function.password-verify.php , ou le code alternatif https://github.com/ircmaxell/password_compat/blob/master/lib/password.php , or shorter https://gist.github.com/odan/1d4ff4c4088e906a5a49

 

function create_password_hash($strPassword, $numAlgo = 1, $arrOptions = array())
{
if (function_exists('password_hash')) return(password_hash($strPassword, $numAlgo, $arrOptions));
$salt = mcrypt_create_iv(22, MCRYPT_DEV_URANDOM);
$salt = str_replace('+', '.', base64_encode($salt));
return(crypt($strPassword, '$2y$10$' . $salt . '$'));
}
function verify_password_hash($strPassword, $strHash)
{
if (function_exists('password_verify')) return(password_verify($strPassword, $strHash));
$strHash2 = crypt($strPassword, $strHash);
return( $strHash == $strHash2);
}
//TEST: $strHash = create_password_hash("secret", PASSWORD_DEFAULT);echo $strHash . "\n";
//echo (verify_password_hash('secret', $strHash)) ? 'Password is valid!':'Invalid password.';

Un jour il pourrait y avoir un portage de crypt() dans mysql .
Mais il n’y est pas, exprès, pour éviter de trop transporter un mot de passe non crypté, ce qui multiplierait les risques de sniff (snif!).

(merci Laurent)

Pocket

Scripter comme un dinosaure

[original : http://guykastenbaum.blogspot.ch/2012/01/scripter-comme-un-dinosaure.html 27 janvier 2012]
comme j’aime bien cet article, je l’ai retrouvé sur blogger et réinjecté dans mon blog actuel.
Comment scripter (sh ou ksh) sur des environnements compatibles linux AIX Solaris ?
Je sais qu’il suffirait de changer de versions de sh ksh bash etc mais
Quelques recettes de cuisine :pour le if
if [ “x${var}” = “xyes” ]; then echo “yes”; fiRESPECTER les espaces, non il ne faut rien coller, ni [“, ni “=”, ah c’est dur…

ajouter le “x” pour éviter les if “-u” …=>; erreur sur l’opération -u

ajouter les guillemets car dans if [ $var =  $var pourrait être vide
(ça fait doublon avec “x” mais on est jamais assez prudent)

de temps en temps ajouter les accolades pour $var , soit ${var}, par pure paranoia

ajout récent : dans les tests d’égalité, il faut utiliser ‘=’ et non ‘ = = ‘(==), c’est pas compatible avec le vieux ‘sh’;

utiliser -eq plutôt que == , quoique on peut quand même oser. (en général, j’ose, c’est plus lisible)

je n’utilise pas le raccourci $a == “y” || $b=”n” , j’ai trop peur que ça soit trop moderne.

avec prudence les OR et AND sous forme de -o et -a ;

les jours de grande parano, utiliser des doubles crochets comme dans la doc
if [[ “x$a” != “xy” -a “x$a” != “xn” ]];then echo “maybe”; fi

pour faire un $x=~/toto/ [perl] ben d’à peu près lisible j’ai

if [ ” `echo $x|sed -e 's/toto//'`" != "$x" ];then ...

pour le sed 
en général il est sympa, sauf chez solaris

sur solaris sed -e ‘s/\t/ /g’ remplace les ‘t’ par des blancs.(oui,oui)
il faut remplacer sed -e “s/\t/ /g” par tr ‘\t’ ‘ ‘
c’est ce qui m’a décidé à écrire ce billet
d’ailleurs, tr marche assez bien : tr [:upper:] [:lower:] est bien compris
cadeau pour générer un mot de passe de 6 caractères :

$(head -n 100 /dev/urandom| tr -dc “[A-Z][a-z][0-9]”|cut -c1-6)

de même, si tu as des fichiers qui ne se termine pas par “\n” , le sed te zappe la dernière ligne. (oui,oui)
faire une boucle de réparation avant :

for instfile in $(find . -type f);do
if [ “$(tail -1 $instfile|od -t x1|tail -2|head -n 1|grep -c ‘ 0a’)” == “0” ];then
echo “” >> $instfile
fi
done

ah oui, oubliez le pratique -i, il faut revenir à sed -e ‘….’ a>b;mv b a
ou mieux car il conserve les attributs cp -p a b;sed -e ‘..’ b>a;rm -f b

[ajout de mai 2012]
Encore Solaris qui nous rappelle que sed -e “s/a/b/ s/c/d/” est un raccourci trop récent pour être supporté. Pour être 19k-compatible il faut écrire : sed -e “s/a/b/” -e “s/c/d/”

[ajout avril 2013]
Ah AIX se fait remarquer, on ne peut pas faire sed fichier -e ‘…’
car ça n’est pas dans le bon ordre. Soit sed -e ‘…’ fichier soit (c’est plus sûr)
cat fichier|sed -e ‘…’
ed
quelquefois on s’en sort en allant chez cet épicier discount, exemple
ed -s src/xmlrpc_introspection.h << EOD
/XMLRPC_ServerSetValidationLevel
i
XMLRPC_VALUE find_named_value(XMLRPC_VALUE list, const char* needle);
void describe_method(XMLRPC_SERVER server, XMLRPC_VALUE vector, const char* method);
.
w
q
EOD
 
 
shell (sh echo $* .)

ne pas utiliser le trop moderne ‘-n’ option d’echo, car
echo “echo -n toto” > /tmp/a ; sh /tmp/a ; ksh /tmp/a ; rm a
affiche bien “-n toto”

éviter les echo avec des passages à la ligne , même avec \

sh ne connait pas $(commande), il ne connait que `commande` , c’est pas pratique.

sh n’accepte pas export PIF=”paf” , il exige PIF=”paf” ; export PIF
de toutes façon j’utilise ksh (c’est les ordres de là haut)

$0 $1 $* $@
variables fragiles, elles peuvent s’effacer le long du script (suffit qu’elles soient utilisées en sous entendu dans un sous appel), donc les sauver dès le début du script

$0 des fois contient “-bash” au lieu de “bash” je sais pas d’où ça sort.

“source file” : utiliser “. ./file” ; c’est moins lisible mais plus archaique

cadeau, un complément de getopts

while getopts “n:t:m:a:u:s:h” opt; do
if [ “$OPTARG” = “” ]; then OPTARG=1; fi
if [ “$opt” != ‘?’ ] && [ “$opt” != ‘:’ ]; then
export OPTARG_${opt}=$OPTARG
fi
done

les fonctions s’écrivent

compilesys()
{
pas de ‘function’
des parenthèses vides (on chopera $1 $2 …)
accolade à la ligne
et ça s’appelle sans les parenthèses, compilesys unzip

pour id, uname
pour les fonctions borderline, qu’on croit qu’elles sont standards, eh ben moitié moitié.
faut vérifier les options de base. sur solaris j’utilise

if [ -f “/usr/xpg4/bin/id” ];then export GSCRIPT_BIN_ID=/usr/xpg4/bin/id;
else export GSCRIPT_BIN_ID=id; fi

sinon je ne m’en sors pas (besoin du id -gn -u -g ..)

uname -s est plus fiable que hostname (JYP)

grep

ne connait pas toujours -E (solaris) , par contre son équivalent egrep existe …

tar
oubliez le -z pour de copain gzip, retrouvez tar cf -|gzip -c|gzip -dc|tar xf –
pour les gros tar, ou avec des longs paths, utiliser gtar ou une version fraiche :

pour tar gzip zip bzip make … : RECOMPILEZ ! cadeau :

compilesys()
{
confplus=$2
gzip -dc ../zip/$i-*.gz 2> /dev/null | tar xf – #ou variante…
cd $i-*/ ;   ./configure –cache-file=config.cache –prefix=SOMEWHERE $confplus
make ;  make install ;  cd ..
}
compilesys tar “FORCE_UNSAFE_CONFIGURE=1”
for soft in xz bison flex m4 autoconf automake libtool make bash binutils;do compilesys $soft;done

J’en ai sûrement oublié, dites moi

Pocket

qmail dkim

pfou, ça fait longtemps ..

et après un mailing plein de retours spams, je me suis dit qu’il fallait quand même implémenter dkim dans mon vieux qmail (et après .. dmarc)

les docs de qmailrock sont bien , les scripts domainkey qmail-remote sont lisibles, et sagredo.eu a une autre approche mais plus complexe, je choisis qmailrock car c’est assez simple de signer un message en mettant un shell à la place de qmail-remote.

…sauf que libdkimtest, version19 ou version21, ne fait pas des supercalculs, et je suis rejeté comme quoi le message est altéré.

heureusement ça existe en perl, et c’est bien plus facile que cpp mail::dkim. Comme j’ai fait quelques remix et simplifications , en gros je prends la méthode et les scripts de qmailrock, en remplaçant lidkimtest par le module perl :

 

le remplaçant de qmail-remote (qui lui est renommé qmail-remote-binary)

#!/bin/sh
# DKIM signing for qmail
# Author: Joerg Backschues + gyu kastenbaum
 
[ "$DKSIGN" ]   || DKSIGN="/etc/domainkeys/%/default"
[ "$DKREMOTE" ] || DKREMOTE="/var/qmail/bin/qmail-remote-binary"
[ "$DKIMPL" ]   || DKIMPL="/var/qmail/bin/dkim.pl"
# parent domains (see RFC 4871 3.8)
FQDN=${2##*@}
TLD=`echo $FQDN | awk 'BEGIN {FS = "."} {print $NF}'`
DOM=`echo $FQDN | awk 'BEGIN {FS = "."} {print $(NF-1)}'`
# get domainkey file
if [[ $DKSIGN == *%* ]] ; then
    DOMAIN=$DOM.$TLD
    DKSIGN="${DKSIGN%%%*}${DOMAIN}${DKSIGN#*%}"
fi
if [ -f "$DKSIGN" ] ; then
    # domain with domainkey # sign message
    cat - | $DKIMPL $DOMAIN | "$DKREMOTE" "$@"
    retval=$?
    echo "qmail-remote: domainkey for $2" | /var/qmail/bin/splogger qmail;
    exit $retval
else
    # domain without domainkey
    exec "$DKREMOTE" "$@"
fi

 

le bout de perl qui signe un message

#!/usr/bin/perl
 use Mail::DKIM::Signer;
 use Mail::DKIM::TextWrap;  #recommended
 
my $dom=$ARGV[0];
my $key="/etc/domainkeys/$dom/default";
if (! -f $key ) {
print  while (<STDIN>);exit;
}
 
  # create a signer object
  my $dkim = Mail::DKIM::Signer->new(
                  Algorithm => "rsa-sha256",
                  Method => "simple/relaxed",
                  Domain => $dom,
                  Selector => "default",
                  KeyFile => $key,
             );
  my $output="";
  while (<STDIN>)
  {
      $output=$output.$_;
      # remove local line terminators
      chomp;
      s/\015$//;
      # use SMTP line terminators
      $dkim->PRINT("$_\015\012");
  }
  $dkim->CLOSE;
 
  # what is the signature result?
  my $signature = $dkim->signature;
  my $outsign = $signature->as_string."\n";
  $outsign =~ s/\015$//gm;
  print $outsign;
  print $output;

 

bon… faudrait être plus fin sur la config, mais déjà ça passe…

merci aussi à qmailrocks.thibs.com/downloads/scripts/ , à http://dkimvalidator.com  et à https://www.altospam.com/actualite/2014/01/des-outils-de-verification-des-emails-pour-eviter-detre-considere-spammeur/

 

 

Pocket

plusieurs astuces elk/logstash

Tant qu’à fouiller dans des logs, autant s’amuser à tout mettre dans ELK ;

Je partage ici quelques astuces :

tracer le server-status d’apache httpd :

http_poller
kv

 

input {
http_poller {
urls => {
"custom_httpd_t0" => { url => "http://127.0.0.1:9680/server-status?auto"}
"custom_httpd_t1" => { url => "http://someserver:9681/server-status?auto"}
}
tags => apache_stats
type => xxxxxstatus
codec => plain
metadata_target => http_poller_metadata
interval => 5
}
 
if [http_poller_metadata] {
# Properly set the '@host' field based on the poller's metadat
mutate {
add_field => {
"@host" => "%{http_poller_metadata[name]}"
}
}
}
# Processed polled apache data
if "apache_stats" in [tags] {
# Apache stats uses inconsistent key names. Make sure all fields are camel cased, no spaces
mutate {
gsub => ["message", "^Total ", "Total"]
}
# Parse the keys/values in the apache stats, they're separated by ": '
kv {
source => message
target => apache_stats
field_split => "\n"
value_split => ":\ "
trim => " "
}
# We can make educated guesses that strings with mixes of numbers and dots
# are numbers, cast them for better behavior in Elasticsearch/Kibana
ruby {
code => "h=event['apache_stats']; h.each {|k,v| h[k] = v.to_f if v =~ /\A-?[0-9\.]+\Z/}"
}
mutate {
convert => {"BusyWorkers" => "integer"}
convert => {"IdleWorkers" => "integer"}
}
}

 

et aussi l’analyse des logs d’apache et weblogic

bon je ne montre que weblo, pour les astuces ignore_older, multiline  :

 

file {
type => "xxxxxfw"
path => "C:/xxxxx/logs-fw/xxxxx*"
sincedb_path => "C:/xxxxx/xxxxxfw.sincedb"
start_position => "beginning"
ignore_older => 8640000
codec => multiline {
pattern => "^2"
max_lines => 2000
negate => true
what => previous
}
tags => ["wlslog"]
}
et le filtre où je récupère dans le message le temps passé (1234 ms) ne pas oublier break_on_match
if [type] == "xxxxxfw" {
#2016-09-21 19:31:23,899 : WARN : com.xxxxxxxxxxxxxxValueStack:49 : warn() : Error setting expression 'dateFin' with value '[Ljava.lang.String;@29c00ac3'
#ognl.MethodFailedException: ConsulterSynthesexxxxx [java.lang.NoSuchMethod blablabla
# at xxxxxxxxntime.callAppropriateMethod(xxxxRuntime.java:125)
 grok {
 break_on_match => false
 match => [ "message" , "(?<timestamp>%{YEAR}-%{MONTHNUM}-%{MONTHDAY}%{SPACE}%{TIME})%{SPACE}:%{SPACE}%{WORD:verb}%{SPACE}:%{SPACE}%{GREEDYDATA:alertmessage}" ]
 match => [ "alertmessage" , "\(%{NUMBER:timespent} ms\)" ]
 }
 mutate {
 #remove_field => [ "message" ]
 convert => {"timespent" => "integer"}
 }
 date { match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss,SSS" ] }
 }

ah si, aussi pour apache je découpe les cookies en cookies

(bon ça ne m’a pas servi, mais peut être un jour…)

kv {
source => cookie
target => cookies
field_split => ";"
value_split => "="
trim => " "
}

 

++

Pocket

recommended ciphersuite , and wget in bash

le ciphersuite recommandé provient du site https://cipherli.st/

qui est tenu à jour et qui contient les exemples de configuration pour plusieurs middlewares

EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH

 

le ciphersuite est une suite de protocoles autorisés , séparés par ‘:’ , le ‘+’ est un ‘et logique’ ;

le ‘-‘ n’est pas un signe de syntaxe, DHE-RSA-AES256-SHA désigne une seule combinaison

les ciphers concernent  : le protocole (SSL,TLS) , Kx key exchange, Au l’authentification  , Enc l’encryption , (Mac Digest plus rarement)

 

Commande pour vérifier les protocoles possibles :

 

openssl ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH -v
 
DHE-RSA-AES256-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA1
 
DHE-DSS-AES256-SHA      SSLv3 Kx=DH       Au=DSS  Enc=AES(256)  Mac=SHA1

ici, AES256+EDH affiche les protocoles avec EDH (key exchange = DH) ET Encryption=AES256

voilà. c’était un condensé qui a l’air simple comme ça, mais quand on se retrouve devant un cipherlist à mettre, et un openssl cipher, on copie colle sans comprendre pourquoi cette formule magique marche, et on espère que personne ne va poser de question.

 

 

Maintenant le telnet en bash (merci JCC, corrigé par linuxjournal) avec un exec + canal tcp

exec 3<>/dev/tcp/www.google.com/80
echo -e "GET / HTTP/1.1\r\nhost: http://www.google.com\r\nConnection: close\r\n\r\n" >&3
cat <&3

ça sert pas et ça marche pas bien, mais c’est quand même fun …

Pocket

java jmx port and the rmi port

java, c’est désespérant. le port jmx est sympa mais il redirige vers un port rmi random, quand on n’est pas au courant ça énerve. Quand on est au courant on se demande pourquoi, et aussi on échafaude des tunnels ssh avec proxy -D. Finalement la solution simple est d’ajouter un fix du port rmi, sur le même port que jmx

-Dcom.sun.management.jmxremote.port=$PORTJMX \
-Dcom.sun.management.jmxremote.rmi.port=$PORTJMX \

(le même port ???!!!)

en comparaison, j’ai passé quelques semaines avec elasticsearch, nodejs, bower, yo, angularjs, etc, et je ne trouve pas de post à faire, autre que ‘whaou’.

 

Pocket

Solaris réactionnaire: sftp localhost -oPort=1988

Solaris est un vieux con.

On le savait, il met en avant son vieux grep qui ne fait pas de -r ni ne -E. Oh il veut bien des nouveauté, pour amuser les jeunes quand ils passent le week end. Cherchez où je l’ai rangé votre truc, chez xavier-pierre-gilles IV /xpg4/, ou sir frank william /sfw/ .

C’est bien les commandes unix, quand tu les tape sans argument ça de donne la doc :

 

bash-3.2$ sftp
Usage: sftp [-vC1] [-b batchfile] [-o option] [-s subsystem|path]
[-F config] [-P direct server path] [-S program] [-B buffer_size]
[-R num_requests] [user@]host[:file [file]]
 
bash-3.2$ sftp localhost -oPort=1988
Connecting to localhost...
Password:

Hey mais je n’ai rien qui tourne sur ce port ?

Eh oui, c’est auto-documenté, il faut mettre le port AVANT.
Non ça n’est pas une erreur, pas besoin de message.

note: sur la prochaine version de Solaris , la touche backspace va effacer le caractère avant le curseur. (no it’s a joke)

 

Pocket

petits debugs du jour (RewriteRule, iptables udp dns, ulimit)

que des petites choses. allons voir :

avant, toto.fr ne pointait pas au même endroit que www.toto.fr (mais sur tartar.com), un oubli qui n’a pas été modifié de peur que google perde la bonne indexation….

berk c’est laid, je corrige.

Mais pour google je rajoute :

 

RewriteCond /home/sites/toto.fr/www/{REQUEST_URI} !-f
RewriteCond /home/sites/tartar.com/www/%{REQUEST_URI} -f
RewriteRule ^(.+)$ http://www.tartar.com/$1 [R=301,L]
 
RewriteCond /home/sites/toto.fr/www/{REQUEST_URI} !-d
RewriteCond /home/sites/tartar.com/www/%{REQUEST_URI} -d
RewriteRule ^(.+)$ http://www.tartar.com/$1 [R=301,L]

 

autre chose, une machine ne résoud pas les noms depuis que j’ai réparé la config iptables.

faut dire qu’on avait :

 

:INPUT ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited

pourtant ça marche sur une machine identique

ah non , ya une différence :

-A INPUT -j REJECT -p tcp –reject-with icmp-host-prohibited

eh oui, du coup les “mauvaises requetes” udp passent , et passent aussi grâce au INPUT:ACCEPT.

faut modifier

INPUT:DROP

-A INPUT -j REJECT –reject-with icmp-host-prohibited

et iptable rules to allow outgoing DNS lookups  wikipedia

les requêtes udp utilisent pour répondre la même ouverture créée par la requête entrante.
-A INPUT -p udp -m udp –sport 53 -j ACCEPT
-A INPUT -p udp -m udp –sport 67 -j ACCEPT


:INPUT DROP
-A INPUT -p udp -m udp --sport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -p udp -m udp --sport 67 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited

et une correction sur une partie de script qui lit le contenu de limit.conf pour un user et génère les commandes ulimit qui correspondent :

 

# use ulimits from original user
if [ -f "/etc/security/limits.conf" ];then
#syntaxe de ulimit differente selon version de ksh
KSH_ISPDKSH="`ksh -c 'echo \$KSH_VERSION'|sed -e 's/^.*PD *KSH.*$/pdksh/'`"
if [ "$KSH_ISPDKSH" = "pdksh" ];then
KSH_TR_ULIMIT="core-c data-d fsize-f memlock-l rss-m nofile-n stack-s cpu-t nproc-p"
else
KSH_TR_ULIMIT="core-c data-d nice-e fsize-f sigpending-i memlock-l rss-m nofile-n pipe-p msqqueue-q rtprio-r stack-s cpu-t nproc-u"
fi
ULIMIT_SYSUSER=`grep ^$GSCRIPT_SYSUSER /etc/security/limits.conf \
| sed -e 's/\t/ /g' -e 's/ */ /g' |sort -r \
| sed -e 's/^.* soft *//' -e 's/^.* hard *//' -e 's/ /_/g'`
for ULIMTR in $KSH_TR_ULIMIT;do
ULIMTRCNF=`echo $ULIMTR|sed -e 's/-.*$//'`
ULIMTRCMD=`echo $ULIMTR|sed -e 's/^.*-//'`
ULIMIT_SYSUSER=`echo "$ULIMIT_SYSUSER"|sed -e s/$ULIMTRCNF/-$ULIMTRCMD/`
done
for ULIMCMD in $ULIMIT_SYSUSER;do
if [ "`echo x$ULIMCMD|sed -e 's/^x-.*$//'`" = "" ];then
ulimit `echo $ULIMCMD|sed -e 's/_/ /g' -e 's/ -1/ unlimited/'`
fi
done
fi

en plus c’est différent suivant la version de pdksh

(fixed: -1 dans ulimit.conf doit être transcrit en unlimited)

 

Pocket

ce site ne possède pas de certificat de clé publique

sur Google Chrome on peut voir que le site “ne possède pas de certificat de clé publique”,
le cadenas est gris, avec un petit triangle jaune.
J’ai encore plus fouillé, et encore appris un peu du monde SSL  :
1/ c’est une erreur de traductions coté googlechrome,
(un glissement sémantique ?)
https://productforums.google.com/forum/#!topic/chrome-fr/7ohvzv2WSTg
ce site n’a pas de “public audit record”
2/”public audit record” WTF?
il s’agit du niveau d’authentification du SSL
http://security.stackexchange.com/questions/52834/what-exactly-does-it-mean-when-chrome-reports-a-certificate-does-not-have-publi
ma copine d’il y a dix ans de TBS l’expliquait bien :
http://www.tbs-certificats.com/authentification.html
ici le certificat est validé par Gandi, qui lui-même est validé par un validateur public (comodo)
son authentification (nom de personne, de société) n’est pas validé directement par une autorité publique.
firefox l’indique par “Ce site web ne fournit pas d’informations sur son propriétaire.”
et google par “identité non validée”
les cadenas de ssl (ou cadenas sur fond vert) sont obtenus avec
des certificats extended validation (EV), (gandi-business)
plus long avec envoi de copie de papiers officiels etc (et donc plus cher…)
(j’ai aussi un site avec le même niveau de certificat mais il s’affiche avec un https barré rouge, pas compris)

 

Pocket

LD_LIBRARY_PATH annoyances

Hey, mais on n’a pas besoin de ld_library_path ?

pourtant j’avais codé un élégant script :

#reorder front path items matching ie(PATH,/opt:/usr:/sbin:/bin) R_PATH

reorderpath()
{
A_PATH=$1
P_BEFORES=$2
A_PATH=`echo "$A_PATH"|sed -e 's/::/:/g' -e 's/^://' -e 's/:$//'`
if [ "$A_PATH" = "" ];then return;fi
if [ "$P_BEFORES" = "" ];then return;fi
for P_BEFORE in `echo $P_BEFORES|sed -e 's/:/ /g'`;do
R_PATH=""
for I_PATH in `echo $A_PATH|sed -e 's/:/ /g'`;do
J_PATH=`echo $I_PATH|sed -e "s:^$P_BEFORE::"`
if [ "$I_PATH" = "$J_PATH" ];then
R_PATH="$R_PATH:$I_PATH"
else
R_PATH="$I_PATH:$R_PATH"
fi
done
R_PATH=`echo "$R_PATH"|sed -e 's/::/:/g' -e 's/^://' -e 's/:$//'`
A_PATH=$R_PATH
done
}

mais sur AIX, impossible de concilier chef-solo et rpm

reorderpath $LD_LIBRARY_PATH /usr:/lib:/opt/freeware

ça met rpm en premier, rpm marche, mais pas chef-solo qui prend les libs (zlib) de /lib au lieu de /opt/chef/embedded ;

vice versa, rpm a besoin des libs zlib de /lib ;

et comme rpm est lancé par chef, ils devraient partager le même LD_LIBRARY_PATH.

je croyais ça insolube, eh ben non :

dans les fichiers compilés, il y a en dur la localisation de la lib.

Why LD_LIBRARY_PATH is bad says :

  1. Never ever set LD_LIBRARY_PATH globally.
  2. If you must ship binaries that use shared libraries and want to allow your clients to install the program outside a ‘standard’ location, do one of the following:
    • Ship your binaries as .o files, and as part of the install process relink them with the correct installation library path. (like oracle..)
    • Ship executables with a very long “dummy” run-time library path, and as part of the install process use a binary editor to substitute the correct install library path in the executable. (whaou, hacky!+1!)
  3. If you are forced to set LD_LIBRARY_PATH, do so only as part of a wrapper.

 

so (redhat/solaris/aix):

unset LD_LIBRARY_PATH LD_RUN_PATH LIBPATH

 

Pocket