Synchronisez et configurez le site miroir sous le système CentOS

La configuration d'un site miroir convient aux intranets et aux réseaux isolés. En particulier, il y a deux sentiments concernant les sources actives et l'absence de sources dans le réseau isolé. Ici, je prends le système CentOS comme exemple pour enregistrer ma propre expérience de mise en place d'un site miroir .
 

Utiliser reposync pour synchroniser

Installer l'outil de synchronisation

Dans le passé, l'outil rsync plus createrepo était utilisé pour générer des métadonnées pour la synchronisation, mais il existe maintenant un meilleur moyen d'utiliser l'outil de reposync dans CentOS.

# CentOS 7
sudo yum install yum-utils
# CentOS 8
sudo dns install dnf-utils

Synchroniser l'entrepôt par défaut

Une fois l'installation terminée, vous pouvez immédiatement effectuer la synchronisation de l'entrepôt.
 
Le référentiel par défaut de CentOS 7 contient:

  • base
  • mises à jour
  • Suppléments

Le référentiel par défaut de CentOS 8 contient:
 

Première synchronisation

// CentOS 7
sudo reposync --download-metadata -p /home/repos
// CentOS 8
sudo dnf reposync --download-metadata --destdir /home/repos

Description:

  1. "--Download-metadata" télécharge les métadonnées, sinon vous devez utiliser createrepo pour générer.
  2. "-P" et "--destdir" spécifient le répertoire de stockage, la valeur par défaut est le répertoire courant où la commande est exécutée.
  3. La commande ci-dessus synchronisera toutes les sources valides actuelles, vous pouvez utiliser la commande "yum repolist" pour afficher, ou afficher la description dans "[]" dans le fichier .repo, et activer = 1 en même temps.

Mettre à jour la synchronisation

// CentOS 7
sudo reposync --download-metadata -p /home/repos --delete -n

Description:

  1. "--Delete" supprime les packages qui n'existent pas dans l'entrepôt.
  2. "-N" met uniquement à jour la dernière mise à jour incrémentielle.

Mettre à jour EPEL

EPEL: Paquets supplémentaires pour Enterprise Linux, qui sont nécessaires dans de nombreux endroits en tant que source CentOS importante.

  • Installer epel source
// CentOS 7
sudo yum install epel-release
// CentOS 8
  • Mettre à jour la source epel

La méthode d'opération peut utiliser la mise à jour incrémentielle ci-dessus, ou "-repo <repo_id>" pour mettre à jour la source spécifiée.

// CentOS 7
sudo reposync --download-metadata -p /home/repo --repo epel
// CentOS 8
sudo dnf reposync --download-metadata -p /home/repo --repo epel

Selon le document officiel EPEL, si EPEL est utilisé dans CentOS 8, il est recommandé d'activer la source powertools

sudo dnf reposync --download-metadata -p /home/repo --repo powertools

Mettre à jour le miroir source des autres architectures

Avant de mettre à jour l'image source d'autres architectures (principalement ARM), j'ai utilisé QEMU pour virtualiser une machine virtuelle aarch64. Bien que le problème ait été résolu, il n'était pas aussi rapide que x86_64. De plus, si vous utilisez vbox sous windows, vous traitez toujours Impossible de résoudre le problème de virtualisation de aarch64, alors je l'ai étudié à nouveau.
 
La première consiste à regarder les paramètres: reposync ou dnf reposync a une option de paramètre de --arch, qui lui ressemble, mais cela a échoué, mais le paquet noarch a été synchronisé; l'autre est de changer l'URL source, ce qui a réussi Voici le temps de modification Plusieurs variables qui doivent être expliquées.

  • $ releasever: le numéro de version du système actuel, tel que "7", vous pouvez utiliser la commande suivante pour afficher
    rpm -q --qf %{version} centos-release
  • $ basearch: L'architecture CPU du système actuel, telle que "x86_64", "aarch64", vous pouvez utiliser la commande suivante pour afficher
    rpm -q --qf %{arch} centos-release
  • $ infra: is stock, les variables personnalisées du répertoire / etc / yum / vars /
    peuvent également afficher les informations du package centos-release via la commande suivante
    rpm -qi centos-release

    Après avoir pris connaissance des variables ci-dessus, vous pouvez spécifier $ basearch comme organisation à synchroniser pour effectuer les opérations de synchronisation source. Par exemple, modifiez $ basearch en aarch64 pour synchroniser les packages aarch64.

Installer le site miroir

