10.16.2015

Gestão de serviços com o systemctl

Nas últimas versões RHEL/CentOS/Fedora a inicialização do sistema e os processos passaram a ser geridos pelo systemd System e pelo Service Manager.

Relembrando, os deamons são processos que correm em segundo plano e que podem efectuar as mais variadas tarefas. Geralmente são inicializados com o sistema e permanecem em execução até serem forçados pelo administrador a terminarem. Por convenção, a maioria dos deamons começam por "d."

Durante muitos anos, o processo (process ID 1) do Linux foi o conhecido init, que tomava a responsabilidade pela activação de quase todos os processos. Os deamons eram inicializados durante o arranque do sistema (boot) através de shell scripts System V e LSB. Em menor número, alguns deamons eram controlados por processos como o initd ou o xinetd, nomeadamente para serviços que podiam receber ligações por parte de clientes e que só nessa circunstância eram activados. Esta implementação tinha insuficiências que foram debeladas pelo systemd. O novo sistema permite melhor performance do arranque, melhor gestão de dependências entre serviços e melhor capacidade de gerir processos em simultâneo.

Com a implementação do systemd, as shell-scipts são apenas usadas para alguns serviços de uso descontinuado mas que ainda são necessários. Como tal, os ficheiros de configuração como os encontrados na directoria /etc/sysconfig estão a ser substituídos.

O comando de gestão dos processos e serviços do sistema passa a ser o systemctl. Na nova abordagem este programa gere diferentes tipos de objectos que se designam na documentação por units. A lista de units pode ser consultada com o comando:

[root@CentOSCLI ~]# systemctl -t help
Available unit types:
service
socket
target
device
mount
automount
snapshot
timer
swap
path
slice
scope

Os serviços (units) com uma extensão .service representam serviços do sistema, sendo geralmente deamons manipulados com frequência (ex: servidor web).

Os sockets possuem uma extensão .socket que representam sockets IPC (inter-process communication). O controlo deste tipo de unit é passado para um deamon apenas quando é necessário. Não são inicializados durante o arranque. Ou seja,os princípios inerentes ao xinetd são aqui aplicados.

A extensão .path é utilizada quando ocorre uma mudança no file system que suscita a activação de um determinado serviço. Este tipo de implementação foi pensada principalmente para serviços de impressão.

O estado (state) pode ser verificado com o comando:

[root@CentOSCLI ~]# systemctl status sshd
sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
Active: active (running) since Seg 2015-10-12 11:05:40 WEST; 23h ago
Main PID: 1208 (sshd)
CGroup: /system.slice/sshd.service
.......

Vários estados possíveis

Estado Descrição
 
loaded ficheiro de cofiguração da respectiva unit processado
active (running) Em execução
active (exit) Configuração efectuada com sucesso
active (waiting) Em execução, à espera de um evento
inactive Não está em execução
enabled Serviço será inicializado com o arranque do sistema
disabled Serviço não será inicializado com o arranque do sistema
static Só pode ser activado por outra unit.

(Nota: Não esquecer que com o systemd devemos colocar [systemctl status name] ao contrário de service name status. Ou seja systemctl status sshd e não service sshd status)

O comando systemctl sem argumentos permite listar todas as "units" do sistema. Automaticamente o output é gerado com o comando less.

[root@CentOSCLI ~]# systemctl

  UNIT                        LOAD   ACTIVE SUB       DESCRIPTION
proc-sys...t_misc.automount loaded active waiting Arbitrary Executable File Fo
sys-devi...block-sr0.device loaded active plugged VBOX_CD-ROM
sys-devi...et-enp0s3.device loaded active plugged PRO/1000 MT Desktop Adapter
sys-devi...-sda-sda1.device loaded active plugged VBOX_HARDDISK
sys-devi...-sda-sda2.device loaded active plugged LVM PV
sys-devi...block-sda.device loaded active plugged VBOX_HARDDISK
sys-devi...tty-ttyS0.device loaded active plugged /sys/devices/platform/serial

(outuput suprimido)

.......

Verificar apenas o estado de units do tipo service:

  [root@CentOSCLI ~]# systemctl --type=service
