Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring

_Créditos das imagens: ChatGPT_ ### LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring Resolver o problema do [Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring/description/) é um exercício clássico de programação, que desafia desenvolvedores a encontrar a maior substring palindrômica dentro de uma string. Recentemente, exploramos soluções tanto em Harbour quanto em TLPP (Total Language Protheus Programming). Neste artigo, comparamos as implementações nessas duas linguagens, destacando suas semelhanças, diferenças e funcionalidades específicas. #### Implementações em Harbour ##### Versão 5.1 Essa solução utiliza a técnica de expansão a partir do centro do palíndromo. Cada caractere ou par de caracteres consecutivos é considerado um possível "centro". O algoritmo expande em ambas as direções enquanto os caracteres forem iguais, retornando o maior palíndromo encontrado. ##### Versão 5....

BlackTDN :: Autenticação 2FA para Usuário Root no WSL



---

# naldodj-wsl-2FA

## Autenticação 2FA para Usuário Root no WSL

### Introdução

O Windows Subsystem for Linux (WSL) é uma ferramenta poderosa que permite aos desenvolvedores executar um ambiente Linux diretamente no Windows. No entanto, a segurança é uma preocupação importante, especialmente quando se trata de acessar o usuário root. Neste post, vamos mostrar como configurar a autenticação de dois fatores (2FA) para o usuário root ao acessar o WSL, garantindo uma camada adicional de segurança.

### Objetivo

Vamos configurar um script de login que valida a senha do root e usa autenticação 2FA baseada em Time-based One-Time Password (TOTP), usando ferramentas comuns como `openssl`, `oathtool`, e `perl`.

### Passo 1: Instalar as Ferramentas Necessárias

Primeiro, precisamos garantir que temos todas as ferramentas necessárias instaladas. Isso inclui `openssl`, `oathtool`, e `perl`.

```bash
sudo apt-get update
sudo apt-get install openssl oathtool perl
```
Para os scripts em Lua. Incluir `lua`, `lua-posix`

```bash
sudo apt-get install lua5.4
sudo apt-get install lua-posix
```

### Passo 2: Gerar e Armazenar a Chave Secreta

Criar o diretório `/root/2FA/`
```bash
makedir /root/2FA/
```

Criar o(s) diretório(s)
```bash
makedir /root/scripts/
makedir /root/scripts/sh/
makedir /root/scripts/lua/
makedir /root/scripts/ps/
makedir /root/scripts/hb/
makedir /root/scripts/perl/
```

Gerar uma chave secreta que será usada para gerar os códigos TOTP. Vamos armazenar essa chave em um arquivo seguro em `/root/2FA/`.

Crie um script chamado: [get2FAkey.sh](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/sh/get2FAkey.sh)

Ou, Crie um script chamado: [get2FAkey.lua](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/lua/get2FAkey.lua)

Ou, ainda, Crie um script chamado: [get2FAkey.ps1](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/ps/get2FAkey.ps1)

Ou: [get2FAkey.prg](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/hb/get2FAkey.prg) : Dependente de LUA,PERL e PHYTON
Ou: [hb_get2FAkey.prg](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/hb/hb_get2FAkey.prg) : Não Dependente de LUA,PERL ou PHYTON

Execute o script para gerar e armazenar a chave secreta:

```bash
chmod +x /root/scripts/sh/get2FAkey.sh
/root/scripts/sh/get2FAkey.sh
```

ou

```bash
chmod +x /root/scripts/lua/get2FAkey.lua
/root/scripts/lua/get2FAkey.lua
```

ou

```bash
chmod +x /root/scripts/ps/get2FAkey.lua
pwsh /root/scripts/ps/get2FAkey.ps1
```

ou, após compilar: [get2FAkey.prg](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/hb/get2FAkey.prg)

```bash
chmod +x /root/scripts/hb/get2FAkey
/root/scripts/hb/get2FAkey
```

ou, após compilar: [hb_get2FAkey.prg](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/hb/hb_get2FAkey.prg)

```bash
chmod +x /root/scripts/hb/hb_get2FAkey
/root/scripts/hb/hb_get2FAkey
```

### Passo 3: Configurar o Script de Login

