Lembro do meu primeiro acesso via SSH a um servidor Linux, eu já tinha adotado o Ubuntu como SO pessoal e já havia sido divertido/sofrido instalar e configurar tudo que precisava, mas a sensação de estar administrando um servidor em produção é incrível, executar um simples ls -la foi lindo e instalar o ambiente Apache, Mysql e PHP então… Emocionante! Essa foi uma experiência muito divertida e de muito aprendizado, surgiram varias questões que me ajudaram muito a entender como as coisas realmente funcionam.
Comece com seu site pessoal, sugiro que pegue um servidor cloud na Digital Ocean, lá tem planos a partir de 5 dólares, e configure tudo que for necessário para que ele funcione. Com certeza, mesmo com uma configuração simples, você vai aprender muito.
Essa é uma oportunidade bastante interessante de aprender, por isso abaixo listo as principais funcionalidades que precisamos quando estamos começando nessa aventura.
SSH
Uma vantagem no uso do Linux, apontada por muitos administradores de rede, é a facilidade de administrar o sistema remotamente, principalmente via linha de comando (usando o SSH). Essa é uma necessidade básica para qualquer um que vá administrar um servidor Linux .
Conectando a um servidor remoto:
ssh usuario@dominioouip
Informando uma porta para a conexão:
Ssh -o port=2222 alex@apssouza.com.br
Informando uma chave ssh na conexão:
Ssh alex@apssouza.com.br -i minhachave.pem
Criar e editar arquivos
Existem várias formas de visualizar e editar arquivos texto no terminal, e como cada um tem uma forma diferente de trabalhar é importante que dê uma olhada em cada um para entender suas particularidades.
Os mais comuns são: Vi e Nano, sendo que o Nano é mais simples de usar.
Usuários
Uma das regras de segurança mais importantes é: evitar usar o root, fazendo−o somente quando necessário. Por isso é recomendado criar um usuário comum, caso mais alguém for acessar o servidor.
Para adicionar um usuário:
adduser usuarionome
Para remover um usuário e seu diretório home:
userdel −r usuarionome
Ativando a conta root:
sudo passwd root
Trocando de usuário:
su usuarionome
Permissões
As permissões são um dos aspectos mais importantes do Linux. Elas são usadas para vários fins, mas servem principalmente para proteger o sistema e os arquivos dos usuários.
ls –la:
drwx—— … 2 wester …………. 512 Jan … 29 23:30 .. Arquivos/
-rw-rw-r– … 1 wester ……. 280232 Dec .. 16 22:41… notas.txt
O primeiro caractere da string indica o tipo de arquivo: se for “d” representa um diretório, se for “-” equivale a um arquivo. Entretanto, outros caracteres podem aparecer para indicar outros tipos de arquivos.
Você já sabe o que significa o primeiro caracter. Os demais são divididos em três grupos de três.
Tomando como exemplo a segunda linha:
rw- => a primeira parte significa permissões do proprietário
rw- => a segunda parte significa permissões do grupo ao qual o usuário pertence
r– => a terceira parte significa permissões para os demais usuários
Vamos entender agora o que significa esses caracteres (r, w, x, -):
r – leitura(read)
w – escrita(write)
x – execução (execution)
- - desabilitado
Configurando permissões (chmod)
Chegou a hora de aprender a configurar permissões e isso é feito usando o comando chmod (de change mode). Você pode configurar permissões de duas maneiras: simbolicamente e numericamente.
Simbolico: (+ = adicionar; - = retirar; = = atribuir )
Adicionando permissão de escrita para o usuário:
chmod u+w teste.old
chmod g+rw teste.old
Adicionando permissão de leitura e escrita para o grupo:
chmod g=rwx teste.old
Retirando permissão de execução dos outros:
chmod O-x teste.old
Numérico
Permissão | Binário | Decimal |
— | 000 | 0 |
–x | 001 | 1 |
-w- | 010 | 2 |
-wx | 011 | 3 |
r– | 100 | 4 |
r-x | 101 | 5 |
rw- | 110 | 6 |
rwx | 111 | 7 |
Se determinada permissão é habilitada, atribui-se valor 1, caso contrário, atribui-se o valor 0. Essa combinação de 1 e 0 é um número binário. Mas temos ainda que acrescentar a forma decimal.
Repare que, com o método numérico, usamos somente um dígito para representar uma permissão, em vez de três. Assim sendo, a string de permissões r–r–r– pode ser representa por 444, o comando então ficaria:
chmod 444 notas.txt
chmod -R 444 diretorio/
Alterando a propriedade de um arquivo/diretório(chown)
Como você já deve saber, todo arquivo ou diretório no Linux tem um dono e um grupo. E se você precisar, por algum motivo, transferir a “posse” desse arquivo/diretório para outro usuário? Fazer isso é muito fácil! Basta executar o comando:
chown novodono nomearquivooudiretorio
Alterando o grupo de um arquivo/diretório
Também é possível alterar o grupo de um arquivo ou diretório. Para isso, pode ser necessário identificar o grupo no qual o arquivo pertence. Tal procedimento pode ser feito com o comando “ls -lg nome do arquivo/diretório“, depois de identificado o nome do grupo, basta executar o comando.
chgrp nomegrupo nomearquivooudiretorio
Árvore de diretórios do Linux
Entendendo um pouco sobre o significado de cada diretório no ambiente Linux
/bin - armazena os executáveis de alguns comandos básicos do sistema (tar, cat, rm, pwd,..)
/sbin – armazena os executáveis de alguns comandos básicos de administração (ifconfig, fdisk…).
/usr - é aqui que ficam os executáveis e bibliotecas de todos os principais programas.
/etc – ficam arquivos de configuração.
/lib - ficam localizadas as bibliotecas usadas pelos comandos presentes em /bin e /sbin.
/opt - Aplicativos adicionais, que não são essenciais para o sistema.
/home – ficam os arquivos pessoais
/root – diretório pessoal do administrador
/boot - Arquivos relacionados à inicialização do sistema
/media - pontos de montagem para as mídias removíveis, como CD’s e disquetes;
/mnt – aqui ficam os pontos de montagem temporários(Ex: unidade da rede);
/srv – dados dos serviços fornecidos pelo sistema;
/dev - arquivos que servirão como interfaces para acessar ou gerenciar drives (usb, mouse etc)
/var – (variáveis)Todo arquivo que aumenta de tamanho ao longo do tempo. Ex: logs
/proc - informações sobre os recursos e processos em execução no sistema.
Conhecendo um pouco o diretório /etc
O diretório /etc contém todas as configurações do servidor, por isso deve−se conhecer todo o seu conteúdo e também ter uma preocupação especial com as permissões de arquivos nele contidos.
Alguns arquivos importantes:
passwd – É neste arquivo que ficam os usuários cadastrados no sistema. Cada linha corresponde a um usuário e o caracter “:” separa os campos
Ex apssouza:x:1001:0:Alex,,,:/home/apssouza: bin/bash
Login : Senha : Id : Gid : Nome e Dados : Diretório : Shell
shadow – Este é o arquivo mais visado pelos “intrusos”, pois é nele que ficam gravadas todas as senhas(criptografadas) de acesso ao sistema.
profile – Toda vez que um usuário logar, este arquivo é executado, por isso ele é usado para setar as variáveis de ambiente, dentre outras coisas.
hosts.deny - Hosts que não tem permissão para acessar a máquina.
hosts.allow – Hosts que tem permissão para acessar a máquina.
Tanto nos arquivos hosts.deny quanto hosts.allow pode−se usar variáveis coringa:
ALL = Todos os IPs
LOCAL = Todos os IPs locais
REMOTE = Todos os IPs remotos
Fazendo Backups
Realizar backups do sistema hoje em dia é uma tarefa essencial de todo administrador. No Linux pode−se usar o comando tar para compactar os arquivos.
Sintaxe: tar [opções] [−f arquivo]
Opções:
x : descompactar.
t : lista o conteúdo de um arquivo.
v : mostra na tela o que está sendo feito.
z : descompacta arquivos que também estejam “gzipados”.
f : especifica o nome do arquivo.
c : cria um novo arquivo.
Compactando a pasta do usuário:
tar cvzf backup.tar /home/usuario
Compactação geral do sistema e excluido alguns arquivos
tar -cvpzf /backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /
Descompactando um backup:
tar xvzf /root/backup.tar.gz
Agendando Processos (crontab)
Para agendar processos muito demorados como o download de um arquivo muito grande, ou qualquer outro processo que necessite de uma execução automática, deve−se usar basicamente dois comandos: o at ou o crontab.
O comando at agenda a execução de um comando e logo depois que esse processo ocorre este comando não será mais executado.
Para agendar processos que devem rodar periodicamente usa−se o comando crontab. Há necessidade de se editar um arquivo que possui o seguinte formato:
Minuto Hora Dia Mês Dia da Semana Comando
Onde Minuto é um intervalo de 0 a 59
Hora é um intervalo de 0 a 23
Dia de 1 a 31,
Mês de 1 a 12 e os Dias da Semana podem variar de 0 a 6 correspondendo a variação de domingo a sábado.
Para editar:
crontab −u <user> −e
Para listar:
crontab −u <user> −l
Para executar um comando de 2 em 2 minutos
0−59/2 * * * * /backup.sh
Para executar um comando de 4 em 4 horas e às 18 horas:
* 0−23/4, 18 * * * php /manipulaimagem.php
Syslogd − A Caixa Preta do Linux
Para analisar o que vem ocorrendo ou já ocorreu no sistema, o linux possui o syslogd, que funciona como uma caixa preta, guardando em arquivos, informações como: data e hora do boot , login de usuário e outros dados importantes para analisar o servidor.
Os arquivos responsáveis pelas configurações do syslogd estão no /etc/rsyslog.d
Na pasta /var/log podemos encontrar todos os tipos de logs, por exemplo /var/log/messages
Técnicas Básicas para Trabalhar com Redes
O Linux é um sistema operacional totalmente compatível com redes, dos tipos mais heterogêneos.
Para listar as interfaces de rede usa−se o comando:
ifconfig –a
Para atribuir um endereço IP para uma interface usa−se:
ifconfig eth0 <endereço> broadcast <broadcast> netmask <mascara>
Também existem as rotas para o pacote IP conseguir sair da rede local, caso haja um roteador.
Para exibir a tabela de rotas usa−se o comando: route −n ou
netstat –nr
Para adicionar uma rota:
route add default gw <Gateway> netmask 0.0.0.0 metric 1
E caso haja a necessidade de excluir uma rota usa−se:
route del <destino>
Buscando arquivos(find)
Quando estamos acessando nossa máquina via terminal e precisamos buscar um arquivo a forma mais fácil é usar o comando find.
find <local da busca> [codições] {ações} find /localdabusca -iname nomearquivodiretorio // arquivos/diretório independente de maiúscula ou minúscula find /localdabusca -type f perm 644 //só arquivo com permissão 644 find /localbusca -size +1 G //arquivos com mais de 1 g find /home -mtime +60 //arquivos modificados a mais de 60 dias find / -name “*.mp3” -exec rm -rf {}\ //buscando os arquivos mp3 e removendo-os
Buscando arquivos que contenha um determinado conteúdo (grep)
Procurando por trecho em um determinado arquivo e mostrando a linha
grep "trecho " arquivo -n
Exibe as linhas que não contenham o texto:
grep -v "trecho " arquivo.txt
Listando só os arquivos que tenha php no nome:
ls | grep “php”
Gerenciando processos
Top – O comando top é a maneira mais comum de verificar o uso de processos do sistema e constatar quais deles estão consumindo mais memória ou processamento.
Ps – O comando ps lista os processos em execução no sistema, sem informações de consumo.
pstree – Exibe os processos em forma de árvore, tornando visível a relação entre eles.
Kill – matando um processo Ex: kill PIDdoprocesso
Links simbólicos
Links simbólicos são arquivos que funcionam como atalhos ou referência a outro arquivo ou diretório.
O uso de links simbólicos no Linux é muito comum: softwares diversos costumam empregar links para bibliotecas em vez de replicar o arquivo em outro diretório. Essa é uma boa maneira, inclusive, de economizar espaço em disco e recursos do sistema.
Criando um link simbólico:
ln -s caminho/arquivooriginal caminho/arquivolinksimbólico
Quando um link simbólico é criado, ele passa a referenciar o arquivo original. Isso significa que ao ler ou editar o link simbólico, você estará lendo e editando o arquivo original.
Informações sobre a máquina
Quando queremos saber sobre as informações da máquina, podemos usar:
cat /proc/cpuinfo //exibe dados de cpu
cat /proc/meminfo //exibe dados de memoria, tbm tem “free -m”
Transferindo arquivos para o servidor (SCP)
Para transferir arquivos entre a máquina local e um servidor remoto utilizamos o commando SCP , seguindo a sintaxe abaixo:
Copiando um arquivo remoto para a máquina local:
scp user@domain:/pasta-remota/arquivo-remoto.txt /pasta-local/arquivo-local.txt
Enviando um arquivo local para um servidor remoto:
scp /pasta-local/arquivo-local.txt user@domain:/pasta-remota/arquivo-remoto.txt
Copiando pastas e subpastas do servidor remoto para máquina local:
scp -r user@domain:/pasta-remota/ /pasta-local/
Enviando pastas e subpastas da máquina local para o servidor remoto:
scp -r /pasta-local/ user@domain:/pasta-remota/
Baixando arquivos (wget)
Wget é um pacote de software livre para baixar arquivos sobre os protocolos HTTP, HTTPS e FTP. E, por padrão, é bem simples de ser executado. A sintaxe básica é:
wget [opção] [URL]
Download continuado exatamente no ponto onde foi interrompido:
wget -c http://enderecohttp/wget/arquivozip
Cria a hierarquia de diretórios quando é recebida recursivamente:
wget -r http://enderecohttp.com.br/wget
Analisando logs em tempo real(Tail)
O comando tail pode ser utilizado para examinar as últimas linhas de um arquivo. Com esse comando é possível visualizar dinamicamente o conteúdo do arquivo a medida que o arquivo é atualizado. Muito útil para acompanhar logs em tempo real.
EX:
Tail –f php.log
Essa foi uma lista das funcionalidades mais comuns quando estamos administrando um servidor Linux. Essa primeira parte foi uma versão mais básica e genérica. Nas próximas pretendo abordar mais coisas relacionados ao ambiente PHP e algumas funcionalidades mais avançadas. Até lá!
Referências
http://corporate.canaltech.com.br/tutorial/linux/Entendendo-a-estrutura-de-diretorios-do-Linux/
http://www.hardware.com.br/dicas/linux-entendendo-arvore-diretorios.html
http://www.vivaolinux.com.br/artigo/Explorando-o-wget?pagina=3
http://www.vivaolinux.com.br/dica/O-comando-tail
http://www.vivaolinux.com.br/dica/Backup-com-TAR