Configurar um site espelho é adequado para intranets e redes isoladas. Em particular, há dois sentimentos sobre o ativo e nenhuma fonte na rede isolada. Aqui, tomo o sistema CentOS como um exemplo para registrar minha própria experiência de configuração de um site espelho. .
Use reposync para sincronizar
Instale a ferramenta de sincronização
No passado, a ferramenta rsync plus createrepo era usada para gerar metadados para sincronização, mas agora existe uma maneira melhor de usar a ferramenta reposync no CentOS.
# CentOS 7
sudo yum install yum-utils
# CentOS 8
sudo dns install dnf-utils
Sincronizar o armazém padrão
Após a conclusão da instalação, você pode executar imediatamente a sincronização do warehouse.
O repositório padrão do CentOS 7 contém:
- base
- atualizações
- extras
O repositório padrão do CentOS 8 contém:
Primeira sincronização
// CentOS 7
sudo reposync --download-metadata -p /home/repos
// CentOS 8
sudo dnf reposync --download-metadata --destdir /home/repos
Descrição:
- "--Download-metadata" baixa os metadados, caso contrário, você precisa usar o createrepo para gerar.
- "-P" e "--destdir" especificam o diretório de armazenamento, o padrão é o diretório atual onde o comando é executado.
- O comando acima irá sincronizar todas as fontes atuais válidas, você pode usar o comando "yum repolist" para ver, ou ver a descrição em "[]" no arquivo .repo, e habilitar = 1 ao mesmo tempo.
Sincronização de atualização
// CentOS 7
sudo reposync --download-metadata -p /home/repos --delete -n
Descrição:
- "--Delete" exclui pacotes que não existem no warehouse.
- "-N" apenas atualiza a atualização incremental mais recente.
Atualizar EPEL
EPEL: Pacotes extras para Enterprise Linux, que são necessários em muitos lugares como uma fonte importante do CentOS.
- Instalar fonte epel
// CentOS 7
sudo yum install epel-release
// CentOS 8
- Atualizar fonte epel
O método de operação pode usar a atualização incremental acima ou "-repo <repo_id>" para atualizar a fonte especificada.
// CentOS 7
sudo reposync --download-metadata -p /home/repo --repo epel
// CentOS 8
sudo dnf reposync --download-metadata -p /home/repo --repo epel
De acordo com o documento oficial da EPEL, se EPEL for usado no CentOS 8, é recomendado habilitar a fonte de ferramentas elétricas
sudo dnf reposync --download-metadata -p /home/repo --repo powertools
Atualize o espelho de origem de outras arquiteturas
Antes de atualizar a imagem de origem de outras arquiteturas (principalmente ARM), usei o QEMU para virtualizar uma máquina virtual aarch64. Embora o problema tenha sido resolvido, não foi tão rápido quanto x86_64. Além disso, se você usar o vbox no Windows, você ainda trabalha Não consigo resolver o problema de virtualização de aarch64, então estudei novamente.
Uma é olhar para os parâmetros: reposync ou dnf reposync tem uma opção de parâmetro --arch, que se parece com isso, mas não teve sucesso, mas o pacote noarch foi sincronizado; a outra é alterar o URL de origem, que foi bem-sucedido A seguir está o tempo de modificação. Diversas variáveis que precisam ser explicadas.
- $ releasever: O número da versão de lançamento do sistema atual, como "7", você pode usar o seguinte comando para visualizar
rpm -q --qf %{version} centos-release
- $ basearch: A arquitetura da CPU do sistema atual, como "x86_64", "aarch64", você pode usar o seguinte comando para visualizar
rpm -q --qf %{arch} centos-release
- $ infra: is stock, as variáveis personalizadas no diretório / etc / yum / vars /
também podem ver as informações do pacote centos-release através do seguinte comandorpm -qi centos-release
Depois de conhecer as variáveis acima, você pode especificar $ basearch como a organização que precisa ser sincronizada para realizar as operações de sincronização de origem. Por exemplo, modifique $ basearch para aarch64 para sincronizar os pacotes aarch64.
Instalar site espelho
O site é implementado usando Apache (porque o sistema vem com ele).
Instale o Apache
sudo yum install httpd -y
Configurar Apache
Novo arquivo de configuração repos.conf para o site espelho de origem
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>
Descrição do atributo Apache
O Apache usa <Directory> ... </Directory> para definir as permissões de acesso do diretório especificado. Esta configuração também é válida para subdiretórios, que podem conter cinco atributos:
Options
AllowOverride
Order
Allow
Deny
- As opções podem definir as seguintes opções em combinação:
All:用户可以在此目录中作任何事情。 ExecCGI:允许在此目录中执行CGI程序。 FollowSymLinks:服务器可使用符号链接指向的文件或目录。 Indexes:服务器可生成此目录的文件列表。 None:不允许访问此目录。
- AllowOverride determinará se deve ler o arquivo .htaccess no diretório de acordo com o valor definido para alterar as permissões originalmente definidas:
All:读取.htaccess文件的内容,修改原来的访问权限。 None:不读取.htaccess文件
Para evitar que os usuários criem arquivos .htaccess para modificar as permissões de acesso, as configurações padrão para cada diretório no arquivo apache2.conf são:
AllowOverride None。
- Permitir é usado para definir o host que tem permissão para acessar o servidor Apache, por exemplo:
Allow from all # 允许所有主机的访问 Allow from 202.96.0.97 202.96.0.98 # 允许来自指定IP地址主机的访问
- Negar é usado para definir o host que nega acesso ao servidor Apache, por exemplo:
Deny from all # 拒绝来自所有主机的访问 Deny from 202.96.0.99 202.96.0.88 # 拒绝指定IP地址主机的访问
- A ordem é usada para especificar a ordem de permitir e negar: Ordem, permitir, negar
Variáveis booleanas do SELinux do Apache
Para serviços de rede, o SElinux abre apenas os requisitos operacionais mínimos. Para aproveitar as vantagens das funções do servidor Apache, o valor booleano deve ser ativado para permitir certos comportamentos, incluindo permitir acesso à rede de script httpd, permitindo que httpd acesse NFS e CIFS sistemas de arquivos, permitindo Executar o script CGI (Common Gateway Interface). Você pode usar o comando getsebool para consultar a variável booleana atual. Em seguida, você pode usar o seguinte comando setsebool para abrir a variável booleana:
#setsebool - P httpd_enable_cgi on
As seguintes são variáveis booleanas comumente usadas:
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 挂载。
Tipos de arquivo do SELinux do Apache
Quando o SELinux está habilitado, o servidor Apache HTTP (httpd) é executado no domínio httpd_t restrito por padrão e é separado de outros serviços de rede restritos. Mesmo que um serviço de rede seja destruído por alguém, os recursos da pessoa e possíveis danos são limitados.
O exemplo a seguir demonstra o processo httpd no 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
……
O processo httpd relacionado ao contexto SELinux é system_u: system_r: httpd_t: s0. Os processos httpd estão todos em execução no domínio httpd_t. O tipo de arquivo deve ser definido corretamente para acesso httpd. Por exemplo, httpd pode ler o tipo de arquivo httpd_sys_content_t, mas não pode gravá-lo ou modificá-lo.
Além disso, o httpd não pode acessar arquivos do tipo samba_share_t (arquivos controlados pelo acesso Samba), nem pode acessar arquivos do tipo marcado com user_home_t no diretório home do usuário. O principal objetivo é evitar que o httpd leia e grave arquivos na casa do usuário diretório e herdando suas permissões de acesso. O tipo de arquivo que httpd pode ler e gravar é httpd_sys_content_rw_t.
O tipo de diretório raiz de documento padrão do Apache é httpd_sys_content_t. A menos que seja definido de outra forma, httpd pode acessar somente arquivos httpd_sys_content_t e subdiretórios no diretório / var / www / html /.
Além disso, o SELinux também define alguns tipos de arquivo para httpd:
- httpd_sys_content_t é usado principalmente para fornecer arquivos para serviços de conteúdo estático, como arquivos usados por sites HTML estáticos. Este tipo de arquivo de marcação pode acessar (somente leitura) httpd e executar o script httpd. Por padrão, este tipo de tag de arquivo e diretório não pode ser escrito ou modificado por httpd ou outros processos. Nota: Por padrão, o arquivo criado ou copiado para a tag de tipo / var / www / html / httpd_sys_content_t.
- httpd_sys_script_exec_t é usado principalmente para definir o script cgi no diretório / var / www / cgi-bin /. Por padrão, a política SELinux impede que o httpd execute scripts CGI.
- httpd_sys_content_rw_t usa a tag de tipo de httpd_sys_content_rw_t para ler e gravar o tipo de arquivo de tag de script httpd_sys_script_exec_t.
- httpd_sys_content_ra_t Use a tag de tipo de httpd_sys_content_ra_t para ler e anexar o tipo de arquivo de script marcado httpd_sys_script_exec_t.
Para alterar o diretório do arquivo de destino do link simbólico e seus atributos de arquivo, execute o seguinte comandosudo chcon -R -t httpd_sys_content_t /home/mgr/repos
Ao mesmo tempo, certifique-se de que a permissão de operação de arquivo do caminho / home / mgr / repos seja 755.
Descrição: Use o comando chcon para reidentificar o tipo de arquivo. No entanto, esse logotipo não é uma modificação permanente. Assim que o sistema for reiniciado, o logotipo será alterado novamente. Para mudanças permanentes de tipos de arquivo, os comandos semanage e restorecon são necessários.# semanage fcontext -a -t httpd_sys_content_t "/mywebsite(/.*)?" # restorecon -R -v /mywebsite
Como usar os três comandos chcon, semanage fcontext e restorecon:
função do comando chcon : o comando chcon é usado para alterar os atributos dos arquivos SELinux, ou seja, para modificar o contexto de segurança do arquivo.
Uso: chcon [opções]
Opções principais do arquivo CONTEXTO :
-R: altera recursivamente o contexto dos arquivos e diretórios .
--reference: copia o contexto de segurança do arquivo de origem para o arquivo de destino
-h, --no-dereference: afeta o link de destino.
-v, --verbose: produz o diagnóstico de cada arquivo de verificação.
-u, --user = USER: Define o contexto de segurança do usuário alvo.
-r, --role = ROLE: Defina a função do domínio de segurança de destino.
-t, --type = TYPE: O tipo de contexto de segurança definido no destino.
-l, --range = RANGE: define a função definida ROLE no intervalo de contexto de segurança de destino do contexto de segurança de destino.
-f: Exibe algumas mensagens de erro.- comando restorecon
função: restaurar atributo SELinux arquivo atributo de arquivo é restaurar o contexto do arquivo de segurança.
Uso: restorecon [-iFnrRv] [-e ExcludeDir] [-o arquivo] [nome do arquivo -f | caminho ...]
opções principais:
-i: ignora o arquivo que não existe.
-f: infilename O arquivo a ser processado é registrado no arquivo infilename.
-e: diretório exclui diretórios.
-R -r: Processa diretórios recursivamente.
-n: Não altera o rótulo do arquivo.
-o outfilename: salva a lista de arquivos em outfilename, se o arquivo estiver incorreto.
-v: Exibe o processo na tela.
-F: Força a recuperação do contexto de segurança do arquivo.
Nota: O comando restorecon é semelhante ao comando chcon, mas define o contexto de segurança do objeto relacionado ao arquivo com base no arquivo de contexto de arquivo padrão da política atual. Portanto, o usuário não especifica um contexto de segurança. Em vez disso, o restorecon usa a entrada do arquivo de contexto do arquivo para corresponder ao nome do arquivo. Em seguida, aplique um contexto de segurança específico e, em alguns casos, está restaurando o contexto de segurança correto.
função de comando semanage fcontext : gerenciar contexto de segurança de arquivo
Uso:
semanage fcontext [-S store] - {a | d | m | l | n | D} [-frst] file_spec semanage
fcontext [-S store] - {a | d | m | l | n | D} -e
opções principais de destino de substituição :
-a: adicionar
-d: excluir
-m: modificar
-l: enumerar
-n: não imprimir o cabeçalho de descrição
-D: excluir todos
-f: arquivo
- s: User-
t: type-
r: role para
visualizar os atributos do arquivo usando o seguinte comando:# ls -dZ /mywebsite
Sobre a alteração do número da porta
De acordo com a configuração da política, o serviço só pode ser executado em um número de porta específico. Tentar alterar a porta na qual o serviço é executado, sem alterar a política, pode fazer com que o serviço falhe ao iniciar. Primeiro, verifique se o SELinux permite que o HTTP escute nas portas TCP, use o comando:# semanage port -l | grep -w http_port_t http_port_t tcp 80, 443, 488, 8008, 8009, 8443
Use o comando para modificar:
# semanage port -a -t http_port_t -p tcp 12345
Em seguida, confirme:
# semanage port -l | grep -w http_port_t http_port_t tcp 12345, 80, 443, 488, 8008, 8009, 8443
Configuração de cliente
Modifique o arquivo de origem após fazer backup do arquivo de origem
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
Use rsync para sincronizar o site de origem espelho
Para usar o rsync para sincronizar o site de origem do espelho, o site precisa oferecer suporte ao protocolo rsync. Descobri que a China University of Science and Technology e a Tsinghua University podem ser usadas na China, mas a velocidade da minha conexão com a Tsinghua University é muito lenta. O site espelho de origem, por exemplo.
Outra vantagem de usar rsync para espelhamento de site é que ele pode espelhar diferentes fontes de arquitetura e até mesmo outras fontes de software, como pypi. A seguir estão os scripts que utilizo de forma síncrona.
Sincronizar Centos 7 com 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
Use rsync para sincronizar 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
Use rsync para sincronizar 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
Sincronizar Kubernetes com 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
outras instruções
É relativamente simples usar o rsync para sincronizar. A configuração subsequente do Apache é semelhante à anterior, então não vou repeti-la. Além disso, quando você usa rsync para sincronizar a fonte da Universidade de Ciência e Tecnologia da China, é recomendado usar o seguinte comando para visualizar o diretório específico, e o diretório fonte do diretório raiz repo e centos é usado para explicação .
rsync rsync://rsync://rsync.mirrors.ustc.edu.cn/repo/ # 查看根repo目录下的内容
rsync rsync://rsync://rsync.mirrors.ustc.edu.cn/repo/centos # 查看根centos目录下的内容