UNIT LOAD ACTIVE SUB DESCRIPTION
auditd.service loaded active running Security Auditing avahi-daemon.service loaded active running Avahi mDNS/DNS-SD crond.service loaded active running Command Scheduler dbus.service loaded active running D-Bus System Message firewalld.service loaded active running firewalld getty@tty1.service loaded active running Getty on tty1 ..... .... (output suprimido)

Analogamente usam-se os comandos systemctl --type=path ou systemctl --type=socket para units com extensão .path e extensão .socket

Para verificar se um serviço está activo

[root@CentOSCLI ~]#systemctl is -active sshd
enabled

Para verificar se um serviço é inicilizado no arranque do sistema.

[root@CentOSCLI ~]#systemctl is -enabled sshd
enabled

Verifica o estado das units (tipo service).

  [root@CentOSCLI ~]# systemctl list-unit-files --type=service
UNIT FILE STATE
auditd.service enabled
autovt@.service disabled
avahi-daemon.service enabled
blk-availability.service disabled
brandbot.service static
console-getty.service disabled
console-shell.service disabled
...... output suprimido
Lista serviços cuja inicialização falhou: [root@CentOSCLI ~]# systemctl --failed --type=service
UNIT LOAD ACTIVE SUB DESCRIPTION
kdump.service loaded failed failed Crash recovery kernel arming Sem parar o serviço, recarrega as configurações [root@CentOSCLI ~]# systemctl reload sshd Pára o serviço

[root@CentOSCLI ~]# systemctl stop sshd

Iniciar o serviço

[root@CentOSCLI ~]# systemctl start sshd

Existem situações em que serviços incompatíveis não devem estar simultaneamente em execução (ex: iptables e firewalld). Pode-se impedir que um administrador arranque um determinado serviço, mascarando o mesmo (mask a service). Basicamente o ficheiro de configuração é modificado de modo a que o serviço não arranque. (manualmente ou durante a inicialização do sistema operativo).

[root@CentOSCLI ~]# systemctl mask network
ln -s '/dev/null' '/etc/systemd/system/network.service'

Para reverter a alteração

[root@CentOSCLI ~]# systemctl unmask network
rm '/etc/systemd/system/network.service'

Tabela de referência com os comandos mais comuns

Tarefa Comando
 
Ver informação detalhada systemctl status UNIT
Pára um serviço systemctl status UNIT
Iniciar um serviço systemctl start UNIT
Reeiniciar um serviço systemctl restart UNIT
Recarregar a configuração (não pára o serviço) systemctl reload UNIT
Desactivar a possibilide de um serviço ser executado systemctl mask UNIT
Activar um serviço para ser executado no arranque do sistema systemctl enable UNIT
Desactivar um serviço, impossibilitando-o de ser executado no arranque do sistema systemctl disable UNIT
Listar dependências systemctl list-dependencies UNIT

Fonte: Ebook: Red Hat 7.0 Trainning - System Administration.

10.13.2015

Atríbuir o comando sudo a um utilizador no CentOS

É desaconselhável trabalhar sempre como root. Deverá utilizar-se uma conta corrente e utilizar o comando sudo quando necessário. Para configurar um utilizador com permissões para executar comandos em modo root, efectuar os seguintes passos:

Criar utilizador

[root@CentOSCLI home]# useradd pmatos -c "Pedro Matos"

Atríbuir password

[root@CentOSCLI home]# passwd pmatos
A modificar a senha do utilizador pmatos.
Nova senha:
Digite novamente a nova senha:
passwd: todos os itens de autenticação foram actualizados com sucesso.

Executar o comando visudo que na prática edita o ficheiro /etc/sudoers. Descomentar, se necessário, a linha [# %wheel   ALL=(ALL)   ALL], retirando o cardinal  "#" . No CentOS 7.0 este passo não é necessário

Adicionar o utilizador ao grupo wheel.

[root@CentOSCLI home]#usermod -aG wheel

Mudar para o utilizador pmatos

root@CentOSCLI ~]# su - pmatos

Após o comando seguinte e inserida a password deverá surgir root no ecrã, confirmando a alteração efectuada. Doravante o utilizador pmatos poderá utilizar o comando sudo.

