Setup replicado na Digital Ocean e CloudCone, mas funciona basicamente da mesma forma em qualquer server com Debian Stretch + acesso root por ssh.
Resumo:
- vamos criar um usuário comum do sistema, permitir que ele execute comandos sudo (requisitando senha)
- vamos conectar ao servidor com ssh com o novo usuário, com acesso a partir de chave pública e desabilitar acesso ssh com senha, bem como acesso ssh do root direto
- configurar um simples firewall
- instalar Docker e executá-lo sem o
sudo
- No fim há um tópico "Possíveis erros", então ao se deparar com erros, visite essa seção
Crie um usuário para não ficar o tempo tempo todo sendo root:
adduser <username>
Se depois quiser alterar a senha de um usuário:
passwd <username>
Permita que seu novo usuário possa executar comandos sudo:
usermod -a -G sudo <username>
Se estamos como root ainda, vamos trocar para o usuário <username>
:
su - <username>
Nesse momento estamos na home do user <username>
. Se executar pwd
, no terminal vai ver que estamos em /home/<username>
.
Vamos adicionar a chave pública ao ~/.ssh/authorized_keys
do nosso user pra logar com o esquema chave privada e pública.
Uma vez dentro de /home/<username>
, como user <username>
:
mkdir .ssh
Crie o arquivo .ssh/authorized_keys, coloque as chaves públicas que quiser, cada uma em uma linha. (Se não sabe sobre chaves públicas e privadas, procure saber, pesquise por ssh-keygen
.)
echo "<conteúdo do ~/.ssh/id_rsa.pub> do seu computador, por exemplo" > .ssh/authorized_keys
OU
vim .ssh/authorized_keys # cole o conteúdo e feche o arquivo
Aplique as permissões corretas, é importante por questões de segurança:
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
Troque de user novamente, voltando para root:
exit
Essa foi a forma manual, é importante saber esses passos, você pode fazer de uma forma menos manual com ssh-copy-id
:
ssh-copy-id root@SERVER-IP
No arquivo /etc/ssh/sshd_config
, a configuração "PermitRootLogin"
, deve estar como "no"
, assim:
PermitRootLogin no
Pra permitir login somente com sua public key, desabilite login com senha:
PasswordAuthentication no
Reinicie o serviço:
service ssh restart
NOTE: se seu host tem um Cloud Firewall você pode usá-lo, pode ser até melhor, menos recursos utilizados em sua instância.
sudo apt-get install -y ufw
Negando todas conexões ao servidor:
sudo ufw default deny incoming
Permitindo todas conexões saírem do servidor:
sudo ufw default allow outgoing
Habilitando ssh (22):
sudo ufw allow ssh
Habilitando http (80):
sudo ufw enable http
Habilitando https (443)
sudo ufw enable https
sudo apt-get install -y htop
https://docs.docker.com/install/linux/docker-ce/debian
Instalação:
sudo apt-get update \
&& sudo apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
sudo apt-get update \
&& sudo apt-get install -y docker-ce
https://docs.docker.com/install/linux/linux-postinstall/
Para poder executar o Docker com seu user que criamos no início do tutorial:
sudo groupadd docker
sudo usermod -aG docker $USER
Reinicie sua instância/server:
sudo reboot
Se tudo deu certo, isso vai funcionar agora:
docker run hello-world
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Se sua distribuição do linix não tem sudo
você pode ver a seguinte mensagem quando tenta usar:
-bash: sudo: command not found
Para resolver basta logar como root e instalar:
apt-get install sudo