Introdução ao wp-cli

O wp-cli é uma ferramenta de linha de comando voltada para usuários avançados realizarem tarefas administrativas relacionadas ao sistema de gestão de conteúdo (CMS) WordPress.
Este post se baseia na documentação original do software. Recomendo consultá-la para obter mais informações e clicar nos outros links, no decorrer do texto, para se aprofundar mais em algum tema.

O WP-CLI é a ferramenta de linha de comando oficial, disponível para interagir com e gerenciar seus sites na plataforma WordPress.

O objetivo do projeto é oferecer uma alternativa completa para adiministradores(as) de sites WordPress.
É equivalente ao painel administrativo de qualquer CMS, só que oferece as mesmas possibilidades na CLI (interface de linha de comando).
Como exemplo preliminar, veja como instalar e ativar um plugin no seu site, na linha de comando do seu servidor:


wp plugin install nome-do-plugin --activate

Grandes provedores de hospedagem, como o DreamHost oferecem a ferramenta.
Para começar a usá-la, basta acessar o servidor via SSH e começar a usar.
Quem usa Linux, também pode instalar a ferramenta na sua máquina de trabalho local.
O programa também está disponível para outras plataformas, como o FreeBSD, MacOS e Windows (neste caso, com algumas limitações).
Para acesso remoto, o WP-CLI local repassa os comandos à cópia instalada no servidor. Funciona de modo semelhante ao comando scp.

Desenvolvido por usuários avançados do WordPress, para atender às necessidades administrativas de outros heavy users.
No longo prazo, mesmo um novato pode descobrir os benefícios da linha de comando: mais eficiência e mais controle.

A sintaxe do wp-cli

Veja a explicação sobre um exemplo prático, abaixo:


wp plugin install

usage: wp plugin install ... [--version=] [--force] [--activate] [--activate-network]

Como o comando não se encontra completo (por que não foi indicado exatamente qual o plugin a ser instalado), ele retorna uma linha de ajuda rápida sobre a sintaxe a ser usada, na execução do wp:

  • wp plugin install — este é o comando em si. Falta indicar parâmetros e opções para que seja executado com sucesso.
  • <plugin|zip|url> — logo após o comando é necessário indicar de onde você pretende instalar o plugin: pelo nome, a partir de um pacote ZIP ou de uma URL na Internet.
  • [--version=<version>] — parâmetros sugeridos entre “[colchetes]” são opcionais. Neste exemplo, o que se quer dizer é que você pode indicar uma versão específica a ser instalada ou não.

Eventualmente, você pode incorrer na seguinte mensagem de erro:

Pass --path=`path/to/wordpress` or run `wp core download`.

Ela quer dizer que você precisa indicar exatamente em que local se encontra o seu site, dentro do provedor.
Lembre-se que, mesmo uma simples conta compartilhada em um provedor de hospedagem pode ter vários sites WordPress instalados.
E instalar coisas erradas em lugares errados pode ser muito ruim.
Segue alguns exemplos de uso do WP-CL.

Como instalar o WordPress pelo WP-CLI

Instalar a mais nova versão do WordPress é uma das coisas que você pode fazer com o aplicativo:


sudo -g www-data -i -- wp core download --path=/var/www/html/novo-blog

Creating directory '/var/www/html/novo-blog/'.
Downloading WordPress 4.8.1 (en_US)...
md5 hash verified: f3dd0e033519aa363eb07e13c6676e3c
Success: WordPress downloaded.

Acima, o comando é apenas “wp core download”. Como executei no meu servidor local (que tem configurações diferentes de provedores de hospedagem (até por que não é um)), precisei dar mais algumas informações ao WP-CLI:

  • sudo -g www-data — pedi para que o comando seja executado com os privilégios do grupo ‘www-data’.
  • --path=/var/www/html/novo-blog indiquei um novo diretório para baixar e instalar a última versão do WordPress.

Se o diretório, indicado no parâmetro ‘–path’ não existir, ele será criado e o WordPress baixado para lá.
Abra o navegador no diretório recém criado e inicie o processo de instalação do novo site.

Como atualizar todos os plugins do seu site WordPress

