Pular para o conteúdo principal

Postagem em destaque

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.

BlackTDN :: Validando Expressões Regulares em ADVPL usando PowerShell

Em BlackTDN :: Expressões Regulares ~ RegExp via Ezzy Learning Validation vimos como validar Expressões Regulares usando uma aplicação WEB através de Socket, HTTPGet e Post.
 
Neste novo exemplo, veremos a validação através do Windows® PowerShell®.
powershell Para que o "script" possa ser executado faz-se necessário autoriza-lo através do Windows® PowerShell® , sendo assim, execute o Windows® PowerShell® e digite o seguinte comando: get-help about_signing. Esse comando irá listar as opções de "Diretivas de Assinatura e de Execução" de "Script", leia-as atentamente. Mas se quiser pular esse passo (eu não recomendo)digite o seguinte comando no Windows® PowerShell® : Set-ExecutionPolicy Unrestricted. Esse comando fará que qualquer "Script" seja executado em sua máquina (mas atente para os ítens de segurança listados à partir do comando get-help about_signing).
 
Segue o Fragmento do código que faz a validação:
/*/
    Funcao: PSRegEx
    Autor:  Marinaldo de Jesus
    Data:   03/04/2012
    Uso:    Exemplo de Uso de RegExp via PowerShell
/*/
Static Function PSRegEx( cString , cPattern )
    Local cMatch            := ""
    Local cPSScript         := ""
    Local cPSOutPath        := GetTempPath()
    Local cPSOutFile        := CriaTrab(NIL,.F.)
    Local cPSOutPathFile    := ( cPSOutPath + cPSOutFile+".ini" )
    Local cPSFileScript        := cPSOutFile
    Local cPSScriptPathFile    := ( cPSOutPath + cPSFileScript+".ps1" )
    Local oTFIni
    Local lMatch            := .F.
    BEGIN SEQUENCE
        While File( cPSOutPathFile ) .or. File( cPSScriptPathFile )
            cPSOutFile          := CriaTrab(NIL,.F.)
            cPSOutPathFile        := ( cPSOutPath + cPSOutFile+".ini" )
            cPSFileScript        := cPSOutFile
            cPSScriptPathFile    := ( cPSOutPath + cPSFileScript+".ps1" )
        End While
        cPSScript += '"'
        cPSScript += '[PS_REGEX]'
        cPSScript += '`r`n'
        cPSScript += 'match='
        cPSScript += '"'
        cPSScript += '+'
        cPSScript += '([regex]::ismatch("'+cString+'","'+cPattern+'")).ToString()
        cPSScript += ' | '
        cPSScript += 'Out-File -Encoding "ASCII" "' + cPSOutPathFile + '"'
        MemoWrite( cPSScriptPathFile , cPSScript )
        IF !File( cPSScriptPathFile )
            BREAK
        EndIF
        WaitRun( "POWERSHELL " + cPSScriptPathFile  )
        IF !File( cPSOutPathFile )
            BREAK
        EndIF
        oTFIni    := TFINI():New( cPSOutPathFile )
        cMatch    := oTFIni:GetPropertyValue("PS_REGEX","match")
        DEFAULT cMatch := "FALSE"
        cMatch    := Upper( cMatch )
        lMatch    := ( cMatch == "TRUE" )
        oTFIni    := FreeObj( oTFIni )
    END SEQUENCE
    IF File( cPSScriptPathFile )
        fErase( cPSScriptPathFile )
    EndIF
    IF File( cPSOutPathFile )
        fErase( cPSOutPathFile )
    EndIF
Return( lMatch )
 
Usei a Classe TFIni para Carregar informações salvas pelo Windows® PowerShell® e, em função disso, as dependências para a execução dos testes aumentaram.
 
Com esse novo exemplo teremos as seguintes saídas no Console do Protheus Server:

RegExp: [SoapRegExp][1.1][mail@blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.T.]
RegExp: [SoapRegExp][1.2][mail@blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.T.]
RegExp: [HttpGetRegExp][mail@blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.T.]
RegExp: [HttpPostRegExp][mail@blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.T.]
RegExp: [PSRegEx][mail@blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.T.]

RegExp: [SoapRegExp][1.1][mail_blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.F.]
RegExp: [SoapRegExp][1.2][mail_blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.F.]
RegExp: [HttpGetRegExp][mail_blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.F.]
RegExp: [HttpPostRegExp][mail_blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.F.]
RegExp: [PSRegEx][mail_blacktdn.com.br][^[a-zA-Z0-9\._-]+@[a-zA-Z0-9\._-]+.([a-zA-Z]{2,4})$][.F.]

