Annexes:ConfSELinux : Différence entre versions

De WikiFr_dbSQWare
Aller à : navigation, rechercher
(-- CREATION --)
 
m (Solution avec SELinux)
 
(4 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
Les scripts dbSQWare étant majoritairement écrits en shell, pour qu'ils fonctionnent en environnement windows, il vous faut un émulateur de shell.<br>
 
La procédure déroule l'installation de la 3.5.3 de Cygwin (attention aux anciennes versions de windows !).<br>
 
Si une version de Cygwin est déjà installée, supprimez la.<br>
 
Pour plus de détails, voir<br>
 
[https://cygwin.com/ 'Site principal Cygwin'].<br>
 
[https://cygwin.com/install.html 'Install Cygwin'].<br>
 
[https://cygwin.com/faq/faq.html#faq.setup 'Setting up Cygwin'].<br>
 
  
==Installation de Cygwin==
+
==SELinux==
===Télécharger l'installeur Cygwin===
+
===Généralités===
Depuis [https://www.cygwin.com www.cygwin.com], téléchargez la version de l'installeur Cygwin correspondante à votre système.<br>
 
Pour les systèmes 64 bits, [https://www.cygwin.com/setup-x86_64.exe setup-x86_64.exe]
 
 
 
Pour les versions plus anciennes de Windows, vous avez la note « How can I install the last Cygwin version for an old, unsupported Windows?” dans les FAQ de https://www.cygwin.com/install.html.
 
 
 
===Choisir un miroir===
 
Choisir un miroir pas trop loin de chez nous (mais qui fonctionne) sur :<br>
 
[https://www.cygwin.com/mirrors.html www.cygwin.com/mirrors.html]<br>
 
Exemple : https://mirrors.filigrane-technologie.fr/cygwin/ (celui utilisé dans l'exemple plus bas.)
 
 
 
===Installation mode ligne de commande===
 
 
 
Connectez-vous sur la machine Windows avec un compte administrateur. Le mode admin est obligatoire sinon vous risquez d’avoir des problèmes à l’utilisation !
 
 
 
[[Fichier:Admin cmd.png|admin|cmd en tant qu'administrateur]]<br>
 
 
 
Placez-vous dans le répertoire qui contient l’installeur et lancez l'installation en mode ligne de commande en choisissant le bon miroir et le bon chemin : <br>
 
  
 
<pre>
 
<pre>
#Lancez la commande suivante
+
$ getenforce
 
+
Enforcing
setup-x86_64.exe -X --quiet-mode --root C:\Cygwin --site https://mirrors.filigrane-technologie.fr/cygwin/ --packages bash-completion,exim,email,bc,cron,coreutils,cygrunsrv,shutdown,expect,gnupg,jq,lz4,pv,ssh-pageant,zstd,gzip,bzip2,sharutils,unzip,zip,ed,vim,gawk,perl,postfix,postfix-doc,postfix-tools,sendmail,curl,inetutils,openssh,openssl,ping,putty,rsync,bash,cpio,cygutils-extra,diffutils,dos2unix,keychain,time,screen,subversion,psmisc,python37,mc,nc,git,git-svn,wget
 
 
 
#Attention, toute la commande tient sur une seule ligne !
 
#Vous pouvez ajouter l’option --upgrade-also pour mettre à jour une distri déjà installée.
 
 
 
 
</pre>
 
</pre>
  
 +
===Problème rencontré===
  
Lien vers la doc complète d’installation :<br>
 
https://www.cygwin.com/install.html<br>
 
<br>
 
Pour plus d’infos sur les options de la ligne de commande :<br>
 
https://www.cygwin.com/faq/faq.html#faq.setup.cli<br>
 
Notamment pour « --proxy » si besoin<br>
 
<br>
 
Si vous voulez détruire le service :<br>
 
https://www.cygwin.com/faq/faq.html#faq.setup.uninstall-service<br>
 
<br>
 
Si vous voulez désinstaller Cygwin :<br>
 
https://www.cygwin.com/faq/faq.html#faq.setup.uninstall-all<br>
 
 
==Post installation configuration==
 
===Création d’un utilisateur Windows dédié (pour le SGBD)===
 
Ajoutez un utilisateur Windows qui portera l’exploitation du SGBD sur votre machine. <br>
 
Exemple :<br>
 
* oracle pour Oracle (le mettre dans le groupe ora_dba)
 
* mysql pour MySQL ou MariaDB
 
* postgres pour PostgreSQL
 
<br>
 
Vous pouvez allez dans la gestion de l’ordinateur puis dans la catégorie Utilisateurs et groupes et cliquer sur le dossier utilisateurs, puis faites un clic droit pour faire nouvel utilisateur <br>
 
[[Fichier:Cygwin capt1.png|admin]]
 
<br>
 
 
<br>
 
Entrez le nom d’utilisateur les mots de passes et cochez la case le mot de passe n’expire jamais<br>
 
[[Fichier:Cygwin capt2.png|admin]]
 
<br>
 
 
<br>
 
Il est préférable de placer l'utilisateur dans le compte Administrateur et pour oracle, placez le compte également dans le groupe ORA_DBA.<br>
 
[[Fichier:Cygwin capt3.png|admin]]
 
<br>
 
=== Ouverture du Pare-feu Windows ===
 
Vous devez ouvrir le FW « local » s’il est actif pour le port 22 (ssh).
 
<br>
 
Exemple avec la ligne de commande (CMD windows) avec droits admin :
 
 
<pre>
 
<pre>
netsh advfirewall firewall add rule name="SSH open ports" dir=in action=allow protocol=TCP localport=22
+
$ ssh user@[ip address]
 +
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
 
</pre>
 
</pre>
<br>
 
Vous pouvez également ouvrir le protocole ICMP le temps de la configuration.
 
<pre>
 
netsh advfirewall firewall add rule name="ICMPv4 rule" dir=in action=allow protocol=ICMPv4
 
</pre>
 
<br>
 
Pensez également à ouvrir les FW « centraux » si vous filtrez les flux de manière globale entre les machines !
 
  
=== Configuration de Cygwin (deamon et users) ===
+
===Solution avec SELinux===
==== Mapping des utilisateurs et groupes ====
+
Wrong Selinux context was used for new home directory.
Toujours connecté avec le compte windows d’administration avec lequel vous avez installé Cygwin, lancez l’invite de commande Cygwin, puis exécutez les commandes suivantes :
 
Pour configurer les users :
 
<pre>
 
mkpasswd -l > /etc/passwd
 
</pre>
 
Pour configurer les groupes :
 
 
<pre>
 
<pre>
mkgroup -l > /etc/group
+
# ls -ldZ /home/user1/.ssh/
</pre>
+
drwx------. user1 user1 unconfined_u:object_r:default_t:s0  /home/user1/.ssh/
Vérifiez le fichier /etc/passwd, si un nom d’ordinateur ou de domaine s’est positionné devant le user précédemment créé (en tout début de ligne), retirez le !
 
Exemples :
 
* MONORDI+mysql: => mysql:
 
* MONDOMAINE+postgres: => postgres:
 
Avant :
 
[[Fichier:Cygwin capt4.png|admin]]
 
<br>
 
Apres :
 
[[Fichier:Cygwin capt5.png|admin]]
 
<br>
 
Ne touchez rien d’autre au reste, c’est ce qui fait le mapping entre cygwin et Windows ! Si vous avez un doute, demandez-nous.
 
  
==== Création du lien ksh => bash ====
+
# ls -lZ /home/user1/.ssh/authorized_keys .
Création du soft link pour permettre aux scripts de fonctionner :
+
-rw-------. user1 user1 unconfined_u:object_r:default_t:s0 /home/user1/.ssh/authorized_keys
<pre>
 
ln -s /bin/bash /bin/ksh
 
 
</pre>
 
</pre>
<br>
+
1. If we compare with a working user we will be able to see the correct context which is “ssh_home_t:
==== Création et lancement du deamon Cygwin ====
 
Toujours dans la console Cygwin …
 
 
 
Pour créer le démon sshd :  
 
 
<pre>
 
<pre>
ssh-host-config -y -c ntsec -u admin -w sqw
+
$ ls -lZd /home/opc/.ssh/
 +
drwx------. opc opc unconfined_u:object_r:ssh_home_t:s0 /home/opc/.ssh/
 +
$ ls -lZd /home/opc/.ssh/authorized_keys
 +
-rw-------. opc opc unconfined_u:object_r:ssh_home_t:s0 /home/opc/.ssh/authorized_keys
 
</pre>
 
</pre>
Pour lancer le deamon :
+
2. Apply the context “ssh_home_t:” to the new home location:
 
<pre>
 
<pre>
cygrunsrv -S cygsshd
+
# chcon -R -t ssh_home_t /home/user1/.ssh/
 
</pre>
 
</pre>
<br>
+
3. Verify the permissions and SELinux context again:
Pour vérifier que tout est OK, essayez de vous connecter à votre compte oracle/mysql/postres en ssh :
 
 
<pre>
 
<pre>
ssh mysql@localhost
+
# ls -lZd /home/user1/.ssh/authorized_keys
# ou
+
-rw-------. user1 user1 unconfined_u:object_r:ssh_home_t:s0 /home/user1/.ssh/authorized_keys
ssh postgres@localhost
 
# ou
 
ssh oracle@localhost
 
 
</pre>
 
</pre>
(depuis votre cgwin pour que cela génère les fichiers de configuration)
+
4. Test SSH with user user1:
<br>
 
<br>
 
Si vous avez ce genre d’erreur :<br>
 
[[Fichier:Cygwin capt6.png|admin]]
 
<br>
 
Si vous avez cette erreur passer le compte oracle/mysql/postgres en compte Administrateur !
 
<br>
 
Faire “exit” pour revenir avec le user d’admin.
 
 
 
==== Création et lancement du daemon cron ====
 
 
 
Toujours dans la console Cygwin, vous allez créer et lancer un service de simulation de la crontab …
 
 
 
Pour créer le démon cron :
 
<pre>
 
cygrunsrv -I cron -p /usr/sbin/cron -a -n
 
</pre>
 
<br>
 
Pour lancer le deamon :
 
<pre>
 
net start cron
 
</pre>
 
 
 
== Configuration du PATH du user==
 
dbSQWare va utiliser les commandes natives du moteur (donc celles de Windows), il faut donc configurer le PATH pour qu’il puisse les trouver.
 
On fera le test avec sqlplus, psql ou mysql, les clients natifs de connexion.
 
Si leur PATH est se trouve dans l’env Windows, vous devez en hériter dans Cygwin, si ce n’est pas le cas, voici comment le configurer.
 
On cherchera donc à rajouter dans la variable PATH le chemin d’installation de vos binaires du SGBD, petite précision, sous Cygwin, « /cygdrive/c/ » représente le chemin « C:/ » de Windows.
 
Dans cette suite, on va se logger dans Cygwin avec le user précédemment créé.
 
<br>
 
Exemple si vous êtes avec le compte Administrateur :
 
 
<pre>
 
<pre>
ssh mysql@localhost
+
$ ssh user1@<ip address="">
# ou
+
Last login: Wed Mar 27 19:52:13 2019 from [xx.xx.xx.xx]
ssh postgres@localhost
+
-bash-4.2$</ip>
# ou
 
ssh oracle@localhost
 
 
</pre>
 
</pre>
  
{{Warning | Si vous avez modifié la variable PATH, redémarrez la machine afin que les modifications soient prises en compte !}}
+
===Solution sans SELinux===
 
+
Note: If SELinux is not required another solution will be to change SELinux to permissive mode or disable it.
=== Pour tous les utilisateurs ===
 
Faire un lien entre le .profile et le .bash_profile …
 
<pre>
 
mv .profile .profile.old
 
ln -s .bash_profile .profile
 
</pre>
 
<br>
 
=== Pour l'utilisateur Oracle ===
 
Exemple de variables à mettre en place (dans le .bash_profile) pour le compte oracle :
 
<pre>
 
export LANG='en_US.UTF-8'
 
export ORACLE_SID=ORCL
 
export ORACLE_HOME='C:\\app\\oracle\\product\\11.2.0\\dbhome_1'
 
export PATH=$(cygpath -u $ORACLE_HOME)/BIN:$PATH
 
</pre>
 
<br>
 
Test si le PATH trouve « sqlplus » :
 
<pre>
 
$ type sqlplus
 
sqlplus is /cygdrive/d/Oracle/product/11.2.0/dbhome_1/bin/sqlplus
 
</pre>
 
<br>
 
Test de la version :
 
<pre>
 
$ sqlplus -V
 
 
 
SQL*Plus: Release 11.2.0.1.0 Production
 
</pre>
 
<br>
 
Attention, le client « natif windows » ne supporte pas forcément l’affichage interactif de Cygwin, pour tester les commandes sql, mieux vaut faire de la commande « inline ».
 
Exemple :
 
<pre>
 
$ sqlplus / as sysdba <<EOFSQL
 
select version from v\$instance;
 
EOFSQL
 
 
 
SQL>
 
VERSION
 
-----------------
 
11.2.0.1.0
 
</pre>
 
<br>
 
 
 
=== Pour l'utilisateur mysql ===
 
Exemple de variables à mettre en place (dans le .bash_profile) pour le compte mysql :
 
<pre>
 
export LANG='en_US.UTF-8'
 
export MYSQL_SID=MYS_W80_PRD
 
export PATH='/cygdrive/c/Program Files/MySQL/MySQL Server 8.0/bin':$PATH
 
</pre>
 
<br>
 
Test si le PATH trouve « mysql » :
 
<pre>
 
$ type mysql
 
mysql is /cygdrive/c/Program Files/MySQL/MySQL Server 8.0/bin/mysql
 
</pre>
 
<br>
 
Test de la version :
 
<pre>
 
$ mysql -V
 
C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe  Ver 8.0.24 for Win64 on x86_64 (MySQL Community Server - GPL)
 
</pre>
 
<br>
 
 
 
Attention, le client « natif windows » ne supporte pas forcément l’affichage interactif de Cygwin, pour tester les commandes sql, mieux vaut faire de la commande « inline ».
 
Exemple :
 
<pre>
 
$ mysql -u root -h 127.0.0.1 -N -s <<EOFSQL 2>&1
 
select version();
 
EOFSQL
 
 
 
8.0.24
 
</pre>
 
 
 
=== Pour l'utilisateur postgres ===
 
Exemple de variables à mettre en place (dans le .bash_profile) pour le compte postgres :
 
<pre>
 
export PG_SID=PG_W130_PRD
 
export PATH=/cygdrive/d/PostgreSQL/13/bin:$PATH
 
export LD_LIBRARY_PATH=/cygdrive/d/PostgreSQL/13/lib:$LD_LIBRARY_PATH
 
export PGDATA=/cygdrive/d/PostgreSQL/13/data
 
export PGPORT=5433
 
</pre>
 
<br>
 
Test si le PATH trouve « psql » :
 
<pre>
 
$ type psql
 
psql is /cygdrive/d/PostgreSQL/13/bin/psql
 
</pre>
 
<br>
 
Test de la version :
 
<pre>
 
$ psql -V
 
psql (PostgreSQL) 13.3
 
</pre>
 
<br>
 
 
 
Attention, le client « natif windows » ne supporte pas forcément l’affichage interactif de Cygwin, pour tester les commandes sql, mieux vaut faire de la commande « inline ».
 
Exemple :
 
<pre>
 
$ psql <<EOFSQL
 
select version();
 
EOFSQL
 
 
 
                          version
 
------------------------------------------------------------
 
PostgreSQL 13.3, compiled by Visual C++ build 1914, 64-bit
 
(1 row)
 
</pre>
 
 
 
==Désinstallation de Cygwin==
 
Attention, tous les deamon et commandes en cours doivent être stoppées sinon la suppression des fichiers va échouer.
 
 
 
===Supprimez tous les services Cygwin (ie: sshd, cron, cygserver et inetd).===
 
<u>Arrêtez les services démarrés :</u>
 
<pre>
 
cygrunsrv -E service_name
 
</pre>
 
où service_name correspond au nom du service.<br>
 
<br>
 
<u>Puis désinstallez le service :</u>
 
<pre>
 
cygrunsrv -R service_name
 
</pre>
 
 
 
===Arrêtez le serveur X11===
 
S'il est en cours d'exécution et arrêtez tous les programmes Cygwin.<br>
 
<br>
 
<u>Supprimez les points de montage:</u>
 
<pre>
 
umount -A
 
</pre>
 
Sortez de l'invit de commande et vérifiez qu'il ne reste aucun processus Cygwin.
 
 
 
===Supprimez le répertoire d'installation de Cygwin et tous ses sous-répertoires.===
 
* Si vous recevez une erreur indiquant qu'un objet est en cours d'utilisation, vérifiez que tous les services ont été arrêtés et que tous les programmes Cygwin sont fermés.
 
* Si vous recevez une erreur Droit d'accès refusé, modifiez les autorisations ou les droits de propriété de votre compte utilisateur sur les fichiers ou dossiers ayant provoqué l'erreur. Pour modifier la propriété du dossier Cygwin à partir de l'explorateur Windows, cliquez avec le bouton droit de la souris sur le dossier Cygwin et cliquez sur Propriétés. Dans l'onglet Sécurité, sélectionnez Avancé. Dans l'onglet Propriétaire, vérifiez que votre compte apparaît comme propriétaire. Cochez la case Remplacer le propriétaire des sous-conteneurs et des objets, puis cliquez sur OK.
 
 
 
===Supprimez les raccourcis Cygwin.===
 
Sur le bureau et dans le menu Démarrer ...
 
 
 
===Chemin système.===
 
Si Cygwin est dans le PATH, supprimez-le.
 
 
 
===Variable d'environnement CYGWIN.===
 
Supprimez la variable d'environnement CYGWIN si elle existe.
 
 
 
===Registre Windows.===
 
Supprimez la/les clé(s) de registre 'Software\Cygnus Solutions' sous 'HKEY_LOCAL_MACHINE' et 'HKEY_CURRENT_USER', si elle existe.<br>
 
Généralement, les seules informations stockées dans le registre sont les informations de montage.
 
 
 
===Redémarrer la session (ou reboot, c'est mieux).===
 

Version actuelle datée du 3 juin 2024 à 10:50

SELinux

Généralités

$ getenforce
Enforcing

Problème rencontré

$ ssh user@[ip address]
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

Solution avec SELinux

Wrong Selinux context was used for new home directory.

# ls -ldZ /home/user1/.ssh/
drwx------. user1 user1 unconfined_u:object_r:default_t:s0  /home/user1/.ssh/

# ls -lZ /home/user1/.ssh/authorized_keys .
-rw-------. user1 user1 unconfined_u:object_r:default_t:s0 /home/user1/.ssh/authorized_keys

1. If we compare with a working user we will be able to see the correct context which is “ssh_home_t:”

$ ls -lZd /home/opc/.ssh/
drwx------. opc opc unconfined_u:object_r:ssh_home_t:s0 /home/opc/.ssh/
$ ls -lZd /home/opc/.ssh/authorized_keys
-rw-------. opc opc unconfined_u:object_r:ssh_home_t:s0 /home/opc/.ssh/authorized_keys

2. Apply the context “ssh_home_t:” to the new home location:

# chcon -R -t ssh_home_t /home/user1/.ssh/

3. Verify the permissions and SELinux context again:

# ls -lZd /home/user1/.ssh/authorized_keys
-rw-------. user1 user1 unconfined_u:object_r:ssh_home_t:s0 /home/user1/.ssh/authorized_keys

4. Test SSH with user user1:

$ ssh user1@<ip address="">
Last login: Wed Mar 27 19:52:13 2019 from [xx.xx.xx.xx]
-bash-4.2$</ip>

Solution sans SELinux

Note: If SELinux is not required another solution will be to change SELinux to permissive mode or disable it.