Le site Web est implémenté à l'aide d'Apache (car le système est fourni avec).

Installez Apache

sudo yum install httpd -y

Configurer Apache

Nouveau fichier de configuration repos.conf pour le site miroir source

sudo vim /etc/httpd/conf.d/repos.conf

Alias /repos /var/www/repos
<Directory /var/www/repos>
  Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

Description de l'attribut Apache

Apache utilise <Directory> ... </Directory> pour définir les autorisations d'accès du répertoire spécifié. Ce paramètre est également valide pour les sous-répertoires, qui peuvent contenir cinq attributs:

Options
AllowOverride
Order
Allow
Deny
  • Les options peuvent définir les options suivantes en combinaison:
    All:用户可以在此目录中作任何事情。
    ExecCGI:允许在此目录中执行CGI程序。
    FollowSymLinks:服务器可使用符号链接指向的文件或目录。
    Indexes:服务器可生成此目录的文件列表。
    None:不允许访问此目录。
  • AllowOverride déterminera s'il faut lire le fichier .htaccess dans le répertoire en fonction de la valeur définie pour modifier les autorisations définies à l'origine:
    All:读取.htaccess文件的内容,修改原来的访问权限。
    None:不读取.htaccess文件

    Pour empêcher les utilisateurs de créer des fichiers .htaccess pour modifier les autorisations d'accès, les paramètres par défaut de chaque répertoire du fichier apache2.conf sont les suivants:

    AllowOverride None。
  • Autoriser est utilisé pour définir l'hôte autorisé à accéder au serveur Apache, par exemple:
    Allow from all  # 允许所有主机的访问
    Allow from 202.96.0.97 202.96.0.98  # 允许来自指定IP地址主机的访问
  • Refuser est utilisé pour définir l'hôte qui refuse l'accès au serveur Apache, par exemple:
    Deny from all  # 拒绝来自所有主机的访问
    Deny from 202.96.0.99 202.96.0.88 # 拒绝指定IP地址主机的访问
  • Order est utilisé pour spécifier l'ordre d'autorisation et de refus: Order allow, deny

Variables booléennes du SELinux d'Apache

Pour les services réseau, SElinux n'ouvre que les exigences d'exploitation minimales. Afin de tirer parti des fonctions du serveur Apache, la valeur booléenne doit être activée pour autoriser certains comportements, notamment autoriser l'accès réseau au script httpd, permettant à httpd d'accéder à NFS et CIFS systèmes de fichiers, permettant d'exécuter le script CGI (Common Gateway Interface). Vous pouvez utiliser la commande getsebool pour interroger la variable booléenne actuelle. Ensuite, vous pouvez utiliser la commande setsebool suivante pour ouvrir la variable booléenne:

#setsebool - P httpd_enable_cgi sur

Les variables booléennes suivantes sont couramment utilisées:

allow_httpd_anon_write 禁用时这个布尔变量允许的 httpd 到只有标记文件 public_content_rw_t 类型的读取访问。启用此布尔变量将允许的 httpd 写入到文件标记与一个公共文件目录包含一个公共文件传输服务,如 public_content_rw_t 类型。
allow_httpd_mod_auth_pam 启用此布尔变量允许 mod_auth_pam 模块访问 httpd。
allow_httpd_sys_script_anon_write 这个布尔变量定义 HTTP 脚本是否允许写访问到文件标记在一个公共文件传输服务 public_content_rw_t 类型。
httpd_builtin_scripting 这个布尔变量定义 httpd 的脚本的访问。在这个布尔变量启用,往往需要为 PHP 内容。
httpd_can_network_connect 禁用时这个布尔变量防止从网络或远程端口发起连接的 HTTP 脚本和模块。打开这个布尔变量允许这种访问。
httpd_can_network_connect_db 禁用时这个布尔变量防止发起一个连接到数据库服务器的 HTTP 脚本和模块。打开这个布尔变量允许这种访问。
httpd_can_network_relay 打开这个当布尔变量的 httpd 正在使用正向或反向代理。
httpd_can_sendmail 禁用时这个布尔变量防止发送邮件的 HTTP 模块。这可以防止垃圾邮件的***漏洞中发现的 httpd。打开这个布尔变量允许 HTTP 模块发送邮件。
httpd_dbus_avahi 关闭时这个布尔变量拒绝服务的 avahi 通过 D-BUS 的 httpd 访问。打开这个布尔变量允许这种访问。
httpd_enable_cgi 禁用时这个布尔变量防止 httpd 的执行 CGI 脚本。打开这个布尔变量让 httpd 的执行 CGI 脚本。
httpd_enable_ftp_server 开放这个布尔变量会容许的 httpd 作为 FTP 服务器的 FTP 端口和行为。
httpd_enable_homedirs 禁用时这个布尔变量阻止访问用户主目录的 httpd。打开这个布尔变量允许 httpd 访问用户主目录。
httpd_execmem 启用时这个布尔变量允许 httpd 的执行程序需要的内存地址。建议不要启用这个布尔变量从安全角度来看,因为它减少了对缓冲区溢出,但是某些模块和应用程序(如 Java 和 Mono 应用)的保护需要这种特权。
httpd_ssi_exec 这个布尔变量定义服务器端包含(SSI)的网页中的元素是否可以执行。
httpd_tty_comm 这个布尔变量定义的 httpd 是否被允许访问的控制终端。这种访问通常是不需要的,但是,如配置 SSL 证书文件的情况下,终端访问所需的显示和处理一个密码提示。
httpd_use_cifs 打开这个布尔变量允许 httpd 访问 CIFS 文件系统上标记的文件,如通过 Samba 挂载的文件系统,cifs_t 类型。
httpd_use_nfs 打开这个布尔变量允许 httpd 访问 NFS 文件系统上的标记文件 nfs_t 类型,如文件系统,通过 NFS 挂载。

