Tag Archives: Windows

Erreur “: No such file or directory”

Si comme moi vous avez l’erreur “: No such file or directory” qui s’affiche quand vous essayez d’exécuter un script sous Linux, il est probable que j’ai la solution.

julien@VM-GS70-MINT $ cat generate-doc
#!/usr/bin/env sh
../vendor/bin/sami.php update --force ../sami.php
julien@VM-GS70-MINT $ ./generate-doc
: No such file or directory

À première vue, il est assez difficile de trouver l’origine du problème.
Seulement je travaille à la fois sous Linux et Windows et ce dernier n’a toujours pas abandonné le CRLF (\r\n) pour les sauts de lignes.
Or, Linux lui utilise uniquement LF (\n) et est perdu quand il rencontre un CRLF.

Du coup la solution est toute simple:

julien@VM-GS70-MINT $ dos2unix generate-doc
dos2unix: converting file generate-doc to Unix format ...
julien@VM-GS70-MINT $ ./generate-doc
Updating project

Version master
Parsing done
Rendering done

Version Updated C Removed C
master 138 0

Version Updated C Updated N Removed C Removed N
master 138 33 0 0

En espérant vous avoir fait gagner du temps 😉

Tagged , , , ,

Cygwin, Permissions are too open

Si comme moi, vous utilisez quotidiennement Windows, que ce soit au travail ou à la maison, vous connaissez surement Cygwin.

Néanmoins pour les curieux voici une très courte description :

Linux-like environment for Windows making it possible to port software running on POSIX systems (such as Linux, BSD, and Unix systems) to Windows.

Bien que rendant d’énormes services, Cygwin n’est pas pour autant parfait. Un de ses points faibles est notamment la gestion des droits pour les fichiers.
Ce billet n’a pas pour vocation de résoudre cette problématique, je ne sais même pas si c’est techniquement faisable étant donné que le système de droit de Windows et d’Unix n’est pas vraiment compatible.

Cependant, je vais vous aider à résoudre un des problèmes qui m’arrivent régulièrement : l’impossibilité de modifier les droits du groupe d’un fichier.

Pour introduire la problématique, je vous donne un exemple concret.

Il existe deux façon de se connecte en SSH à un serveur. La première est d’utiliser le classique couple nom d’utilisateur, mot de passe associé. Cependant, je n’aime pas spécialement cette approche, car elle implique de connaitre les différents mots de passe pour chaque serveur.
J’utilise donc l’autre solution qui consiste à utiliser une clé RSA pour se connecter.

La syntaxe et la suivante :

ssh username@hostname -i private_key_file

Problème, de base les fichiers sur on pour droits 666 avec Cygwin. Et quand on essaie d’utiliser une clé avec ces droits on obtient ce message d’erreur :

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0666 for 'id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: id_rsa

Facile me direz-vous, il suffit de modifier les droits du fichier grâce à chmod. Oui, mais ça ne marche pas :

$ chmod 400 id_rsa
$ ls -l id_rsa
-r--r-----+ 1 Julien Aucun 1766 16 avr.   2012 id_rsa

Eh oui, il n’est pas possible de modifier les droits du groupe pour ce fichier, ils sont toujours identiques aux droits du propriétaire.

Vous remarquerez que le groupe pour ce fichier est Aucun. Le problème est là. Le fichier n’a pas de groupe. Hors, ce n’est pas possible sur un système POSIX, Cygwin pallie donc à ça en créant un groupe nommé Aucun.

La solution consiste à changer le groupe de ce fichier. Pour celà un petit coup d’oeil au fichier /etc/group vous aidera à choisir :

$ cat /etc/group
root:S-1-5-32-544:0:
Système:S-1-5-18:18:
TrustedInstaller:S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464:4294967294:
Administrateurs:S-1-5-32-544:544:
Administrateurs Hyper-V:S-1-5-32-578:578:
Duplicateurs:S-1-5-32-552:552:
IIS_IUSRS:S-1-5-32-568:568:
Invités:S-1-5-32-546:546:
Lecteurs des journaux d’événements:S-1-5-32-573:573:
Opérateurs d'assistance de contrôle d'accès:S-1-5-32-579:579:
Opérateurs de chiffrement:S-1-5-32-569:569:
Opérateurs de configuration réseau:S-1-5-32-556:556:
Opérateurs de sauvegarde:S-1-5-32-551:551:
Utilisateurs:S-1-5-32-545:545:
Utilisateurs avec pouvoir:S-1-5-32-547:547:
Utilisateurs de gestion à distance:S-1-5-32-580:580:
Utilisateurs de l’Analyseur de performances:S-1-5-32-558:558:
Utilisateurs du Bureau à distance:S-1-5-32-555:555:
Utilisateurs du journal de performances:S-1-5-32-559:559:
Utilisateurs du modèle COM distribué:S-1-5-32-562:562:
HomeUsers:S-1-5-21-1022396269-1448771893-189778280-1002:1002:
WinRMRemoteWMIUsers__:S-1-5-21-1022396269-1448771893-189778280-1000:1000:
Aucun:S-1-5-21-1022396269-1448771893-189778280-513:513:
Julien:S-1-5-21-1022396269-1448771893-189778280-1001:11001:

Parmi les groupes, il y a en autres Utilisateurs. On va se servir de lui:

$ chown :Utilisateurs id_rsa
$ ls -l id_rsa
-r--r-----+ 1 Julien Utilisateurs 1766 16 avr.   2012 id_rsa

Et voilà, il ne reste plus qu’à modifier les droits d’accès pour le groupe et le tour est joué :

$ chmod 400 id_rsa
$ ls -l id_rsa
-r--------+ 1 Julien Utilisateurs 1766 16 avr.   2012 id_rsa
$ ssh me@myserver -i id_rsa
Enter passphrase for key 'id_rsa':
me@myserver:~$

Bienvenue chez vous !

Tagged , , , ,