Estou no processo de reinstalar o sistema operacional em uma máquina que será usada para hospedar alguns aplicativos para nossos negócios. Os aplicativos serão apenas locais; o acesso de clientes externos será apenas via VPN.
A configuração anterior usava um painel de controle de hospedagem (Plesk) para a maioria dos administradores, e eu estava usando outro software semelhante para a reinstalação - mas achei que deveria finalmente aprender como tudo funciona. Posso fazer a maioria das coisas que o software faria por mim, mas não estou claro sobre a simbiose disso tudo. Tudo isso é uma tentativa de me distanciar mais da terra do Configuration Programmer / Programmer , se possível.
Não consigo encontrar uma explicação completa para o que estou procurando, então pensei em fazer essa pergunta e, se as pessoas puderem me ajudar no caminho, editarei isso com as respostas e documentarei meu progresso / armadilhas. Espero que algum dia isso ajude alguém na linha.
Os detalhes:
- CentOS 5.5 x86_64
- httpd: Apache / 2.2.3
- MySQL: 5.0.77 (a ser atualizado)
- PHP: 5.1 (a ser atualizado)
Os requisitos:
- SEGURANÇA!!
- Transferência segura de arquivos
- Acesso seguro ao cliente (SSL Certs e CA)
- Armazenamento seguro de dados
- Conexão segura com outra máquina local (MySQL)
- Virtualhosts / vários subdomínios
- O email local seria bom, mas não crítico
Os passos:
Durante a instalação, verifiquei a opção Componentes do servidor pensando que eu usaria outro administrador semelhante ao Plesk. Em retrospectiva, considerando que decidi tentar seguir meu próprio caminho, essa provavelmente não foi a melhor idéia.
usuários de configuração, rede / endereço IP, etc. Yum update / upgrade.
Para atualizar o PHP e o MySQL para as versões mais recentes, tive que procurar outro repositório fora do CentOS. O IUS parece ótimo e estou feliz por encontrá-lo!
Adicione o repositório IUS ao nosso gerenciador de pacotes
cd /tmp
wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/x86_64/epel-release-1-1.ius.el5.noarch.rpm
rpm -Uvh epel-release-1-1.ius.el5.noarch.rpm
wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/x86_64/ius-release-1-4.ius.el5.noarch.rpm
rpm -Uvh ius-release-1-4.ius.el5.noarch.rpm
yum list | grep -w \.ius\. # list all the packages in the IUS repository; use this to find PHP/MySQL version and libraries you want to install
Remova a versão antiga do PHP e instale a versão mais recente do IUS
rpm -qa | grep php # to list all of the installed php packages we want to remove
yum shell # open an interactive yum shell
remove php-common php-mysql php-cli #remove installed PHP components
install php53 php53-mysql php53-cli php53-common #add packages you want
transaction solve #important!! checks for dependencies
transaction run #important!! does the actual installation of packages.
[control+d] #exit yum shell
php -v
PHP 5.3.2 (cli) (built: Apr 6 2010 18:13:45)
Atualize o MySQL do repositório IUS
/etc/init.d/mysqld stop
rpm -qa | grep mysql # to see installed mysql packages
yum shell
remove mysql mysql-server #remove installed MySQL components
install mysql51 mysql51-server mysql51-devel
transaction solve #important!! checks for dependencies
transaction run #important!! does the actual installation of packages.
[control+d] #exit yum shell
service mysqld start
mysql -v
Server version: 5.1.42-ius Distributed by The IUS Community Project
Instruções de atualização, cortesia do wiki do IUS: http://wiki.iuscommunity.org/Doc/ClientUsageGuide .
scp
e sftp
acessar, sem permitir o ssh
logincd /tmp
wget http://dag.wieers.com/rpm/packages/rssh/rssh-2.3.2-1.2.el5.rf.x86_64.rpm
rpm -ivh rssh-2.3.2-1.2.el5.rf.x86_64.rpm
useradd -m -d /home/dev -s /usr/bin/rssh dev
passwd dev
Edite /etc/rssh.conf
para conceder acesso ao SFTP aos usuários rssh.
vi /etc/rssh.conf
Remova o comentário ou adicione:
allowscp
allowsftp
Isso me permite conectar-me à máquina via protocolo SFTP no Transmit (meu programa FTP de escolha; tenho certeza de que é semelhante a outros aplicativos FTP).
Instruções rssh apropriadas (com reconhecimento!) de http://www.cyberciti.biz/tips/linux-unix-restrict-shell-access-with-rssh.html .
ifconfig eth1:1 192.168.1.3 up #start up the virtual interface
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth1 ifcfg-eth1:1 #copy default script and match name to our virtual interface
vi ifcfg-eth1:1 #modify eth1:1 script
# ifcfg-eth1: 1 | modifique para que fique assim:
DEVICE = eth1: 1
IPADDR = 192.168.1.3
NETMASK = 255.255.255.0
NETWORK = 192.168.1.0
ONBOOT = yes
NAME = eth1: 1
Adicione mais interfaces virtuais conforme necessário, repetindo. Devido à ONBOOT=yes
linha no arquivo ifcfg-eth1: 1, essa interface será exibida quando o sistema inicializar ou a rede iniciar / reiniciar.
service network restart
Desligando a interface eth0: [OK]
Desligando a interface eth1: [OK]
Desligando a interface de loopback: [OK]
Apresentando a interface de loopback: [OK]
Apresentando a interface eth0: [OK]
Apresentando a interface eth1: [OK]
ping 192.168.1.3
64 bytes de 192.168.1.3: icmp_seq = 1 ttl = 64 time = 0,105 ms
Na seção rssh acima, adicionei um usuário para usar no SFTP. No diretório inicial desse usuário, criei uma pasta chamada 'https'. É aqui que os documentos deste site estarão disponíveis, então eu preciso adicionar um host virtual que aponte para ele. Usarei a interface virtual acima para este site (aqui chamada dev.site.local).
vi /etc/http/conf/httpd.conf
Adicione o seguinte ao final do httpd.conf:
<VirtualHost 192.168.1.3:80>
ServerAdmin [email protected]
DocumentRoot /home/dev/https
ServerName dev.site.local
ErrorLog /home/dev/logs/error_log
TransferLog /home/dev/logs/access_log
</VirtualHost>
Coloquei um arquivo index.html fictício no diretório https apenas para verificar tudo. Tentei navegar até ele e recebi erros de permissão negada. Os logs apenas deram uma referência obscura ao que estava acontecendo:
[Seg 17 de maio 14:57:11 2010] [erro] [cliente 192.168.1.100] (13) Permissão negada: acesso ao /index.html negado
Eu tentei chmod 777 et. al., mas sem sucesso. Acontece que eu precisava chmod + x o diretório https e seus 'diretórios pai.
chmod +x /home
chmod +x /home/dev
chmod +x /home/dev/https
Isso resolveu esse problema.
Estou lidando com o DNS através da nossa caixa local do Windows Server 2003. No entanto, a documentação do CentOS para BIND pode ser encontrada aqui: http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-bind.html
Para que o SSL funcione, alterei o seguinte no httpd.conf:
NameVirtualHost 192.168.1.3:443 #make sure this line is in httpd.conf
<VirtualHost 192.168.1.3:443> #change port to 443
ServerAdmin [email protected]
DocumentRoot /home/dev/https
ServerName dev.site.local
ErrorLog /home/dev/logs/error_log
TransferLog /home/dev/logs/access_log
</VirtualHost>
Infelizmente, continuo recebendo erros (Código de erro: ssl_error_rx_record_too_long) ao tentar acessar uma página com SSL. Como JamesHannah apontou graciosamente abaixo , eu não havia configurado os locais dos certificados no httpd.conf e, portanto, estava recebendo a página lançada no broswer como o certificado que fazia o navegador recusar.
Então, primeiro, eu precisava configurar uma CA e criar arquivos de certificado. Encontrei um ótimo passo a passo (se antigo) sobre o processo aqui: http://www.debian-administration.org/articles/284 .
Aqui estão as etapas relevantes que tomei desse artigo:
mkdir /home/CA
cd /home/CA/
mkdir newcerts private
echo '01' > serial
touch index.txt #this and the above command are for the database that will keep track of certs
Crie um openssl.cnf
arquivo no /home/CA/
diretório e edite-o de acordo com o passo a passo vinculado acima. (Para referência, meu arquivo openssl.cnf final era assim: http://pastebin.com/raw.php?i=hnZDij4T )
openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem -out cacert.pem -days 3650 -config ./openssl.cnf #this creates the cacert.pem which gets distributed and imported to the browser(s)
Modificado openssl.cnf
novamente por instruções passo a passo.
#generates certificate request, and key.pem which I renamed dev.key.pem.
openssl req -sha1 -new -nodes -out dev.req.pem -config ./openssl.cnf
Modificado openssl.cnf
novamente por instruções passo a passo.
#create and sign certificate.
openssl ca -out dev.cert.pem -md sha1 -config ./openssl.cnf -infiles dev.req.pem
IMPORTANTE!
Mova os arquivos e faça referência a eles no httpd.conf no novo local
cp dev.cert.pem /home/dev/certs/cert.pem
cp dev.key.pem /home/certs/key.pem
Atualizei o httpd.conf para refletir os certificados e ativar o SSLEngine:
NameVirtualHost 192.168.1.3:443
<VirtualHost 192.168.1.3:443>
ServerAdmin [email protected]
DocumentRoot /home/dev/https
SSLEngine on
SSLCertificateFile /home/dev/certs/cert.pem
SSLCertificateKeyFile /home/dev/certs/key.pem
ServerName dev.site.local
ErrorLog /home/dev/logs/error_log
TransferLog /home/dev/logs/access_log
</VirtualHost>
Coloque o CA cert.pem em um local acessível pela Web e faça o download / importe para o meu navegador. Agora posso visitar https: //dev.site.local sem erros ou avisos.
E é aqui que estou. Continuarei editando isso à medida que progredir. Serão apreciadas quaisquer dicas sobre como configurar o email SSL e / ou configurar a conexão segura com outra caixa que será o servidor MySQL.
Respostas:
Este guia tem muitas respostas sobre o uso do SSL com o Apache, mostra como criar um certificado autoassinado, como obter um certificado adequado de uma CA (autoridade de certificação reconhecida) e como criar sua própria CA não confiável para criar uma certificado completo. http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html
Quanto aos hosts virtuais e SSL, cada host precisará de seu próprio endereço IP ou uma solução mais suja é hospedá-los em portas diferentes do que o padrão
:443
devido à natureza dos certificados SSL, a hospedagem virtual baseada em nome não se dá bem com SSL; é por isso que você precisa de outro método para se diferenciar; portas / IPs diferentes.A configuração do SSH é bastante fácil, já deve estar em execução no seu servidor. Você vai querer fazer várias coisas para travá-lo.
Pode ser adicionado ao seu
/etc/ssh/sshd_config
para restringir o acesso remoto à raiz e remover a autenticação de senha, em vez disso, usando pares de chaves públicos / privados para efetuar login.Para criar seu par de chaves SSH, você pode usar
puttygen
no Windows; http://putty.very.rulez.org/download.html ou você pode criar o par de chaves em um ambiente Linux assim:ssh-keygen -b 2048 -t RSA -f my_keypair
. Isso criará ummy_keypair
arquivo e ummy_keypair.pub
arquivo (nomeado apenas para este exemplo, eu sugiro nomear seu nome de usuário ou deixá-lo de fora-f
e deixá-lo gerar~/.ssh/id_rsa
).Transfira
my_keypair
com segurança para sua estação de trabalho, para acesso futuro ao SSH, esta é a chave privada, você não deve compartilhá-la com ninguém. Em seguida, no servidor, crie$HOME/.ssh
se ele ainda não existir emkdir ~/.ssh
, em seguida, copie a chave pública (my_keypair.pub
) para~/.ssh/
, se você já tiverauthorized_keys
entrado~/.ssh
porque já fez isso por outras coisas, pode fazercat my_keypair.pub >> authorized_keys
para anexar sua chave pública oucp my_keypair.pub authorized_keys
se isso não existe.Agora execute
chmod 700 ~/.ssh
echmod 644 ~/.ssh/my_keypair.pub ~/.ssh/authorized_keys
para definir permissões. Você pode manter uma cópia domy_keypair
in~/.ssh/
para uso ao se conectar a outros hosts, mas deve fazer issochmod 600 ~/.ssh/my_keypair
para garantir que ninguém mais possa acessá-lo.Você deseja adicionar uma conta de usuário normal e adicionar-se a um grupo que não seja
users
, comoadmins
no meu exemplo.Você provavelmente também desejará adicionar seu usuário ou grupo
/etc/sudoers
para ativar osudo
uso, caso ainda não o tenha feito. Isso é realizado com o comando,visudo
que é a única maneira de editar este arquivo.visudo
executa a verificação de erros e sintaxe na sua configuração antes de escrevê-la, evitando a perda desudo
uso.adicionado ao
/etc/sudoers
permitiráusername
executarsudo yum install blah
e solicitará sua própria senha. Isso é útil no caso de você ter outros administradores ou administradores temporários, não precisar compartilhar a senha root.fonte
O problema com a sua configuração SSL é que você não ativou o SSL, você precisaria das diretivas Apache para isso:
Sem isso, você obterá esses erros por muito tempo, porque, em vez dos cabeçalhos SSL que seu navegador estava esperando, está recebendo apenas a página da Web não criptografada em um grande pedaço.
fonte
O MySQL do pacote original suporta SSL. Para verificar sua compilação do MySQL, execute
Você deve encontrar algo parecido
have_ssl yes
. Configurar as opçõesssl-ca
,ssl-key
essl-cert
.Crie contas de usuário com requisitos de SSL:
fonte