Você pode atualizar todos os plugins instalados no seu site com um único comando. Veja:


wp plugin update --all --path='meusite.com.br/blog'

Ativando modo de manutenção...
Fazendo download de (https://downloads.wordpress.org/plugin/akismet.3.3.4.zip)...
Descompactando a atualização...
Instalando a versão mais recente...
Removendo a versão antiga do plugin...
Plugin atualizado com sucesso.
Fazendo download de (https://downloads.wordpress.org/plugin/jetpack.5.2.1.zip)...
Descompactando a atualização...
Instalando a versão mais recente...
Removendo a versão antiga do plugin...
Plugin atualizado com sucesso.
Fazendo download de (https://downloads.wordpress.org/plugin/wpforms-lite.zip)...
Descompactando a atualização...
Instalando a versão mais recente...
Removendo a versão antiga do plugin...
Plugin atualizado com sucesso.
Desativando modo de manutenção...
+--------------+-------------+-------------+---------+
| name         | old_version | new_version | status  |
+--------------+-------------+-------------+---------+
| akismet      | 3.3.3       | 3.3.4       | Updated |
| jetpack      | 5.1         | 5.2.1       | Updated |
| wpforms-lite | 1.3.8       | 1.3.9.1     | Updated |
+--------------+-------------+-------------+---------+
Success: Updated 3 of 3 plugins.

Para mim, este processo durou 3 segundos. 😉

Assine este site

Todo dia eu aprendo alguma coisa nova sobre administração de servidores, WordPress, bancos de dados, Android etc.
Desde o começo, este site existe para compartilhar o que sei com outras pessoas.
Se quiser ser avisado(a) quando houver post novo no blog, inscreva-se abaixo!

Referências

https://wp-cli.org/.

Dicas e truques de configuração do SUDO para Linux e UNIX

Nos sistemas operacionais baseados no Linux ou no UNIX (MacOS, FreeBSD etc) há tarefas administrativas, que só podem ser executadas com privilégios de superusuário (root).
O comando sudo nasceu da necessidade do sysadmin delegar algumas destas tarefas a outros usuários do sistema — sem precisar expôr a própria senha.
captura de tela comando sudo
Usuários pertencentes ao grupo “sudo”, podem assumir privilégios superiores com o uso da própria senha — sem ter conhecimento da senha do root, portanto.
Quem usa o computador sozinho, pode fazer tudo como usuário comum. Eventualmente, pode “se investir de poderes especiais”, com o uso do sudo — e voltar à segurança de um usuário comum, logo em seguida.
Uma, dentre muitas tarefas comuns a todo usuário, por exemplo, é atualizar o sistema. O comando permite fazer isso, sem exigir que se autentique como root.
Na configuração padrão do sudo, usuários com acesso ao comando podem realizar as seguintes tarefas (entre outras):

  • Acessar dispositivos restritos do hardware.
  • Formatar e alterar sistemas de arquivos.
  • Instalar novos aplicativos e configurar áreas sensíveis do sistema.

Como configurar o comportamento do sudo no meu sistema

O arquivo de configuração do sudo é o /etc/sudoers. Contudo, as boas práticas de segurança, recomendam sempre usar o programa visudo para alterar este arquivo:


sudo visudo


Dentro do arquivo de configuração, há uma sessão com várias linhas. Cada uma delas começa com uma entrada Defaults.
Você pode alterar o comportamento do sudo:

  • editando uma destas linhas — removendo ou editando algum parâmetro ou, ainda, acrescentando um novo.
    Para acrescentar, vá até o final da linha e acrescente uma vírgula seguida do novo parâmetro desejado;
  • adicionando uma nova linha Defaults, seguida da tabulação e dos parâmetros de configuração que você deseja acrescentar.

Por ser muito usado no Linux, já escrevi alguns artigos sobre o sudo (veja a lista no final deste texto). Não esqueça também de dar uma olhada nas tags visudo e sudo, para obter mais informações sobre o uso da ferramenta.
sudo sudoers environment variables
Algumas pessoas, por questão de organização, preferem ter uma linha Defaults exclusiva para cada parâmetro de configuração.
Acompanhe as dicas, para entender melhor.

Edite corretamente o /etc/sudoers

Trata-se de uma dica de segurança.
O UNIX e o Linux são sistemas operacionais projetados para atender uma grande quantidade de demandas e usuários simultâneos.
O visudo bloqueia o acesso de outros usuários ao /etc/sudoers, enquanto você o estiver editando.
Portanto, use sempre o visudo para ajustar o sudo no seu sistema. Não edite o /etc/sudoers diretamente.
Além disso, o visudo faz uma análise do sudoers, logo depois da edição.
Se houver erros, ele avisa e permite que você volte para alterar e corrigir o arquivo.

Organize os Defaults

Como já disse, você pode adicionar vários parâmetros e valores por linha ou abrigar um único parâmetro por linha.
A escolha é sua.
A configuração, abaixo


Defaults        env_reset,timestamp_timeout=5,pwfeedback

tem o mesmo efeito desta


Defaults        env_reset
Defaults        timestamp_timeout=5
Defaults        pwfeedback

Eu gosto do segundo método de organizar os ajustes, pois ele permite adicionar um comentário (com ‘#’) ao final de cada linha.
A forma mais comum de usar a palavra-chave é assim: Defaults. Mas em sistemas mais complexos, com um grande número de usuários, em que o sysadmin deseja delegar especificamente e com abrangência, há outras formas de uso. Veja:

  • Defaults parameter, parameter_list — # os parâmetros desta configuração afetam todos os usuários autenticados no host.
  • Defaults@Host_List parameter, parameter_list # afeta todos os usuários logados no especificado em @Host_List.
  • Defaults:User_List parameter, parameter_list #afeta todos os usuários especificados na lista :User_List.
  • Defaults!Cmnd_List parameter, parameter_list #afeta os comandos especificados na lista !Cmnd_List.
  • Defaults>Runas_List parameter, parameter_list #afeta comandos listados, desde que executados por um usuário específico.

Como criar um arquivo de log do sudo

Como comportamento padrão, o sudo envia o log ou relatório sobre o que ocorreu durante o seu uso para o syslog(3).
Opcionalmente, você pode criar um arquivo para receber este relatório.
Adicione a seguinte linha:


Defaults        logfile="/var/log/sudo.log"

Se quiser que o seu arquivo de log contenha informações sobre o host e o ano relacionados às ações relatadas, use assim:


Defaults        log_host,log_year,logfile="/var/log/sudo.log"

Para poder ver o conteúdo do seu novo arquivo de log, use o sudo e o cat:


sudo cat /var/log/sudo.log

Jun 12 15:32:09 2017 : justincase : HOST=s5ultra : TTY=pts/0 ;
    PWD=/home/justincase ; USER=root ; COMMAND=/bin/ls
Jun 12 15:32:43 2017 : justincase : HOST=s5ultra : TTY=pts/0 ;
    PWD=/home/justincase ; USER=root ; COMMAND=/usr/sbin/visudo
Jun 12 15:34:46 2017 : justincase : HOST=s5ultra : TTY=pts/0 ;
    PWD=/home/justincase ; USER=root ; COMMAND=/bin/cat /var/log/sudo.log

Leia mais dicas e truques para usar com o sudo:

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Referências

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux_OpenStack_Platform/2/html/Getting_Started_Guide/ch02s03.html.
https://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/.

Personalize a mensagem de senha errada do sudo no seu sistema

O sudo permite customizar a mensagem exibida a cada vez que se erra na digitação da senha de autenticação.
Isto é feito através da inclusão ou edição do valor do parâmetro badpass_message=.

Siga o procedimento, abaixo, para criar uma mensagem personalizada de aviso de senha errada, para o sudo.
Abra o editor padrão de edição do sudoers:


sudo visudo

Em seguida vá até seção que tem os parâmetros Defaults.
Inclua mais um:


Defaults        badpass_message="Não posso deixar você fazer isso, Dave."

Eu usei uma frase do filme de Stanley Kubrick, 2001: Uma Odisseia no Espaço.


Leia mais dicas de configuração do comando sudo, clicando na tag visudo e/ou sudo.

A opção insults, no sudoers, se sobrepõe a badpass_message.
Mas você pode desativar qualquer parâmetro Defaults, inserindo um ‘#’ no começo da linha dele.
O bad pass msg acaba sendo uma alternativa para sistemas “chatos” que usam um sudo compilado sem suporte a insults.
Em tempo, saiba mais sobre como “ofender” as pessoas que erram a senha no sudo, neste post.
Divirta-se!

Configure o sudo para fazer piadas quando o usuário erra a senha

A cultura hacker é extremamente forte entre usuários Linux/UNIX e a descontração, quando alguém comete um erro, sempre fez parte da comunidade.
O comando sudo, como comportamento padrão, admite até 3 tentativas de senhas erradas.
Depois disto, ele termina e envia uma mensagem ao root (administrador do sistema), informando sobre a “tentativa de obter privilégios” perpetrada pelo usuário em questão.
comando sudo insultos
As piadas ou “insultos”, são variados.
Veja alguns exemplos (com a minha tradução livre):

  1. You speak an infinite deal of nothing — “Você diz um amontoado de besteiras”
  2. Take a stress pill and think things over — “Tome um calmante e pare para pensar”
  3. That’s something I cannot allow to happen — “Taí uma coisa que eu não posso deixar acontecer”
  4. You silly, twisted boy you — “Seu tolo, você é um menino confuso”
  5. I have been called worse — “Já me chamaram de coisa pior”

Sinta-se à vontade para sugerir uma tradução diferente, nos comentários, caso não concorde com alguma (sem ofensas!) Sua contribuição será bem vinda. 😉

Como configurar o sudoers para ofender os usuários

Abra o arquivo de configuração do sudo com o visudo:


sudo visudo

localize a seção que tem os Defaults e acrescente uma linha com o seguinte conteúdo:


Defaults	insults

Se não quiser acrescentar uma linha, é possível apenas adicionar uma vírgula, seguida do parâmetro ‘insults’ a qualquer uma das linhas já existentes.
Veja como está esta sessão no meu arquivo de configuração sudoers:


Defaults        env_reset,timestamp_timeout=5,pwfeedback, insults
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin$
Defaults        insults

A depender do seu sistema, pode ser necessário se reautenticar para poder ver os efeitos da alteração.

Como obter a lista de insultos, ofensas e piadas do sudo

No Debian 9, a lista completa de insultos pode ser obtida no arquivo binário ‘/usr/lib/sudo/sudoers.so’.
Ele pode ser encontrado com o comando find, caso não esteja lá:


find /usr/lib/sudo -type f | xargs grep "fallen in the water"

Arquivo binário /usr/lib/sudo/sudoers.so coincide com o padrão

Por ser um arquivo binário, se você usar o comando cat nele, vai obter um monte “lixo” na sua tela.
Tente encontrar as frases com o seguinte comando, no terminal:


strings /usr/lib/sudo/sudoers.so | less

Agora digite ‘/dumber’ e as frases irão aparecer na tela.
No Askubuntu (link no final), é possível encontrar as várias listas de insultos, separadas por arquivos.
Minhas preferidas são as que usam falas do filme 2001: A Space Odissey (2001: Uma Odisseia no Espaço).
Veja algumas:

  • “Just what do you think you’re doing Dave?”
  • “It can only be attributed to human error.”
  • “That’s something I cannot allow to happen.”
  • “My mind is going. I can feel it.”
  • “Sorry about this, I know it’s a bit silly.”
  • “This mission is too important for me to allow you to jeopardize it.”
  • “I feel much better now.”

Desta vez, vai sem tradução…

sudo insults list
Sudo insults list.

Acho, ainda, importante frisar que certas frases, desta “brincadeira”, induzem a erro de interpretação, como os exemplos abaixo:

  • invalid authentication methods.
  • Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication.
  • There are no authentication methods compiled into sudo! If you want to turn off authentication, use the –disable-authentication configure option.
  • Unable to initialize authentication methods.

As mensagens acima podem levar um usuário desavisado a “entrar em parafuso” (se ele souber algum inglês, claro). Além disso, elas não fazem sentido algum para os propósitos do sudo.
Se você, como sysadmin, se incomoda com perguntas “inocentes” de usuários, ativar os insults pode não ser uma boa ideia.
Na dúvida, para não ter problemas, use uma mensagem personalizada para o sudo.

Referências

https://askubuntu.com/questions/837558/where-are-sudos-insults-stored/837562.

Altere o tempo máximo de cada sessão do SUDO

O comando sudo é o que permite a um usuário normal ou ao sysadmin administrar o sistema, sem precisar autenticar como root.
Com o sudo, você executa rapidamente uma tarefa – investido de superpoderes – e volta ao prompt de seu usuário normal em seguida.
Dar acesso a este recurso, pode ser uma forma mais segura de conceder poderes administrativos a usuários normais do seu sistema — sem revelar a senha do root.
Como comportamento padrão, uma sessão do sudo dura 15 minutos. Durante este período de tempo, não é pedido qualquer senha ao usuário.
Se você acredita que este tempo é muito curto ou muito longo, é fácil alterá-lo.

No meu caso, acredito que um tempo de sessão entre 1 e 5 minutos é o suficiente para realizar a maioria das pequenas tarefas administrativas do nosso dia a dia.

Quando é necessário executar vários comandos com privilégios administrativos (e que irão demorar mais do que 5 minutos para serem executados), prefiro digitar a minha senha algumas vezes a mais — sem problemas.


Por outro lado, este post ensina a executar vários comandos, em fila, usando o sudo, sem precisar se preocupar com a expiração do tempo. Recomendo a leitura.

Como configurar o tempo de expiração da sessão do sudo

A maneira adequada de ajustar os parâmetros do sudo é através do visudo.

O visudo edita o arquivo sudoers de maneira segura — protegendo-o contra alterações simultâneas e fazendo verificação básica de erros.

Nas grandes distribuições, como Debian e no Ubuntu, o programa irá abrir, por padrão, o editor de textos Nano.
Neste caso, quando terminar a edição, use as combinações de teclas ‘Ctrl-o’ e ‘Ctrl-x’, para gravar e sair do editor.
Se, na sua distro, o editor padrão for o vi ou o vim, tecle ‘Esc’ e, em seguida, ‘:wq’ e ‘Enter’, quando terminar de alterar o sudoers.
Você pode rodar o visudo com o próprio sudo:

sudo visudo

Em seguida, localize a linha (que deve estar no começo):


Defaults        env_reset

e altere-a para


Defaults        env_reset,timestamp_timeout=5

Como eu já disse, prefiro que o valor da minha variável timestamp_timeout seja menor ou igual a 5 (minutos). Você deve usar o valor que considerar mais adequado às suas necessidades.
sudo sudoers environment variables

Como evitar que a sessão do sudo expire

Se você precisa que a sua sessão fique ativa indefinidamente (ou pelo menos até você se desautenticar do sistema), use o sudo combinado com as seguintes opções:


sudo -s

[sudo] senha para justincase: 

Outros usuários preferem usar o sudo para logar-se diretamente como root:


sudo su

Em qualquer um dos casos, quando terminar, use ‘exit’ para sair:

root@inspiration:/home/justincase# exit
exit

Se você precisa executar uma sequencia de comandos e não deseja ter que ficar voltando para digitar a senha, siga esta dica.

Como tornar o sudo mais seguro

Há alguns riscos em potencial, a considerar, quando estiver usando o comando sudo.
Podem ser evitados com algumas configurações no sudoers.
Como padrão, o sudo manterá sua senha por 5 minutos.
Dentro desta janela de tempo, caso você se ausente fisicamente da máquina, alguém pode adquirir o controle dela usando o sudo.
Para isto, bastaria abrir uma nova shell, ainda antes de expirar a validade da sessão aberta:


sudo /bin/bash

Reduzir o tempo de cada sessão é uma medida eficaz. Mas é mais seguro ajustar o sudo para expirar logo após o comando dado. Desta forma, o usuário será obrigado a fornecer sua senha a cada comando administrativo.
Para isto, basta reduzir a zero o tempo de espera do timestamp:


Defaults    timestamp_timeout=0

Desta forma, você se mantém do lado mais seguro.