RegExp: [SoapRegExp][1.1][111.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.]
RegExp: [SoapRegExp][1.2][111.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.]
RegExp: [HttpGetRegExp][111.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.]
RegExp: [HttpPostRegExp][111.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.]
RegExp: [PSRegEx][111.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.]

RegExp: [SoapRegExp][1.1][111111111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.]
RegExp: [SoapRegExp][1.2][111111111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.]
RegExp: [HttpGetRegExp][111111111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.]
RegExp: [HttpPostRegExp][111111111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.]
RegExp: [PSRegEx][111111111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.T.]

RegExp: [SoapRegExp][1.1][1a1.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.F.]
RegExp: [SoapRegExp][1.2][1a1.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.F.]
RegExp: [HttpGetRegExp][1a1.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.F.]
RegExp: [HttpPostRegExp][1a1.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.F.]
RegExp: [PSRegEx][1a1.111.111-11][(^\d{3}\.?\d{3}\.?\d{3}-\d{2})|(^\d{3}\d{3}\d{3}\d{2})$][.F.]

RegExp: [SoapRegExp][1.1][53.113.791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.]
RegExp: [SoapRegExp][1.2][53.113.791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.]
RegExp: [HttpGetRegExp][53.113.791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.]
RegExp: [HttpPostRegExp][53.113.791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.]
RegExp: [PSRegEx][53.113.791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.]

RegExp: [SoapRegExp][1.1][53113791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.]
RegExp: [SoapRegExp][1.2][53113791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.]
RegExp: [HttpGetRegExp][53113791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.]
RegExp: [HttpPostRegExp][53113791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.]
RegExp: [PSRegEx][53113791/0001-22][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.]

RegExp: [SoapRegExp][1.1][53113791000122][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.]
RegExp: [SoapRegExp][1.2][53113791000122][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.]
RegExp: [HttpGetRegExp][53113791000122][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.]
RegExp: [HttpPostRegExp][53113791000122][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.]
RegExp: [PSRegEx][53113791000122][^(\d{2}.?\d{3}.?\d{3}/?\d{4}-?\d{2})$][.T.]

RegExp: [SoapRegExp][1.1][123PWDRegEx436][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.T.]
RegExp: [SoapRegExp][1.2][123PWDRegEx436][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.T.]
RegExp: [HttpGetRegExp][123PWDRegEx436][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.T.]
RegExp: [HttpPostRegExp][123PWDRegEx436][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.T.]
RegExp: [PSRegEx][123PWDRegEx436][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.T.]

RegExp: [SoapRegExp][1.1][@#PWDRegEx#@][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.F.]
RegExp: [SoapRegExp][1.2][@#PWDRegEx#@][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.F.]
RegExp: [HttpGetRegExp][@#PWDRegEx#@][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.F.]
RegExp: [HttpPostRegExp][@#PWDRegEx#@][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.F.]
RegExp: [PSRegEx][@#PWDRegEx#@][^(.*(([^a-z1-9]+.*\d+)|(\d+.*[^a-z1-9]+)).*)$][.F.]

 
Para obter a nova versão do Programa de teste, agora com validação de RegEx via Windows® PowerShell® clique aqui.
 
Para consultar o código, clique aqui.
 
Obs.:
 
1) No exemplo Utilizei WaitRun, logo a validação se dará no Client. Para que a validação ocorra no server consulte:

2) Leia “Password Strength Validation with Regular Expressions” para entender como validar senhas com expressões complexas.

[]s
иαldσ dj

Comentários

  1. Opa obrigado naldo... farei meus testes... eu quase nao uso power shell em meu cotidiano, mas essa solução me pareceu muito mais interessante do que acessar um webservice externo.... o jeito é treinar...

    Israel Neves.

    ResponderExcluir
  2. Israel,

    Obviamente que são soluções paliativas. Dada a minha criatividade poderia implementa-las de n formas.
    Considerando que a Totvs usa a biblioteca QT da Nokia para desenvolver o Client a implementação de RegEx seria muito fácil se ela exportasse a classe QRegExp (http://qt-project.org/doc/qt-4.8/QRegExp.html) do QT para uso no Protheus.

    ResponderExcluir
  3. Parabéns!

    taí um bom site para testar suas criações..

    http://myregexp.com/signedJar.html

    ResponderExcluir

Postar um comentário

Postagens mais visitadas