Alisson Machado
21 December 2020

Capítulo 2: Trabalhando com Bash

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.