ISPConfig 3.2 e jailkit – problemas para login com ssh

Depois de atualizar o ISPConfig para a versão 3.2 tive problemas com alguns acessos ssh para usuários com jailkit ativo.

Aqui, alguns usuários logo após tentar fazer o login com chave, eram desconectados do ssh.

Como a maioria dos processos de deploy que utilizo neste servidor utilizam rsync, isso travou o deploy das aplicações com este problema.

Baseado neste link e em algumas outras leituras, acompanhei o /var/log/auth.log enquanto autenticava com os usuários e parecia ser um erro de permissão, o resultado era muito parecido com o da thread linkada:

Oct 15 18:46:43 server1 jk_chrootsh[16809]: ERROR: failed to execute shell /bin/bash for user username (5007), check the permissions and libraries of /var/www/clients/client1/web78//bin/bash

Logo após isso, o logout do usuário. A barra dupla não é um problema (foi a primeira coisa que achei que poderia ser).

No fim, depois de muitas horas e testes, eu não consegui identificar a causa do problema. As configurações do jailkit estava idênticas as ispconfig.

Tentei fazer o resync dos usuários shell, não retornava erro mas não alterava em nada.

Solução encontrada

O que resolveu aqui, foi bem parecido com o sugerido no final da thread no fórum:

  • Removi todos os usuários shell da conta em questão
  • Na configuração de site, marque na aba options a opção Delete unused jailkit chroot
  • Aguarde a sincronização do ISPConfig ou execute manualmente o update via .sh no server
  • Recrie o usuário shell – isso irá recriar a estrutura de arquivos para o chroot e recriar o usuário

Estes passos resolveram e o acesso voltou a funcionar com o jailkit, mas não consegui identificar a causa (não ocorreu com todos os usuários com jailkit).

Mantendo o WordPress seguro – permissões corretas de arquivos e diretórios

Seguindo as recomendações de segurança do WordPress, as permissões de arquivos devem ser: 755 para diretórios e 644 para arquivos.

Isso pode ser configurado com o comando abaixo (unix):

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

Para os uploads funcionarem (via wp-admin) é necessário que o usuário do seu servidor (no meu caso, o Apache usa o www-data) tenha acesso a pasta de uploads.

chown www-data:www-data wp-content/uploads

O acesso ao www-data também é necessário no restante dos arquivos se você quiser habilitar o update via painel, instalação de temas e plugins.

Parêntesis e chaves coloridas: um plugin que vai mudar sua vida

A rima não intencional no título é para falar do Bracket Pair Colorizer – ou de qualquer outro plugin que auxilie a identificar o que está fechando o que no seu código (parêntesis, chaves, colchetes).

Esta semana eu terminei de fazer um curso de NodeJS e estou colocando em prática duas das metas para 2019: trabalhando em um produto próprio e produzindo algo que vai para produção com NodeJS no back-end.

No javascript – mesmo evitando uma cadeia de callback hell – você ainda pode acabar se deparando com algo com uma estrutura parecida com isso:

({({({})})})

Descobri o plugin no tweet abaixo e ele faz exatamente o que parece:

Se você utiliza o VSCode, instalar é fácil:

ext install CoenraadS.bracket-pair-colorizer

Confira a página do Bracket Pair Colorizer. Se você utiliza outro editor recomendo procurar algo parecido – comecei a usar hoje e é muito prático.

Resolvido: Spotify só abre em fullscreen no Ubuntu

Parece ser um problema comum o Spotify “travar” no modo fullscreen no Ubuntu, sem dar acesso a taskbar.

Felizmente arrumar este problema do fullscreen é simples. Você deve:

  1. Encontrar o arquivo de configuração / preferências do Spotify
  2. Remover as referências as configurações de janela

Como encontrar meu arquivo de configuração do Spotify

Primeiro feche o Spotify. Depois vamos encontrar seu arquivo de configuração. Alguns fóruns que encontrei falam que o arquivo fica em ~/.config/spotify/prefs

No Ubuntu 18 o Spotify usa o snap, então para encontrar todos os arquivos de configuração fiz o seguinte:

find ~/snap/spotify/ -name prefs

Isto irá listar todos os arquivos “prefs” dentro do diretório. Para facilitar, você pode usar o seu editor e já abrir todos no editor:

find ~/snap/spotify/ -name prefs -execdir vscode {} \;

Agora é só procurar pelas ocorrências de app.window e remover estas linhas dos arquivos de configuração. Feito isso, salve os arquivos e pronto, seu spotify não abrirá mais no modo fullscreen.

Você também pode optar por apagar os arquivos de configuração – mas isto vai forçar um novo login quando você reiniciar o Spotify (e possivelmente perder qualquer outra configuração local que esteja salva nos arquivos de preferências).

Javascript – atribuição por referência x atribuição por valor

No Javascript os dados do tipo primitivos são atribuídos por valor e os objetos são atribuídos por referência.

O que são dados do tipo primitivos?

  • string
  • number
  • boolean
  • null
  • undefined
  • symbol

O que são considerados objetos?

  • Array
  • Funções
  • { }

O que significa passar os dados por valor?

Nos dados primitivos os dados são passados por valor, isso significa que é criado uma cópia e acontece uma nova alocação de memória para aquela informação.

let a = 1;
let b = a;
b += 1;

console.log(a); //1
console.log(b); //2

No exemplo acima, quando defino b é criado uma nova alocação de memória que copia o valor de a e atribui a minha nova variável b. Elas agora são independentes.

O que significa passar os dados por referência?

Quando falamos que os dados são passados por referência significa que irão apontar para o mesmo objeto na memória – o novo objeto será apenas uma referência ao caminho do objeto original na memória (pense como se fosse um atalho que você cria no seu desktop).

Isso acontece nos objetos:

let person = { name : 'Pacato'};
let person2 = person;
person2.name = 'Leon';

console.log(person.name); //Leon
console.log(person2.name); //Leon

Como person2 é apenas uma referência ao objeto alocado na memória como person, qualquer alteração em qualquer um deles será refletida no outro.

let arr = [1,2]; 
let arr2 =arr; 
arr2.push(3); 
console.log(arr); // [1, 2, 3]
console.log(arr2); // [1, 2, 3]

O mesmo ocorre com o array acima.