[pmatos@CentOSCLI ~]$ sudo whoami

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.

[sudo] password for pmatos:
root

Poderá ser desejável que um determinado utilizador apenas execute um número limitado de comandos como root. Esse controlo granular é possível configurando o ficheiro /etc/sudoers.

10.02.2015

Configurar IP fixo com a linha de comandos no CentOS 7.0

Para configurar a Rede no Cent0s 7.0 começamos por aceder à consola (como root) e verificar quais as interfaces de rede disponiveis no sistema e respetivo estado:

[root@localhost ~]# nmcli device 
DEVICE  TYPE      STATE                                  CONNECTION 
virbr0  bridge    connecting (getting IP configuration)  virbr0     
enp0s3  ethernet  disconnected                           --         
lo      loopback  unmanaged 

Utilizadores menos experientes na edição de ficheiros devem utilizar a ferramenta gráfica executando o comando nmtui

[root@localhost ~]# nmtui

Neste caso, vamos optar pela abordagem mais complexa, editando ficheiros de configuração. Esses ficheiros estão na diretoria /etc/sysconfig/network-scripts .

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
ifcfg-enp0s3  ifdown-ppp       ifup-eth     ifup-sit
ifcfg-lo      ifdown-routes    ifup-ippp    ifup-Team
ifdown        ifdown-sit       ifup-ipv6    ifup-TeamPort
ifdown-bnep   ifdown-Team      ifup-isdn    ifup-tunnel
ifdown-eth    ifdown-TeamPort  ifup-plip    ifup-wireless
ifdown-ippp   ifdown-tunnel    ifup-plusb   init.ipv6-global
ifdown-ipv6   ifup             ifup-post    network-functions
ifdown-isdn   ifup-aliases     ifup-ppp     network-functions-ipv6
ifdown-post   ifup-bnep        ifup-routes

Vamos editar o ficheiro de configuração do device enp0s3 do tipo Ethernet:

[root@localhost network-scripts]# vi ifcfg-enp0s3
HWADDR=08:00:27:F7:82:E0
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=enp0s3
UUID=8b0e2074-7a9e-4830-b3f5-232d5710fbe1
ONBOOT=no

Para configurar o sistema para utilizar o serviço de DHCP confirmar ou modificar os seguintes campos:

BOOTPROTO=dhcp
ONBOOT=yes

Gravar as alterações, e executar o comando que inicia o serviço de rede com as novas configurações:

[root@localhost network-scripts]# systemctl restart network

Podemos verificar o endereçamento obtido com o comando:

root@localhost network-scripts]# ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:f7:82:e0 brd ff:ff:ff:ff:ff:ff
    inet 172.16.1.102/24 brd 172.16.1.255 scope global dynamic enp0s3
       valid_lft 5135sec preferred_lft 5135sec
    inet6 fe80::a00:27ff:fef7:82e0/64 scope link 
       valid_lft forever preferred_lft forever
3: virbr0:  mtu 1500 qdisc noqueue state DOWN 
    link/ether 9a:35:37:ef:7d:ca brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever

Nota: Apesar de considerado obsoleto, é possível recorrer ao comando ifconfig.

Para uma configuração estática, editar de novo o ficheiro ifcfg-enp0s3 e modificar os campos (se necessário) conforme descrito:

BOOTPROTO=static
ONBOOT=yes

E no fim do ficheiro, adicionar os campos:

IPADDR=172.16.1.200
NETMASK=255.255.255.0
GATEWAY=172.16.1.254
DNS1=172.16.1.254

Gravar o ficheiro e reeiniciar o serviço de rede:

[root@localhost network-scripts]# systemctl restart network

Verificar de novo a conectividade e a configuração da interface com os comandos supracitados. (ping, ip a, ifconfig...).

Pode existir a necessidade de configurar o ficheiro /etc/sysconfig/network onde é possível configurar o HOSTNAME e o DNS.

[root@localhost network-scripts]# vi /etc/sysconfig/network
# Created by anaconda

HOSTNAME=worstation01.xyz.com
DNS1=172.16.1.254
DNS2=208.67.220.220
SEARCH=xyz.com

Reiniciar o serviço.