Este capítulo explicará o básico para você navegar dentro do seu Sistema Linux, os principais diretórios, comandos mais usados, arquivos importantes, gerenciamento de usuários e grupos e como funciona o Sistema de Permissões do Linux.
Estrutura:
Neste capítulo discutiremos os seguintes tópicos:
O que é Bash
- Introdução
- Comandos Básicos
- Gerenciando arquivos e diretórios
- Estrutura de Diretórios
- Arquivos importantes
- Personalizando seu ambiente
Gerenciamento de Usuários e Grupos
- Criando e modificando usuários
- Criar e modificar grupos
- Trabalhando com permissões
- Alterando permissões de leitura e gravação
- Alterar proprietário de arquivos e executar Scripts
O que é Bash
Bash é uma abreviação do Bourne Again Shell é como uma versão melhorada do Shell legado, que costumávamos ver em sistemas Linux/Unix mais antigos, é essa versão que temos muitos recursos como criar funções, controlar empregos em primeiro plano e fundo, criar codinomes, personalizar seu ambiente, colocar cor em seu terminal, novos atalhos, autocompletar e muitos outros recursos que vamos ver neste capítulo. Só para lhe dar mais contexto sobre isso, shell é a interface no Linux que é usada para administrar o sistema, ou seja, é onde executamos todos os comandos.
É também uma linguagem de programação, muitas vezes entre os usuários de Linux vemos o termo Shell Scripting, o que significa?
Isso significa que podemos colocar todos os comandos do Linux juntos em um arquivo, dar permissão para executá-lo e automatizar seu trabalho diário.
Shell Script é o canivete suiço dos Administradores Linux, hoje é frequentemente desafiado com Python. Que é uma linguagem orientada a objetos e tem um monte de recursos que são muito fáceis de usar se compararmos com o Shell Script.
No entanto, sempre será a ferramenta favorita de todos os administradores Linux para automatizar tarefas simples.
Introdução
No capítulo anterior configuramos e instalamos nosso Sistema Linux e conseguimos acessá-lo usando a ferramenta SSH, portanto o ponto que paramos é como é mostrado abaixo.
ssh alisson@192.168.178.62 Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-76-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information disabled due to load higher than 1.0 * Multipass 1.0 is out! Get Ubuntu VMs on demand on your Linux, Windows or Mac. Supports cloud-init for fast, local, cloud devops simulation. https://multipass.run/ 60 packages can be updated. 6 updates are security updates. Last login: Mon Feb 10 18:59:46 2020 To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. alisson@devops:~$
Significa que estamos dentro do Linux Shell, agora vamos chamá-lo de Bash, porque é o intérprete da linha de comando usada.
Todo sistema operacional tem seu próprio intérprete de linha de comando, para administrar o sistema, em versões antigas do Windows tínhamos o MS DOS, agora temos o Power Shell, em versões mais antigas do Linux tivemos o Shell, agora temos o Bash e alguns usuários estão migrando de Bash para ZShell, vou mostrar nas próximas páginas como podemos mudar nosso intérprete de linha de comando, de uma forma curta CLI (Command Line Interpreter).
Dentro do seu servidor, o comando mais útil é chamado ls.
alisson@devops:~$ ls id_rsa.pub
Este comando é usado para mostrar os arquivos e os diretórios no Linux, ele pode ser usado com diferentes parâmetros, por exemplo, se eu quiser mostrar os arquivos e diretórios em um modo detalhado, eu posso passar o parâmetro -l.
alisson@devops:~$ ls -l total de 4 -rw-rw-r-- 1 alisson alisson 398 Jan 31 20:18 id_rsa.pub alisson@devops:~$
A última saída nos mostrou mais informações após essa sequência.
Permissões – Número dos Links Rígidos – Usuário – Grupo – Tamanho – Última Data de Modificação – Nome de arquivo
Esse tipo de informação se chama Metadados, mas por que tem esse nome? Como temos um arquivo, que contém os dados que usamos e esses dados são os dados sobre o arquivo, que são utilizados pelo sistema operacional, um exemplo, nem sempre precisamos saber o tamanho de um arquivo, mas o sistema operacional sempre precisa desse tipo de informação, pois precisa calcular quanto espaço no disco foi usado e o quanto esta livre.
Se você quiser ver mais sobre os metadados de um arquivo, você pode a estatística de comando:
alisson@devops:~$ stat id_rsa.pub File: id_rsa.pub Size: 398 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 532800 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1000/ alisson) Gid: ( 1000/ alisson) Access: 2020-01-31 20:20:23.741638861 +0000 Modify: 2020-01-31 20:18:39.467733742 +0000 Change: 2020-01-31 20:18:39.467733742 +0000 Birth: -
Este comando mostra todos os metadados sobre o arquivo e em um formulário detalhado.
Um parâmetro muito interessante dos ls, é o -a, que vai mostrar todos os arquivos, incluindo os arquivos ocultos, no Linux, todos os arquivos ocultos começa com . (ponto) no início, por exemplo:
alisson@devops:~$ ls -la total 40 drwxr-xr-x 5 alisson alisson 4096 Jan 31 20:20 . drwxr-xr-x 3 root root 4096 Jan 31 19:40 .. -rw------- 1 alisson alisson 113 Jan 31 20:20 .bash_history -rw-r--r-- 1 alisson alisson 220 Apr 4 2018 .bash_logout -rw-r--r-- 1 alisson alisson 3771 Apr 4 2018 .bashrc drwx------ 2 alisson alisson 4096 Jan 31 19:41 .cache drwx------ 3 alisson alisson 4096 Jan 31 19:41 .gnupg -rw-rw-r-- 1 alisson alisson 398 Jan 31 20:18 id_rsa.pub -rw-r--r-- 1 alisson alisson 807 Apr 4 2018 .profile drwxrwxr-x 2 alisson alisson 4096 Jan 31 20:20 .ssh
Podemos ver muitos arquivos agora, como o .bashrc ou .bash_history ou o diretório oculto .ssh, que usamos no primeiro capítulo para salvar nossa chave pública para acessar o servidor sem qualquer senha.
Se você quiser ver o conteúdo de um arquivo, você pode usar o gato de comando.
alisson@devops:~$ cat .bash_logout # ~/.bash_logout: executed by bash(1) when login shell exits. # when leaving the console clear the screen to increase privacy if [ "$SHLVL" = 1 ]; then [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q fi
Usando o comando cat, pudemos ver o conteúdo do .bash_logout arquivo, este arquivo é importante, pois ele nos permite executar comandos no momento em que estamos saindo do servidor.
Para mostrar uma mensagem na tela podemos usar o echo de comando.
alisson@devops:~$ echo Message on Terminal Message on Terminal
Este comando é frequentemente usado para criar um arquivo também.
alisson@devops:~$ echo Creating a file > message.txt alisson@devops:~$ ls id_rsa.pub message.txt alisson@devops:~$ cat message.txt Creating a file
Dica: - Podemos usar redirecionadores no script shell para enviar saídas de comandos para gravar arquivos.
Existem muitos redirecionadores, mas os mais utilizados são ">" e ">>".
Se você usar ">" após um comando, a saída padrão do comando será redirecionada para um arquivo
que você precisa especificar, mas atenção, se você selecionar um arquivo existente, o redirecionador irá
substituí-lo.
Se você usar ">>" após um comando, a saída padrão do comando será redirecionada para um arquivo
que você precisa especificar também, mas se você selecionar um arquivo existente, o redirecionador irá apenhá-lo e
não substituir.
Para gerenciar arquivos, a maioria dos comandos usa a mesma sintaxe, se quiser copiar, mover ou renomear um arquivo, podemos usar COMMAND <SOURCE FILE> <DESTINATION FILE>
Renomeando um arquivo:
alisson@devops:~$ mv message.txt file.txt alisson@devops:~$ ls file.txt id_rsa.pub
Copiando um arquivo:
alisson@devops:~$ cp file.txt file2.txt alisson@devops:~$ ls file2.txt file.txt id_rsa.pub
No primeiro capítulo editamos um arquivo chamado authorized_keys, se quisermos verificar este arquivo novamente, podemos acessar o diretório usando o comando cd.
alisson@devops:~$ cd .ssh/ alisson@devops:~/.ssh$ ls authorized_keys
Podemos verificar o conteúdo do arquivo novamente:
alisson@devops:~/.ssh$ cat authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQChi8HX26xv9Rk9gz47Qhb+Tu7MRqGIyPxnheIeEgFad/dlqG4w4pY7y5dtx5LNGE9C01varco5dZagqsHplI7M+5ECSvjAuS6b5rkYZwZiZruDXxckcQHFpr2yIz3DOzKRTUc5Hg5JHF5aymiqyVfTsxL/aI/LDY8Ikh+INn3S9+b5bZtU+74tA6yuqth5SCtNSWwMUlv7QL6ONHtQiviAjBe+ksDBBV6thWz2ZIJA/jApSIBJWK9AWmZwq2hFy9sOZArUDB2Kt6kl3rIZnHpqJ/GMUCxFhtggYamJ5J2H6277qLFqLZ/8tum9uc5l/lSWYKTDm2+E/prQfmFrxPf9 1511 mxti@avell
Se você precisa saber o diretório em que você está trabalhando:
alisson@devops:~/.ssh$ pwd /home/alisson/.ssh
E se você quiser ir para o diretório anterior novamente, você pode usar o cd de comando usando dois pontos .. .
alisson@devops:~/.ssh$ cd .. alisson@devops:~$ pwd /home/alisson
Gerenciando arquivos e diretórios
Depois de conhecer alguns comandos básicos é importante saber como navegar entre os diretórios, conhecer os arquivos dentro deles e o que podemos fazer usando esses arquivos.
Então agora vamos ver o que significa o diretório raiz, onde estão os arquivos de configuração, o que esses arquivos fazem para o nosso Sistema Linux e como podemos personalizar o ambiente.
Estrutura de Diretórios
Para ver a estrutura básica dos diretórios no Linux, você pode usar o seguinte comando:
alisson@devops:~$ ls / bin cdrom etc initrd.img lib lost+found mnt proc run snap swap.img tmp var vmlinuz.old boot dev home initrd.img.old lib64 mídia opt root sbin srv sys usr vmlinuz
Aqui temos alguns diretórios; Vou explicar o mais importante deles.
- /: É o diretório raiz e tudo o que roda em seu sistema Linux está abaixo deste diretório.
- /etc: Este diretório armazena todos os arquivos de configuração no Linux
- /var: Este diretório armazena os arquivos de logs e dados de alguns serviços, por exemplo: se você tiver uma instalação do MySQL Server em seu sistema, você pode encontrar todos os dados armazenados dentro de /var/lib/mysql/data
- /lib: Aqui você encontrará as bibliotecas do seu sistema, não precisamos acessar muitas vezes este diretório, mas é importante saber, por exemplo, que os módulos do kernel são armazenados em /lib/módulos
- /bin: Este diretório armazena os binários, ou seja, os programas que são necessários para suas Palavras Linux, por exemplo, os comandos ls,ele é encontrado neste diretório.
- /usr: Aqui você pode encontrar alguns binários, como o /bin, mas os binários instalados aqui eles não são necessários para que o seu sistema funcione, por exemplo, /usr/bin/at, este binário permite que você agende uma tarefa para executar em seu sistema, mas você pode viver sem isso.
- /boot: Este diretório você pode encontrar seu kernel instalado, na minha versão atual: /boot/vmlinuz-4.15.0-76-genérico
- /proc: O processo atual em execução, um fato sobre este diretório, ele só existe quando o seu Linux está ligado, se você tiver uma inicialização dupla e tentar montar sua partição Linux, você poderá ver todos os diretórios, menos o /proc, porque é o seu conteúdo de memória RAM.
- /opt: Geralmente ele fica vazio após a sua instalação, mas quando você compila um programa, é uma prática recomendada colocar os binários e os arquivos de configuração neste diretório.
- /sbin: aqui é exatamente como o /bin, mas os binários aqui, eles exigiram permissões de administração, por exemplo, se você quiser formatar uma partição, você vai chamar o comando /sbin/fdisk e você não pode executar este comando como um usuário comum.
- /home: Neste diretório você encontrará o diretório doméstico de todos os usuários comuns, a única exceção é a raiz do usuário, seu diretório doméstico pode ser encontrado em /root.
- /mnt: Aqui você pode usar para montar compartilhamentos de rede, você pendrive, sdcard e outro tipo de volumes externos.
Estes são os diretórios mais importantes que você pode encontrar em seu Sistema Linux e eles farão parte do seu dia a dia.
Arquivos importantes
Agora que você já conhece os diretórios importantes, vamos entrar neles e ver os arquivos que são importantes para o nosso sistema funciona.
Um arquivo importante é o /etc/passwd, este arquivo é responsável por armazenar todos os usuários de Linux, podemos dar uma olhada em seu conteúdo usando o comando cat.
alisson@devops:~$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync
Este foi um exemplo das primeiras 5 linhas, sua estrutura segue esta sequência:
Usuário – senha – id do usuário – identificação do grupo – comentário – pasta home – shell
Os dados são separados por dois pontos (:), é importante saber, o shell Linux tem muitos comandos úteis para trabalhar com esse tipo de arquivo.
Por exemplo, poderíamos usar o cut de comando para ver apenas as informações que queremos.
alisson@devops:~$ cut -f 1,6,7 -d : /etc/passwd root:/root:/bin/bash daemon:/usr/sbin:/usr/sbin/nologin bin:/bin:/usr/sbin/nologin sys:/dev:/usr/sbin/nologin
Assim, no exemplo imprimi apenas as colunas 1,6,7 que correspondem ao usuário, diretorio home e shell.
Eu não estou mostrando toda a saída do comando, mas provavelmente esta vendo o arquivo completo, então se você quiser mostrar apenas as primeiras 3 linhas de qualquer arquivo, você pode usar o comando head, por padrão este comando mostrar as primeiras 10 linhas de um arquivo, mas temos o parâmetro -n onde podemos definir quantas linhas queremos ver.
Por exemplo:
alisson@devops:~$ head -n 3 /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin
No Linux também é possível concatenar os comandos, se você quiser ver apenas as primeiras 3 linhas e apenas as colunas 1,6,7 como fizemos com o comando cut, podemos usar o pipe ( | ), esta instrução tem a função de utilizar a saída do último comando como parametro para o próximo.
Exemplo:
alisson@devops:~$ head -n3 /etc/passwd | cut -f 1,6,7 -d : root:/root:/bin/bash daemon:/usr/sbin:/usr/sbin/nologin bin:/bin:/usr/sbin/nologin
Portanto, toda vez que você quiser concatenar comandos você deve usar o pipe |.
Um ponto interessante e a segunda coluna do arquivo /etc/passwd, eu tinha escrito que é a senha, mas só podemos ver um x, esse caractere representa a senha criptografada, o hash pode ser encontrado no arquivo /etc/shadow.
alisson@devops:~$ sudo head -n3 /etc/shadow [sudo] password for alisson: root:*:18113:0:99999:7::: daemon:*:18113:0:99999:7::: bin:*:18113:0:99999:7:::
Para ver o conteúdo deste arquivo, você precisa executar o comando sudo do comando head. O comando sudo significa substitute user do, de uma forma simples estamos executando o comando head como outro usuário, se você não especificar o usuário por padrão o usuário é root. A senha é a mesma que definimos na instalação, se você definiu a mesma senha que eu, é devops.
Para ver a senha do seu usuário, podemos usar o comando grep, este comando encontrará a linha que corresponde aos nossos critérios de pesquisa.
Exemplo:
alisson@devops:~$ sudo grep alisson /etc/shadow alisson:$6$aeR.OxEqoVMnyUuq$eYxtbG6V.156mtlsK9QBZcVOjQZBm7NlcKFn5x1yxF4mffuLYd6Wmz2R9V2iKZvuC7fgp96H7.jlQW/o7OenF/:18292:0:99999:7:::
Agora você pode ver claramente o hash de senha na segunda coluna, é claro que não podemos descriptografá-lo, mas se você quiser obter uma certificação Linux você precisará lembrar deste arquivo e da estrutura. Podemos remover a senha de um usuário editando esse arquivo e excluindo o hash, desta forma o usuário não terá uma senha e ele pode definir uma nova no primeiro login.
Também temos um arquivo no Linux para gerenciar os grupos, este arquivo está localizado em /etc/group.
alisson@devops:~$ head -n 3 /etc/group raiz:x:0: daemon:x:1: bin:x:2:
Este arquivo segue esta sequência.
Nome do grupo | senha | identificação de grupo | usuários
Assim, os usuários adicionados em um grupo eles aparecerão na última coluna de cada linha, como expliquei antes de podermos usar o comando grep para encontrar um grupo e ver quais usuários foram adicionados a ele.
alisson@devops:~$ grep sudo /etc/group sudo:x:27:alisson
Isso nos mostra uma coisa de interesse, o comando sudo só permite que os usuários que pertencem ao grupo sudo usem o comando.
Outro arquivo importante é o /etc/fstab, este arquivo é responsável por montar nossos volumes durante a inicialização, vamos dar uma olhada:
alisson@devops:~$ cat /etc/fstab UUID=75fbe5e6-26ff-4522-abc4-0d8a3ac69c5b / ext4 defaults 0 0 /swap.img none swap sw 0 0
Quando você trabalha com Linux é realmente importante para você conhecer a estrutura dos arquivos, então este arquivo é organizado seguindo esta sequência:
Partição – pasta – tipo sistema de arquivos – opções de montagem – ativação de backup – sequência de verificação de disco
Hoje em dia é muito comum para você ver a primeira coluna com um uuid que representa uma partição, a referencia uuid / partição, execute o seguinte comando:
alisson@devops:~$ blkid /dev/sda2: UUID="75fbe5e6-26ff-4522-abc4-0d8a3ac69c5b" TYPE="ext4" PARTUUID="7177f53d-2db2-49cb-93a9-21d763cac088"
Se você verificar que é exatamente o mesmo no /etc/fstab, se você quiser mudar, você pode simplesmente substituir o uuid no arquivo para /dev/sda2, ele funcionará da mesma maneira.
O nome da máquina é armazenado no /etc/hostname
alisson@devops:~$ cat /etc/hostname devops
Se você quiser alterar o nome do host, você pode apenas editar este arquivo.
Também temos o /etc/hosts, este arquivo você pode mapear um endereço ip para um nome, como fazemos no DNS.
alisson@devops:~$ cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 devops # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
É muito útil quando você está desenvolvendo um sistema web e você não quer digitar o endereço ip no navegador todas as vezes.
Quando arquivo realmente importante é o /etc/sudoers.
alisson@devops:~$ sudo cat /etc/sudoers [sudo] password for alisson: # # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL:ALL) ALL # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d This file is responsible to manage who can use the sudo command, I explained before the only users in the group sudo can run the command, but how does the command know which group it needs to use? Because of this line. # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # You can put more groups in this file or you can put the users directly, like this line: # User privilege specification root ALL=(ALL:ALL) ALL
Uma coisa que é bom trabalhar com o Linux é porque toda a documentação vem dentro dos arquivos, como vimos nos /etc/sudoers,os comentários estão explicando como e onde você tem que editar o arquivo. Também temos o comandante para isso.
alisson@devops:~$ man sudo SUDO(8) BSD System Manager's Manual SUDO(8) NAME sudo, sudoedit — execute a command as another user SYNOPSIS sudo -h | -K | -k | -V sudo -v [-AknS] [-a type] [-g group] [-h host] [-p prompt] [-u user] sudo -l [-AknS] [-a type] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command] sudo [-AbEHnPS] [-a type] [-C num] [-c class] [-g group] [-h host] [-p prompt] [-r role] [-t type] [-T timeout] [-u user] [VAR=value] [-i | -s] [command] sudoedit [-AknS] [-a type] [-C num] [-c class] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ...
Esta é apenas a primeira linha do arquivo, para sair do homem que você tem que pressionar q.
O arquivo /etc/crontab.
alisson@devops:~$ cat /etc/crontab # /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) #
É responsável por manejar as tarefas programadas, segue esta estrutura:
Minuto – hora – dia do mês – mês – dia da semana – usuário – comando
Então, se você quiser agendar uma tarefa para ser executada todas as sextas-feiras às 07:00 você pode adicionar uma linha como esta:
00 19 * * 5 root bash /bin/backup.sh
Portanto, todas as sextas-feiras às 19:00 a raiz do usuário executará o comando backup.sh, é assim que devemos ler uma linha no arquivo crontab. Este é o arquivo principal, mas cada usuário tem suas próprias crontabs que podem ser encontrados é este caminho.
alisson@devops:~$ sudo ls /var/spool/cron/crontabs/ -la [sudo] password for alisson: total 8 drwx-wx--T 2 root crontab 4096 Nov 16 2017 . drwxr-xr-x 5 root root 4096 Aug 5 2019 ..
Não temos nenhum arquivo dentro deste diretório porque nunca criamos nenhum cronograma, mas podemos apenas editar os usuários crontab para você ver a criação do arquivo.
Digite seu terminal:
alisson@devops:~$ crontab -e no crontab for alisson - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- easiest 2. /usr/bin/vim.basic 3. /usr/bin/vim.tiny 4. /bin/ed Choose 1-4 [1]: 2 crontab: installing new crontab
Você pode escolher a opção número 2, como eu fiz, ele definirá o VIM como o editor de texto padrão para o seu crontab, basta esperar pelo vim abre e fechar pressionando ESC e usando o comando:
:wq!
Explicarei mais sobre vim na próxima seção.
Agora que você salvou o seu crontab de usuário, você pode verificar a pasta novamente:
alisson@devops:~$ sudo ls /var/spool/cron/crontabs/ -la total 12 drwx-wx--T 2 root crontab 4096 Feb 17 20:54 . drwxr-xr-x 5 root root 4096 Aug 5 2019 .. -rw------- 1 alisson crontab 1089 Feb 17 20:54 alisson
Você pode ver que um arquivo com o nome do mesmo usuário foi criado, então para cada usuário terá um arquivo nesta pasta desde que criou um crontab usando o comando crontab -e.
Para sistemas Linux é um requisito para ter conexão SSH, entao vamos verificar o arquivo de configuracao: /etc/ssh/sshd_config
alisson@devops:~$ cat /etc/ssh/sshd_config # $OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. # This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin # The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where # possible, but leave them commented. Uncommented options override the # default value. #Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress ::
Acima temos apenas uma pequena parte do arquivo, nele você é capaz de alterar a porta, definir qual endereço IP ouvirá as conexões
alisson@devops:~$ grep Root /etc/ssh/sshd_config #PermitRootLogin prohibit-password # the setting of "PermitRootLogin without-password".
Uma configuração importante no arquivo mostrado acima, o PermitRootLogin, em alguns casos, somos capazes de fazer login no servidor usando o usuário raiz diretamente, mas não é uma boa prática, mas não é incomum ver no ambiente de instalações, no ambiente de nuvem que nunca é permitido, porque todos no mundo podem tentar acessar com o usuário raiz.
Outra configuração importante é esta:
alisson@devops:~$ grep PasswordAuthentication /etc/ssh/sshd_config #PasswordAuthentication yes # PasswordAuthentication. Depending on your PAM configuration, # PAM authentication, then enable this but set PasswordAuthentication PasswordAuthentication yes
Se você estiver trabalhando com qualquer provedor de nuvem como Amazon, Azure ou GCP, essa configuração será desativada por padrão por razões de segurança, adicionamos nossa chave ssh no servidor no primeiro capítulo, portanto, se você quiser, você pode editar este arquivo e alterar a opção por nenhum.
Gerenciamento de Usuários e Grupos
Agora você já conhece alguns dos arquivos importantes e os arquivos responsáveis por gerenciar usuários e grupos, poderíamos apenas abri-los e editá-los para criar novos usuários e grupos, mas o Linux tem comandos úteis que devem ser usados para fazer esse trabalho e facilitar nossa vida.
Gerenciamento de Usuários
Para ver os usuários, temos o getent de comando .
alisson@devops:~$ getent passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin
A saída é bastante semelhante ao comando cat, mas a diferença é que podemos procurar e usuário específico, como fizemos usando o comando grep.
alisson@devops:~$ getent passwd alisson alisson:x:1000:1000:alisson:/home/alisson:/bin/bash
Assim, cabe a você qual comando você quer usar, no meu dia de trabalho, eu sempre uso o getent para procurar um usuário ou grupo e o comando grep para encontrar uma linha em qualquer arquivo do sistema Linux.
Para adicionar um novo usuário, você pode executar o seguinte comando:
alisson@devops:~$ sudo adduser elvis [sudo] password for alisson: Adding user `elvis' ... Adding new group `elvis' (1001) ... Adding new user `elvis' (1001) with group `elvis' ... Creating home directory `/home/elvis' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for elvis Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n]
Só o nome de usuário e senha são obrigatórios, as outras opções que você pode deixar em branco, como eu fiz no exemplo. Eu defina a senha como devops, se você analisar a saída de comando, você pode ver duas coisas que são importantes para nós prestarmos atenção.
A primeira são as informações sobre o diretório inicial, o comando criou uma pasta chamada elvis dentro da pasta /home, como expliquei antes, a pasta inicial é responsável por usuária dos arquivos do usuário.
O segundo é o /etc/skel, onde o usuário de comando recebe os arquivos padrão que estarão presentes na pasta inicial do usuário, podemos dar uma olhada nele.
alisson@devops:~$ ls /etc/skel/ -la total 20 drwxr-xr-x 2 root root 4096 Aug 5 2019 . drwxr-xr-x 91 root root 4096 Feb 18 19:25 .. -rw-r--r-- 1 root root 220 Apr 4 2018 .bash_logout -rw-r--r-- 1 root root 3771 Apr 4 2018 .bashrc -rw-r--r-- 1 root root 807 Apr 4 2018 .profile
Esses arquivos são responsáveis por personalizar o ambiente do usuário, vamos editá-los na última parte deste capítulo, mas se você quiser colocar mais itens dentro da pasta inicial, você pode simplesmente adicionar dentro do /etc/skel e eles estarão presentes para o próximo usuário criado. Vamos fazer um teste.
Você pode criar um esqueleto para um servidor de hospedagem, como o servidor web funciona, geralmente temos o usuário e na pasta inicial de cada usuário você tem alguma pasta chamada, public_html, e-mail, conf, logs e todas essas pastas devem ser criadas ao mesmo tempo que o usuário é criado, então execute o conde abaixo.
alisson@devops:~$ sudo mkdir /etc/skel/{public_html,logs,mail,conf} [sudo] password for alisson: alisson@devops:~$ ls /etc/skel/ conf logs mail public_html alisson@devops:~$
Portanto, como você pode ver, agora temos essas quatro pastas criadas dentro do /etc/skel, então vamos criar outro usuário para vê-lo funcionando.
alisson@devops:~$ sudo adduser customer01 Adding user `customer01' ... Adding new group `customer01' (1002) ... Adding new user `customer01' (1002) with group `customer01' ... Creating home directory `/home/customer01' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for customer01 Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] alisson@devops:~$ ls /home/customer01/ conf logs mail public_html
Como você pode ver agora, temos essas pastas criadas na pasta inicial do usuário, estou definindo a mesma senha para todos os usuários, mas se você esqueceu uma senha e quiser alterar, o comando a fazer é:
alisson@devops:~$ sudo passwd elvis Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
Basta digitar a nova senha e ela é alterada.
Estamos falando dos servidores de hospedagem, então vamos usar outro exemplo, imagine que seu cliente não pagou você, então você precisa bloquear seu usuário, para executar essa tarefa você pode executar este comando:
alisson@devops:~$ sudo passwd -l customer01 passwd: password expiry information changed.
Uma coisa interessante sobre o Linux, é que se você quiser saber como ele bloqueia os usuários, você pode dar uma olhada no /etc/shadow.
alisson@devops:~$ sudo getent shadow customer01 customer01:!$6$PExBAe3N$6AxVOOJLi/A5ddWOp2I/ZhvB00mpVwq4KQ78/4.QNNcrz2tsGGFu8XXr/TU7NFA/Hg3T2X9.R5v6cCuzbYF8j.:18310:0:99999:7:::
Prestar atenção à saída, é fácil notar um diferente, vamos comparar com um usuário não bloqueado.
alisson@devops:~$ sudo getent shadow alisson alisson:$6$aeR.OxEqoVMnyUuq$eYxtbG6V.156mtlsK9QBZcVOjQZBm7NlcKFn5x1yxF4mffuLYd6Wmz2R9V2iKZvuC7fgp96H7.jlQW/o7OenF/:18292:0:99999:7:::
Nas segundas colunas, onde a senha é armazenada, para um usuário bloqueado você pode ver que o sistema coloca um ponto de exclamação ( ! ) como o primeiro caractere, desta forma o usuário pode digitar sua senha e nunca vai coincidir com o hash, pois há um ponto de exclamação no início.
Para desbloquear o usuário, digite este comando:
alisson@devops:~$ sudo passwd -u customer01 passwd: password expiry information changed. alisson@devops:~$ sudo getent shadow customer01 customer01:$6$PExBAe3N$6AxVOOJLi/A5ddWOp2I/ZhvB00mpVwq4KQ78/4.QNNcrz2tsGGFu8XXr/TU7NFA/Hg3T2X9.R5v6cCuzbYF8j.:18310:0:99999:7:::
Agora o Linux removeu o ! no início do hash e o usuário é capaz de acessar o shell novamente.
Se o cliente cancelou o serviço com você, é possível remover seu usuário, para executar esta tarefa você pode executar o seguinte comando:
alisson@devops:~$ sudo userdel elvis alisson@devops:~$ sudo getent passwd elvis
É importante lembrar que remover o usuário não significa que você removerá seu diretório home, se verificarmos:
alisson@devops:~$ ls /home/ alisson customer01 elvis
Você pode removê-lo manualmente agora usando o comando.
alisson@devops:~$ sudo rm -rf /home/elvis/
O Linux tem esse comportamento para evitar que você exclua arquivos que podem ser necessários no futuro, mas se você tiver certeza de que deseja remover tudo, execute este comando:
alisson@devops:~$ sudo userdel -r customer01 userdel: customer01 mail spool (/var/mail/customer01) not found alisson@devops:~$ ls /home/ alisson
Agora tudo foi apagado.
Gerenciando grupos
Essa tarefa é bastante semelhante à gestão do usuário, podemos ver todos os grupos.
alisson@devops:~$ grupo sudo getent raiz:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4:syslog,alisson
Encontre um grupo usando um nome específico:
alisson@devops:~$ sudo grupo getent sudo:x:27:alisson
Permite criar um novo usuário e adicionar esse usuário ao grupo sudo.
alisson@devops:~$ sudo useradd gabriela alisson@devops:~$ sudo getent passwd gabriela gabriela:x:1001:1001::/home/gabriela:/bin/sh alisson@devops:~$ sudo getent group sudo sudo:x:27:alisson
O comando que eu executei, mostrou que criei um usuário chamado gabriela, esse usuário está presente no arquivo passwd e o grupo sudo só tem o usuário alisson adicionado, para adicionar o novo usuário, executar esse comando:
alisson@devops:~$ sudo gpasswd -a gabriela sudo Adding user gabriela to group sudo alisson@devops:~$ sudo getent group sudo sudo:x:27:alisson,gabriela
Perfeito, agora temos 2 usuários que pertencem ao grupo sudo e podemos trocar o usuário para ver se o novo tem as mesmas permissões.
alisson@devops:~$ sudo su - gabriela No directory, logging in with HOME=/ $
Um ponto interessante, se você prestar atenção, eu executei 2 comandos diferentes para criar um usuário, primeiro eu usei o adduser e depois que eu executeii useradd. Qual é a diferença entre os comandos?
A última saída quando mudei o usuário usando o comando su -, recebi a mensagem de nenhum diretório para este usuário, portanto o comando do useradd não cria a pasta home para o usuário e o adduser faz. Assim, podemos usar o useradd para usuário técnico, que não precisa de senha ou diretório home e o adduser para usuários comuns. Se eu fizer isso no meu trabalho diário? Não, eu uso o adduser para tudo e depois que eu remover o shell e a senha.
alisson@devops:~$ sudo adduser app1 --shell /bin/false Adding user `app1' ... Adding new group `app1' (1002) ... Adding new user `app1' (1002) with group `app1' ... Creating home directory `/home/app1' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for app1 Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] alisson@devops:~$ sudo passwd -l app1 passwd: password expiry information changed. alisson@devops:~$ sudo getent shadow app1 app1:!$6$ArmlhXou$Ry11spiafwXfqcPkVQ3xJDCd4gbN9vcsw1.9wkDoO4N69.3vnkHTZl.jPsMJLJmYjJwW4yS.CvvMEA5bGsZVE1:18312:0:99999:7::: alisson@devops:~$ sudo getent passwd app1 app1:x:1002:1002:,,,:/home/app1:/bin/false
Então, se você verificar, a saída você pode ver claramente que o usuário não tem shell e ele está bloqueado para login.
Mas vamos voltar para os usuários do grupo sudo.
Excluindo o usuário:
alisson@devops:~$ sudo userdel -r gabriela userdel: gabriela mail spool (/var/mail/gabriela) not found userdel: gabriela home directory (/home/gabriela) not found
Criando o usuário novamente:
alisson@devops:~$ sudo adduser gabriela Adding user `gabriela' ... Adding new group `gabriela' (1001) ... Adding new user `gabriela' (1001) with group `gabriela' ... Creating home directory `/home/gabriela' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for gabriela Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n]
Agora você é capaz de ver que minha shell mudou, agora eu sou o usuário gabriela, para criar usuários ou grupos que precisamos ter a permissão sudo, vamos tentar criar um novo grupo chamado aplicativos:
alisson@devops:~$ sudo gpasswd -a gabriela sudo Adding user gabriela to group sudo alisson@devops:~$
Logando com outro usuário:
alisson@devops:~$ sudo su - gabriela To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. gabriela@devops:~$
Criando um novo grupo:
gabriela@devops:~$ sudo addgroup applications [sudo] password for gabriela: Adding group `applications' (GID 1003) ... Done.
Criando um novo usuário:
gabriela@devops:~$ sudo useradd juergen
Adicionando usuário ao grupo:
gabriela@devops:~$ sudo gpasswd -a juergen applications Adding user juergen to group applications
Verificando usuários dentro do grupo:
gabriela@devops:~$ getent group applications applications:x:1003:juergen
E se você quiser excluir o grupo:
gabriela@devops:~$ sudo delgroup applications Removing group `applications' ... Done.
Voltando para o meu usuário:
gabriela@devops:~$ exit logout alisson@devops:~$
E é isso, este foi o seu Quick Start para gerenciar usuários e grupos, é claro que poderíamos ir muito mais fundo nesses tópicos, mas eu ainda tenho que explicar como você pode personalizar o seu ambiente.
Trabalhando com permissões
O sistema de permissão Linux funciona diferente do Windows, temos algum número que está associado à permissão, então por exemplo:
1 – Execução
2 - Redação
4 – Leitura
Então você sempre tem que fazer alguma matemática para aplicar a permissão, se você só quiser atribuir a permissão de execução que você pode definir como 1, basta escrever permissão 2, apenas ler permissão 4, Escrever + Leitura é igual a 6, então a permissão é 6, se você quiser Ler + Escrever + Execução é 7.
Vamos criar um arquivo e verificar suas permissões:
alisson@devops:~$ touch new_file alisson@devops:~$ ls -la new_file -rw-rw-r-- 1 alisson alisson 0 Feb 20 19:21 new_file
O comando touch, é responsável por alterar o tempo de acesso de qualquer arquivo, mas se o arquivo não existir, ele cria um.
Verificando a saída você pode ver que temos as permissões: ler+escrever, ler+escrever, ler, mas o que significa essa sequência.
usuário – grupo – outro
Na mesma linha podemos ver alisson alisson, o primeiro é o proprietário do usuário para este arquivo e o segundo é o grupo, por padrão todo usuário criado no Linux tem um grupo com o mesmo nome do usuário.
Se você se lembrar dos números que representam a permissão, podemos fazer um cálculo, ler+escrever = 4 + 2 = 6, então temos as seguintes permissões:
664
Portanto, o usuário pode ler e escrever, os usuários do mesmo grupo também podem ler e escrever, os usuários que não pertencem ao grupo podem apenas ler.
Agora podemos criar um diretório e analisar as permissões como fizemos agora.
alisson@devops:~$ mkdir new_folder alisson@devops:~$ ls -la | grep new_folder drwxrwxr-x 2 alisson alisson 4096 Feb 20 19:29 new_folder
Analisando as permissões, podemos ver, ler + escrever + execução para o usuário e grupo e ler + execução para o outro.
Se fizermos a seguinte associação:
ler + escrever + execução = 4 + 2 + 1 = 7
ler + execução = 4 + 1 = 5
Então temos 775. O que podemos concluir disso? As permissões padrão para arquivos é 644 e para diretórios é 775.
Dica: Por que as permissões de diretórios e arquivos são diferentes? Se prestamos atenção o único
diferença é Execução, arquivos são criados sem isso apenas para a segurança para que possamos executar
arquivos e pastas errados são criados com permissão de execução, porque com esta permissão
podemos abrir pastas.
Legal, mas como podemos alterar as permissões dos arquivos?
Alterando permissões de leitura e gravação
O comando usado para alterar as permissões de teses é o chmod,vou mostrar como podemos alterá-lo usando o número e a letra, experimentar usuários Linux geralmente usam os números, mas não faz qualquer diferença usar números ou letras.
Vamos usar como exemplo o new_file:
alisson@devops:~$ ls -la new_file -rw-rw-r-- 1 alisson alisson 0 Feb 20 19:21 new_file
Então, a permissão é 664, o que significa que qualquer usuário que não sou eu pode ler o conteúdo do arquivo e eu não quero permitir, então vou alterar a permissão para outros usuários para 0.
alisson@devops:~$ chmod 660 new_file alisson@devops:~$ ls -la new_file -rw-rw---- 1 alisson alisson 0 Feb 20 19:21 new_file
Acabei de mudar as permissões para 660, então vamos criar um conteúdo dentro deste arquivo, alterar o usuário e ver como ele funciona.
alisson@devops:~$ echo content not allowed to other > new_file alisson@devops:~$ cat new_file content not allowed to other
Vamos mudar o usuário para gabriela:
alisson@devops:~$ sudo su - gabriela [sudo] password for alisson: gabriela@devops:~$ pwd /home/gabriela gabriela@devops:~$ ls -la /home total 20 drwxr-xr-x 5 root root 4096 Feb 20 19:05 . drwxr-xr-x 24 root root 4096 Feb 18 18:00 .. drwxr-xr-x 6 alisson alisson 4096 Feb 20 19:29 alisson drwxr-xr-x 6 app1 app1 4096 Feb 20 19:00 app1 drwxr-xr-x 6 gabriela gabriela 4096 Feb 20 19:12 gabriela
Então, vou entrar na minha pasta inicial e tentar ver o conteúdo do arquivo.
gabriela@devops:~$ cd /home/alisson/ gabriela@devops:/home/alisson$ cat new_file cat: new_file: Permission denied
E funciona! Mas se lembrarmos da parte de gestão de grupos, esse usuário tem permissão para usar sudo, então vou adiciona-lo no grupo alisson e vamos ver o que acontece:
gabriela@devops:/home/alisson$ sudo gpasswd -a gabriela alisson [sudo] password for gabriela: Adding user gabriela to group alisson
Se digitarmos o comando groups, poderemos ver os grupos que este usuário pertence:
gabriela@devops:/home/alisson$ groups gabriela sudo
Assim, significa que o novo usuário não pode ser usado nesta sessão, permite logout e login novamente e ver se ele muda.
gabriela@devops:/home/alisson$ logout alisson@devops:$sudo su - gabriela gabriela@devops:~$ groups gabriela sudo alisson
Agora o grupo foi carregado, então vamos tentar ver o conteúdo do arquivo novamente:
gabriela@devops:~$ cd /home/alisson/ gabriela@devops:/home/alisson$ cat new_file content not allowed to other
E é possível ver o conteúdo do arquivo, então é assim que a permissão funciona, mostrei como podemos alterar a permissão usando o número, se você quiser alterar usando letras é basicamente o mesmo, vamos tentar:
gabriela@devops:/home/alisson$ cd gabriela@devops:~$ touch letters_file gabriela@devops:~$ ls -la letters_file -rw-rw-r-- 1 gabriela gabriela 0 Feb 20 19:47 letters_file
Para remover toda a permissão para outros:
gabriela@devops:~$ chmod o= letters_file gabriela@devops:~$ ls -o letters_file -rw-rw---- 1 gabriela gabriela 0 fev 20 19:47 letters_file
Então, podemos ver que eu só tinha que digitar o=, o que significa outra = nada e as permissões foram definidas. Eu poderia adicionar apenas a permissão de execução:
gabriela@devops:~$ chmod o+x letters_file gabriela@devops:~$ ls -o letters_file -rw-rw---x 1 gabriela gabriela 0 fev 20 19:47 letters_file
Ou posso definir as permissões para ler para todos, e escrever apenas para o proprietário:
gabriela@devops:~$ chmod g=rx,o=rx letters_file gabriela@devops:~$ ls -o letters_file -rw-r-xr-x 1 gabriela gabriela 0 fev 20 19:47 letters_file
E se eu quiser dar permissão para todos, eu posso fazer isso:
gabriela@devops:~$ chmod +w letters_file gabriela@devops:~$ ls -o letters_file -rw-rwxr-x 1 gabriela gabriela 0 fev 20 19:47 letters_file
O mesmo comando funciona para diretórios.
Alterar proprietário de arquivos e executar Scripts
Da mesma forma que o chmod é usado para permissões, o chown é usado para a propriedade. Vamos usar os mesmos arquivos que temos.
gabriela@devops:~$ ls -o letters_file -rw-rwxr-x 1 gabriela gabriela 0 fev 20 19:47 letters_file
A proprietária é gabriela e o grupo é gabriela também, no último exemplo, adicionei a gabriela ao grupo do alisson, e aí o usuário conseguiu acessar o arquivo, mas dessa vez eu posso fazer diferente.
gabriela@devops:~$ chown gabriela:alisson letters_file gabriela@devops:~$ ls -o letters_file -rw-rwxr-x 1 gabriela alisson 0 Feb 20 19:47 letters_file
Agora o dono do grupo para este arquivo é alisson, se eu quiser mudar o usuário, eu posso executar o comando assim:
gabriela@devops:~$ sudo chown juergen letters_file [sudo] senha para gabriela: gabriela@devops:~$ ls -o letters_file -rw-rwxr-x 1 juergen alisson 0 Feb 20 19:47 letters_file
Jurgen é o proprietário deste arquivo, podemos usar o comando chown para alterar o usuário e o grupo para um arquivo ou diretório, mas temos um comando especifico para alterar o grupo.
gabriela@devops:~$ sudo chgrp gabriela letters_file gabriela@devops:~$ ls -o letters_file -rw-rwxr-x 1 juergen gabriela 0 Fev 20 19:47 letters_file
O grupo foi mudado. Portanto, o comando chgrp muda apenas o grupo, chown mudar o proprietário, ou o proprietário e o grupo.
Assim, para terminar este capítulo estamos apenas faltando para ver como executar um script, então vamos criar um simples.
gabriela@devops:~$ echo "echo this is a simple script" > simple_script.sh gabriela@devops:~$ ls -o simple_script.sh -rw-rw-r-- 1 gabriela gabriela 29 fev 20 20:05 simple_script.sh
Aqui temos o script criado, para executá-lo, basta executar assim:
gabriela@devops:~$ ./simple_script.sh -su: ./simple_script.sh: Permission denied
A permissão negada, acontece porque se analisarmos a última execução de comando e verificarmos as permissões, não há x, que represente a permissão de execução, então defina a permissão:
gabriela@devops:~$ chmod +x simple_script.sh
Execute o script novamente:
gabriela@devops:~$ ./simple_script.sh this is a simple script
Vamos verificar as permissões mais uma vez:
gabriela@devops:~$ ls -o simple_script.sh -rwxrwxr-x 1 gabriela gabriela 29 fev 20 20:05 simple_script.sh
O x está em todos os grupos de permissão, dono, grupo e outros, assim qualquer um pode executá-lo.