Agora, vamos criar um script de login que valida a senha do root e solicita o código 2FA.

Crie um script chamado: [login.sh](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/sh/login.sh)
ou, Crie um script chamado: [login.lua](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/lua/login.lua)
ou, ainda, Crie um script chamado: [login.ps1](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/ps/login.ps1)
ou: [login.prg](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/hb/login.prg)  : Dependente de LUA,PERL e PHYTON
ou: [hb_login.prg](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/hb/hb_login.prg)  : Não dependente de LUA,PERL e PHYTON

### Passo 4: Configurar o Script para validar o Login

Vamos precisar de um scrit [check_password.pl](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/perl/check_password.pl) , em `Perl`, que será utilizado para validar a senha pelos demais scripts (exceto para  [hb_login.prg](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/hb/hb_login.prg))

### Passo 5: Testar o Script de Login

1. **Defina permissões de execução para o script**:
    ```bash
    chmod +x /root/scripts/sh/login.sh
    ```
   ou
   ```bash
    chmod +x /root/scripts/lua/login.lua
   ```
   ou
   ```bash
    chmod +x /root/scripts/ps/login.ps1
   ```  
   ou, após compilar: [login.prg](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/hb/login.prg)
   ```bash
    chmod +x /root/scripts/hb/login
   ```
   ou, após compilar: [hb_login.prg](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/hb/hb_login.prg)
   ```bash
    chmod +x /root/scripts/hb/hb_login
   ```

3. **Execute o script de login**:
    ```bash
    /root/scripts/sh/login.sh
    ```
    ou
    ```bash
    /root/scripts/lua/login.lua
    ```
    ou
    ```bash
    pwsh /root/scripts/ps/login.ps1
    ```
    ou, opcionalmente e através do script [run_pslogin.sh](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/ps/run_pslogin.sh)
    ```bash
    /root/scripts/ps/run_pslogin.sh
    ```
    ou, após compilar: [login.prg](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/hb/login.prg)
    ```bash
    /root/scripts/hb/login
    ```
    ou, após compilar: [hb_login.prg](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/hb/hb_login.prg)
    ```bash
    /root/scripts/hb/hb_login
    ```

4. **Configure o aplicativo de 2FA** (como Microsoft Authenticator, Google Authenticator ou Authy) com a chave secreta armazenada em:
    `sh_2FAsecret_key.txt` ou
    `lua_2FAsecret_key.txt` ou
    `ps_2FAsecret_key.txt` ou
    `hb_2FAsecret_key.txt` ou

5. Configure o script para ser executado no login:

    Salve os scripts em suas respectivas pastas

    ```bash
    
    /root/scripts/sh/get2FAkey.sh
    /root/scripts/sh/login.sh
    
    /root/scripts/lua/get2FAkey.lua
    /root/scripts/lua/login.lua
    
    /root/scripts/perl/check_password.pl
    
    /root/scripts/ps/get2FAkey.ps1
    /root/scripts/ps/login.ps1
    /root/scripts/ps/run_pslogin.sh
    
    /root/scripts/hb/get2FAkey
    /root/scripts/hb/login

    /root/scripts/hb/hb_get2FAkey
    /root/scripts/hb/hb_login
    
    ```    

    Edite o arquivo .bashrc do root:
    ```bash
    nano /root/.bashrc
    ```
    Adicione a seguinte linha ao final do arquivo:
    ```bash
    #Scripts Login
    #/root/scripts/sh/login.sh
    #/root/scripts/lua/login.lua
    #/root/scripts/ps/run_pslogin.sh
    #/root/scripts/hb/login
    /root/scripts/hb/hb_login 
    ```

    Teste a configuração:
    Feche o terminal WSL e abra novamente com o comando:
    ```bash
    wsl --user root
    ```

### Passo 6: Garanta que os scripts não possam ser acessados via \\wsl.localhost\ no windows

1. **Defina o usuário padrao
```bash
sudo editor /etc/wsl.conf
```
```bash
[user]
default=[NonRootUser]
```
2. **Alterar o dono do arquivo para o usuário root:
```bash
sudo chown root:root /etc/wsl.conf
```
3. **Alterar as permissões do arquivo para que apenas o dono (root) tenha acesso:
```bash
sudo chmod 600 /etc/wsl.conf
```
4. **Através do Powershell, Reincie a distro :
```bash
wsl --shutdown
```