Types de fichiers de Apache's SELinux

Lorsque SELinux est activé, le serveur HTTP Apache (httpd) s'exécute dans le domaine httpd_t restreint par défaut et est séparé des autres services réseau restreints. Même si un service réseau est détruit par quelqu'un, les ressources de la personne et les dommages éventuels sont limités.

L'exemple suivant illustre le processus httpd sous SELinux.

$ ps -eZ | grep httpd
unconfined_u: system_r: httpd_t: s0 2850? 00:00:00 httpd
unconfined_u: system_r: httpd_t: s0 2852? 00:00:00 httpd
……

Le processus httpd lié au contexte SELinux est system_u: system_r: httpd_t: s0. Les processus httpd s'exécutent tous dans le domaine httpd_t. Le type de fichier doit être défini correctement pour l'accès httpd. Par exemple, httpd peut lire le type de fichier httpd_sys_content_t, mais ne peut ni l'écrire ni le modifier.
 
De plus, httpd ne peut pas accéder aux fichiers de type samba_share_t (fichiers contrôlés par l'accès Samba), ni accéder aux fichiers de type marqué avec user_home_t dans le répertoire personnel de l'utilisateur. L'objectif principal est d'empêcher httpd de lire et d'écrire des fichiers dans le répertoire personnel de l'utilisateur. répertoire et héritant de ses droits d’accès. Le type de fichier que httpd peut lire et écrire est httpd_sys_content_rw_t.
 
Le type de répertoire racine de document par défaut d'Apache est httpd_sys_content_t. Sauf indication contraire, httpd ne peut accéder qu'aux fichiers et sous-répertoires httpd_sys_content_t du répertoire / var / www / html /.
 
De plus, SELinux définit également certains types de fichiers pour httpd:

  • httpd_sys_content_t est principalement utilisé pour fournir des fichiers pour les services de contenu statique, tels que les fichiers utilisés par les sites Web HTML statiques. Ce type de fichier de balisage peut accéder (en lecture seule) à httpd et exécuter le script httpd. Par défaut, ce type de balises de fichier et de répertoire ne peut pas être écrit ou modifié par httpd ou d'autres processus. Remarque: Par défaut, le fichier est créé ou copié dans la balise de type / var / www / html / httpd_sys_content_t.
  • httpd_sys_script_exec_t est principalement utilisé pour définir le script cgi dans le répertoire / var / www / cgi-bin /. Par défaut, la politique SELinux empêche httpd d'exécuter des scripts CGI.
  • httpd_sys_content_rw_t utilise la balise type de httpd_sys_content_rw_t pour lire et écrire le type de fichier de balises de script httpd_sys_script_exec_t.
  • httpd_sys_content_ra_t Utilisez la balise type de httpd_sys_content_ra_t pour lire et joindre le fichier de script marqué de type httpd_sys_script_exec_t.
     
    Pour modifier le répertoire du fichier de destination du lien logiciel et ses attributs de fichier, exécutez la commande suivante
    sudo chcon -R -t httpd_sys_content_t /home/mgr/repos

    Dans le même temps, assurez-vous que l'autorisation d'opération de fichier du chemin / home / mgr / repos est 755.
     
    Description: utilisez la commande chcon pour réidentifier le type de fichier. Cependant, un tel logo n'est pas une modification permanente. Une fois le système redémarré, le logo sera changé. Pour les changements permanents de types de fichiers, les commandes semanage et restorecon sont nécessaires.

    # semanage fcontext -a -t httpd_sys_content_t "/mywebsite(/.*)?"
    # restorecon -R -v /mywebsite

    Comment utiliser les trois commandes chcon, semanage fcontext et restorecon:

  • Fonction de commande chcon
    : la commande chcon permet de modifier les attributs des fichiers SELinux, c'est-à-dire de modifier le contexte de sécurité du fichier.
    Utilisation: chcon [options]
    Options principales du fichier CONTEXT :
    -R: modifier récursivement le contexte des fichiers et répertoires .
    --reference: copie le contexte de sécurité du fichier source vers le fichier cible
    -h, --no-dereference: affecte le lien cible.
    -v, --verbose: affiche le diagnostic de chaque fichier de contrôle.
    -u, --user = USER: définit le contexte de sécurité de l'utilisateur cible.
    -r, --role = ROLE: définit le rôle du domaine de sécurité cible.
    -t, --type = TYPE: Le type de contexte de sécurité défini dans la cible.
    -l, --range = RANGE: définit le rôle ROLE défini dans la plage de contexte de sécurité cible du contexte de sécurité cible.
    -f: affiche quelques messages d'erreur.

  • fonction de commande restorecon : restaurer l'attribut du fichier d'attribut de fichier SELinux est de restaurer le contexte de sécurité du fichier.
    Utilisation: restorecon [-iFnrRv] [-e excluir] [-o nom_fichier] [-f nom_fichier | chemin d'accès ...]
    Options principales:
    -i: ignore le fichier qui n'existe pas.
    -f: nom de fichier Le fichier à traiter est enregistré dans le fichier de nom de fichier.
    -e: répertoire exclut les répertoires.
    -R -r: Traite les répertoires de manière récursive.
    -n: ne modifie pas l'étiquette du fichier.
    -o nomfichier: enregistre la liste des fichiers sous nomfichier, si le fichier est incorrect.
    -v: affiche le processus à l'écran.
    -F: Force la récupération du contexte de sécurité du fichier.
    Remarque: La commande restorecon est similaire à la commande chcon, mais elle définit le contexte de sécurité de l'objet lié au fichier en fonction du fichier de contexte de fichier de stratégie par défaut actuel. Par conséquent, l'utilisateur ne spécifie pas de contexte de sécurité. Restorecon utilise à la place l'entrée du fichier de contexte de fichier correspondant au nom de fichier. Ensuite, appliquez un contexte de sécurité spécifique et, dans certains cas, restaure le contexte de sécurité correct.

  • fonction de commande semanage fcontext : gérer le contexte de sécurité du fichier
    Utilisation:
    semanage fcontext [-S store] - {a | d | m | l | n | D} [-frst] file_spec
    semanage fcontext [-S store] - {a | d | m | l | n | D} -e
    options principales de la cible de remplacement :
    -a: ajouter
    -d: supprimer
    -m: modifier
    -l: énumérer
    -n: ne pas afficher l'en-tête de description
    -D: tout supprimer
    -f: fichier
    - s: User-
    t: type-
    r: role pour
     
    afficher les attributs de fichier à l'aide de la commande suivante:
    # ls -dZ /mywebsite

    Concernant la modification du numéro de port
     
    Selon la configuration de la politique, le service ne peut être autorisé à fonctionner que sur un numéro de port spécifique. Essayer de modifier le port sur lequel le service s'exécute, sans modifier la stratégie, peut entraîner l'échec du démarrage du service. Vérifiez d'abord que SELinux autorise HTTP à écouter sur les ports TCP, utilisez la commande:

    # semanage port -l | grep -w http_port_t
    http_port_t tcp 80, 443, 488, 8008, 8009, 8443

    Utilisez la commande pour modifier:

    # semanage port -a -t http_port_t -p tcp 12345

    Puis confirmez:

    # semanage port -l | grep -w http_port_t
    http_port_t      tcp      12345, 80, 443, 488, 8008, 8009, 8443

    Configuration du client

Modifier le fichier source après avoir sauvegardé le fichier source

sudo vim CentOS-Base.repo 
[Base]
name=base
baseurl=http://172.16.1.254/centos/7/Base/x86_64
enabled=1
gpgcheck=0
gpgkey=http://172.16.1.254/RPM-GPG-KEY-CentOS-6

sudo vim epel.repo
[epel]
name=epel
baseurl=http://172.16.1.254/epel/7/x86_64
enabled=1
gpgcheck=0
gpgkey=http://172.16.1.254/RPM-GPG-KEY-CentOS-6

Utilisez rsync pour synchroniser le site source miroir

Pour utiliser rsync pour synchroniser le site source miroir, le site doit prendre en charge le protocole rsync. J'ai constaté que l'Université chinoise des sciences et de la technologie et l'Université Tsinghua peuvent être utilisées en Chine, mais la vitesse de ma connexion à l'Université Tsinghua est trop lente. Le site miroir source par exemple.
 
Un autre avantage de l'utilisation de rsync pour la mise en miroir de sites est qu'il peut refléter différentes sources d'architecture, et même d'autres sources logicielles telles que pypi. La liste suivante répertorie les scripts que j'utilise de manière synchrone.

Synchroniser Centos 7 avec rsync

#!/bin/bash

VER='7'
REPOS=(os updates extras)

for REPO in ${REPOS[@]}
do
    rsync -auvz --delete --exclude='repodata' \
    rsync://rsync.mirrors.ustc.edu.cn/repo/centos/${VER}/${REPO}/x86_64/ ~/repo/centos/${VER}/${REPO}/x86_64/
    createrepo ~/repo/centos/${VER}/${REPO}/x86_64/
done
for REPO in ${REPOS[@]}
do
    rsync -avz --delete --exclude='repodata' \
    rsync://rsync.mirrors.ustc.edu.cn/repo/centos-altarch/${VER}/${REPO}/aarch64/ ~/repo/centos/${VER}/${REPO}/x86_64/
    createrepo ~/repo/centos/${VER}/${REPO}/x86_64/
done

Utilisez rsync pour synchroniser Centos Stream 8

#!/bin/bash

VER='8-stream'
ARCHS=(x86_64 aarch64)
REPOS=(AppStream BaseOS HighAvailability PowerTools extras)

for ARCH in ${ARCHS[@]}
do
    for REPO in ${REPOS[@]}
    do
        rsync -avuz --delete --exclude='repodata' \
        rsync://rsync.mirrors.ustc.edu.cn/repo/centos/${VER}/${REPO}/${ARCH}/ ~/repo/centos/${VER}/${REPO}/${ARCH}/
        createrepo ~/repo/centos/${VER}/${REPO}/${ARCH}/
    done
done

Utilisez rsync pour synchroniser epel

#!/bin/bash

VERS=(7 8)
ARCHS=(x86_64 aarch64)

# sync epel7
for VER in ${VERS[@]}
do
    for ARCH in ${ARCHS[@]}
    do
        rsync -avuz --delete --exclude={'repodata','debug'} \
        rsync://rsync.mirrors.ustc.edu.cn/repo/epel/${VER}/Everything/${ARCH}/ \
        ~/repo/epel/${VER}/Everything/${ARCH}
        createrepo ~/repo/epel/${VER}/Everything/${ARCH}
    done
done

Synchroniser Kubernetes avec rsync

#!/bin/bash

REPOS=(kubernetes-el7-x86_64 kubernetes-el7-aarch64 minikube-el7-x86_64)

for REPO in ${REPOS[@]}
do
    rsync -avz --delete --exclude='repodata' \
    rsync://rsync.mirrors.ustc.edu.cn/repo/kubernetes/yum/repos/${REPO} \
    ~/repo/kubernetes/yum/repos
    createrepo ~/repo/kubernetes/yum/repos
done

autres instructions

Il est relativement simple d’utiliser rsync pour synchroniser. La configuration suivante d’Apache est similaire à la précédente, je ne la répéterai donc pas. De plus, lorsque vous utilisez rsync pour synchroniser la source de l'Université des sciences et technologies de Chine, il est recommandé d'utiliser la commande suivante pour afficher le répertoire spécifique, et le répertoire source du répertoire racine repo et centos est utilisé pour l'explication .

rsync rsync://rsync://rsync.mirrors.ustc.edu.cn/repo/ # 查看根repo目录下的内容
rsync rsync://rsync://rsync.mirrors.ustc.edu.cn/repo/centos # 查看根centos目录下的内容

Je suppose que tu aimes

Origine blog.51cto.com/huanghai/2642897
conseillé
Classement