### Conclusão

Com essas etapas, você configurou um sistema de autenticação robusto para o usuário root no WSL, utilizando uma senha e autenticação de dois fatores (2FA). Isso adiciona uma camada extra de segurança, protegendo contra acessos não autorizados. Lembre-se de armazenar a chave secreta em um local seguro e ajustar as permissões dos arquivos conforme necessário.

Essa configuração pode ser adaptada e aprimorada conforme suas necessidades específicas, mas serve como uma base sólida para garantir a segurança no uso do WSL.

---
### Extra: Harbour Version

Para instalar e usar o Harbour a partir do repositório GitHub e compilar seus scripts usando `hbmk2`, siga estes passos:

### Instalação do Harbour

1. **Clonar o Repositório**:

```sh
git clone https://github.com/harbour/core.git
cd core
```

2. **Instalar Dependências**:

```sh
sudo apt-get update
sudo apt-get install build-essential git libssl-dev libpcre3-dev libncurses5-dev libcurl4-openssl-dev
```

3. **Compilar e Instalar o Harbour**:

```sh
make
sudo make install
```

4. **Dependência Opcional**:

Se encontrar problemas relacionados ao `libpcre3`, instale:

```sh
sudo apt-get install libpcre3
```

### Verificação

Verifique se o Harbour foi instalado corretamente:

```sh
hbmk2 -version
```

### Compilar e Executar Seus Scripts

1. **Salvar os Scripts**: Salve `login.prg` e `get2FAkey.prg` nos arquivos correspondentes.

2. **Compilar os Scripts**:

[get2FAkey.hbp](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/hb/get2FAkey.hbp)
[login.hbp](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/hb/get2FAkey.hbp)

```sh
hbmk2 login.hbp
hbmk2 get2FAkey.hbp
```

ou

[hb_get2FAkey.hbp](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/hb/hb_get2FAkey.hbp)
[hb_login.hbp](https://github.com/naldodj/naldodj-2FA-wsl/blob/main/src/hb/hb_get2FAkey.hbp)

```sh
hbmk2 hb_login.hbp
hbmk2 hb_get2FAkey.hbp
```

3. **Executar os Scripts**:

```sh
sudo ./login
sudo ./get2FAkey
```
ou
```sh
sudo ./hb_login
sudo ./hb_get2FAkey
```

### Dependências Adicionais

Certifique-se de ter o OpenSSL, Python e o OATH Toolkit instalados:

```sh
sudo apt-get install openssl python3 oathtool
```

### Resumo dos Scripts

1. **login.prg e hb_login.prg**:
   - Valida a senha do root.
   - Verifica o código 2FA.

2. **get2FAkey.prg e hb_get2FAkey.prg**:
   - Gera uma chave secreta para 2FA.
   - Armazena a chave em um arquivo protegido.

Seguindo estas etapas, você conseguirá configurar o Harbour a partir do código-fonte, compilar e executar seus scripts utilizando `hbmk2`.

---

## Referência(s):

[BlackTDN :: Como Forçar a Solicitação da Senha ao Acessar o WSL como Root](https://www.blacktdn.com.br/2024/06/blacktdn-como-forcar-solicitacao-da.html)

## GitHub:

[Autenticação 2FA para Usuário Root no WSL](https://github.com/naldodj/naldodj-2FA-wsl)
[Harbour](https://github.com/harbour/core)

---








Comentários

  1. PESSOAL Bom Dia, na verdade não seria um comentario e sim um pedido de AJUDA estou a DIAS tentando comunicar o PROTHEUS com uma DLL em C# e não estou conseguindo , aqui teria alguem com um EXEMPLO ou DOCUMENTAÇÃO que Explique os DOIS LADOS um FONTE em C# e um FONTE em ADVPL para se COMUNICAREM.
    De inicio OBRIGADO PELA ajuda..

    ResponderExcluir

Postar um comentário

Postagens mais visitadas