quinta-feira, 10 de outubro de 2019

Export Groups File manager Windows



filescrn filegroup export /file:G:\ransome.xml /filegroup:Filegroupname
exporta remoto

filescrn filegroup import /file:G:\allgroups.xml /remote:Targetserver

quinta-feira, 19 de setembro de 2019

RESET DSRM

To Reset the DSRM Administrator Password

  1. Click, Start, click Run, type ntdsutil, and then click OK.
  2. At the Ntdsutil command prompt, type set dsrm password.
  3. At the DSRM command prompt, type one of the following lines: 
    • To reset the password on the server on which you are working, type reset password on server null. The null variable assumes that the DSRM password is being reset on the local computer. Type the new password when you are prompted. Note that no characters appear while you type the password.

      -or-
    • To reset the password for another server, type
      reset password on server
      servername
      , where
      servername is the DNS name for the server on which you are resetting the DSRM password. Type the new password when you are prompted. Note that no characters appear while you type the password.
  4. At the DSRM command prompt, type q.
  5. At the Ntdsutil command prompt, type q to exit.


How to start in Directory Service Restore Mode (DSRM) in Windows Server 2008 and Windows Server 2008 R2


Here are two methods to enter Directory Services Restore Mode (DSRM) in Windows Server 2008 or Windows Server 2008 R2:



  1. From the Desktop use the graphical user interface (GUI) Msconfig tool. Click Start. In Start Search, type msconfig and then click OK. On the Boot tab, select Safe Boot, and then click Active Directory repair. (see attached figure)


  2. From a command prompt, use bcdedit. The command: bcdedit /set safeboot dsrepair enables DSRM upon restart. When you want to restart in normal mode, run the following command: bcdedit /deletevalue safeboot

This posting is provided "AS IS" with no warranties, and confers no rights.

quarta-feira, 28 de agosto de 2019

Configurar Network manager

nmcli connection edit type ethernet

goto ipv4.addresses

set ipv4.gateway 192.168.1.1
set ipv4.addresses 192.168.1.10/25
set ipv4.dns 192.168.1.100

save
quit
print

terça-feira, 27 de agosto de 2019

Squid no pfsense

ACLS

/var/squid/acl/whitelist.acl

acl whitelist dstdom_regex -i "/var/squid/acl/cdcsocial.acl"


CONF

/usr/local/etc/squid






1 - criada acl cdcsocial.acl com dominios regex a serem liberados
2 - criada acl cdcipssocial.acl com ips que acessarao
3 - efetuada montagem da declaracao

acl cdcsocial dstdom_regex -i "/var/squid/acl/cdcsocial.acl"
acl cdcipssocial dstdom_regex -i "/var/squid/acl/cdcipssocial.acl"


# Block top level domains
acl block_tld dstdomain .tv .xxx
http_access deny block_tld
deny_info TCP_RESET block_tld

acl expressoes_proibidas url_regex -i "/var/squid/acl/expressoesdeny.acl"

segunda-feira, 19 de agosto de 2019

Usos interessantes de algumas variáveis do sistema

Colaboração: Julio Cezar Neves
Data de Publicação: 19 de agosto de 2019
Rapidinho, antes da dica do dia, só um aviso. Hoje, às 23h59m se encerram as inscrições para o curso Programação Shell Linux, do Prof. Julio Neves.

O Shell utiliza inúmeras variáveis que já são predefinidas. Para você ter uma ideia, faça:
$ env | more
e aparecerão variáveis aos borbotões e note, todas com os nomes em caixa alta. Por isso recomendo a todos não usarem variáveis dos seus aplicativos em letras maiúsculas. Dificulta a vida de quem está depurando e pode te levar a um erro dificílimo de identificar, devido a você ter usado inadvertidamente um nome de variável do sistema.
A seguir mostro umas pouco, que têm duas particularidades:
  1. Poucos conhecem;
  2. São muito úteis quando bem utilizadas.
Vamulá:
VariávelDescrição
IFSEntender o funcionamento desta variável é muito importante, mas como é um tema extenso, este artigo ficaria muito longo no caso de entrar em muitos detalhes, Mas a grosso modo podemos dizer que diversos comandos (entre eles o readset, ...) aceitam seus argumentos separados pelos caracteres definidos nesta variável, cujos defaults são espaço, <TAB> e <ENTER>.
CDPATHContém os caminhos que serão pesquisados para tentar localizar um diretório especificado. Apesar desta variável ser pouco conhecida, seu uso deve ser incentivado por poupar muito trabalho, principalmente em instalações com estrutura de diretórios com muitos níveis.
PIPESTATUSÉ uma variável do tipo vetor (array) que contém uma lista de valores de código de retorno do último pipeline executado, isto é, um vetor que abriga cada um dos $? de cada instrução do último pipeline.
PROMPT_COMMANDSe esta variável receber uma instrução, toda vez que você der um <ENTER> direto no prompt principal ($PS1), este comando será executado. É útil quando se está repetindo muito uma determinada instrução.
REPLYQuando fazemos uma leitura com o comando read e não associamos nenhuma variável para receber a entrada, esses dados serão guardados nessa variável. Normalmente a usamos para leituras sem interesse futuro.

IFS

Veja isso:
$ read a b c <<< "1 2 3"
$ echo $a - $b - $c
1 - 2 - 3
Como a entrada veio separada por espaços em branco, que faz parte dos valores default da $IFS, pudemos ler seu conteúdo para diversas variáveis em um só read. Vou fazer o mesmo com <ENTER> que também é default.
$ Var=$(echo -e "1\n2\n3")
$ echo "$Var"
1
2
3
$ read a b c <<< $Var
$ echo $a - $b - $c
1 - 2 - 3
Agora vamos separar os campos por porralouquice:
$ IFS=-^ read a b c <<< 1^2-3
$ IFS=-:^ read a b c <<< 1^2-3
$ echo $a - $b - $c
1 - 2 - 3
Umas observações sobre o uso do IFS:
1. Nesse último exemplo, repare que entre a atribuição do IFS e o comando read não existe nada, sequer ponto e vírgula. Isso significa que ele foi alterado somente durante a execução do read. Só para te mostrar que isso pode ocorrer com outras duplas de comando+variável, veja a dupla date+LANG:
$ echo $LANG       # Idioma inicial
pt_BR.UTF-8
$ date
Dom Ago 18 14:56:52 -03 2019
$ LANG=C date      # Alterei o idioma só para o date
Sun Aug 18 14:57:29 -03 2019
$ echo $LANG       # Idioma final é o mesmo
pt_BR.UTF-8
2. Sempre que um Shell puder "enxergar" um IFS, ele o transformará num espaço em branco. Veja:
$ Var=$(grep root /etc/passwd)
$ echo $Var
root:x:0:0:root:bla-bla-bla:/root:/bin/bash
$ IFS=:
$ echo $Var
root x 0  root bla-bla-bla /root /bin/bash
$ echo "$Var"
root:x:0:0:root:bla-bla-bla:/root:/bin/bash
Como você pode notar, quando eu não protegi $Var da interpretação do Shell, os dois pontos (que era o IFS da vez) sumiram.
Quando coloquei $Var entre aspas para proteger seu conteúdo da interpretação do Shell, os dois pontos voltaram a aparecer.
3. Sempre que você alterar um IFS, é recomendável que você o restitua ao seu valor default após usá-lo para evitar erros difíceis de serem localizados.

CDPATH

Assim como a variável $PATH contém os caminhos nos quais o Shell procurará os arquivos, a $CDPATH possui os caminhos a serem seguidos para se fazer um cd.
$ cd bin
bash: cd: bin: Arquivo ou diretório não encontrado
$ CDPATH=$CDPATH:/usr/local # Adiciona /usr/local nos caminhos
$ echo $CDPATH
.:..:~:/usr/local
$ pwd
/home/jneves/LM
$ cd bin
$ pwd
/usr/local/bin
Como /usr/local estava na minha variável $CDPATH, e não existia o diretório bin em nenhum dos seus antecessores (... e ~), o cd foi executado para /usr/local/bin.

PIPESTATUS

Um vetor (array) em que cada elemento possui o código de retorno ($?) de cada uma uma das instruções que compoem um pipeline.
$ who
jneves   pts/0        Apr 11 16:26 (10.2.4.144)
jneves   pts/1        Apr 12 12:04 (10.2.4.144)
$ who | grep ^botelho
$ echo ${PIPESTATUS[*]}
0 1
Neste exemplo mostramos que o usuário botelho não estava "logado", em seguida executamos um pipeline que procurava por ele. Usa-se a notação [*] (ou [@]) em um vetor para listar todos os seus elementos, e desta forma vimos que a primeira instrução (who) foi bem sucedida (código de retorno 0) e a seguinte (grep), não foi (código de retorno 1).

PROMPT_COMMAND

Nunca dei muita bola para essa variável porque nunca havia encontrado nenhuma aplicabilidade para ela. Por outro lado, diversas vezes já dei um <CTRL>+r para pesquisar no arquivo de histórico de comandos uma instrução muito longa ou alguma que já havia esquecido e não encontrei o que queria porque este arquivo é circular, isto é, depois de um determinado número de registros gravados (essa quantidade é definida pela variável $HISTSIZE) começa a haver superposição.
Para ter os meus preciosos comandos por mais tempo, comecei tentando aumentar o valor de $HISTSIZE até o limite, mas, mesmo assim, após meses, pesquisava o histórico e a linha de comando que me interessava não estava mais lá.
Foi então que li um artigo que me chamou a atenção sobre a variável PROMPT_COMMAND e veja só o que inseri no ~/.bashrc:
PROMPT_COMMAND='echo "$(history 1)" >> history4ever'
Como o comando history 1 lista a última linha executada, e como a função de $PROMPT_COMMAND é executar o seu conteúdo antes de devolver o prompt, todo comando executado é gravado no arquivo history4ever e, quando preciso de um comando, basta pesquisá-lo usando todas as facilidades que o grep provê.
Ainda sobre o history, sempre que estou dando um treinamento, logo no primeiro minuto de aula aconselho que os treinandos ponham no seu ~/.bashrc a seguinte linha:
$ PROMPT_COMMAND="echo -n \[$(date +%d/%m-%H:%M)\] "
Supondo que o $PS1 na minha máquina seja um cifrão ($), a cada vez que eu der um <ENTER>, ele me devolverá um prompt com a data e a hora, seguido pelo cifrão ($). Assim:
$ PROMPT_COMMAND="echo -n \[$(date +%d/%m-%H:%M)\]"
[12/09-02:56]$
Faço isso porque ao final do curso, junto com todo o material que entrego, o aluno ainda levará um pendrive com o histórico de tudo que ele fez ao longo das 40 horas de treinamento, com a data e a hora devidamente registradas.
Uma forma fácil de você ver a $PROMPT_COMMAND em ação é fazendo, por exemplo:
$ PROMPT_COMMAND=ls
Agora a saída de cada comando que você executar será seguida pela lista dos arquivos do diretório. Ficou um saco, né? Para desfazer faça:
$ unset PROMPT_COMMAND
Eu disse que seria executado antes do prompt, mas isso é o mesmo que dizer que será executado após cada comando. Então poderíamos fazer:
$ PROMPT_COMMAND='(( $? )) && {
    tput bold
    echo instrução errada
    tput sgr0
    }'
$ ./nãoexiste 
bash: ./nãoexiste: Arquivo ou diretório não encontrado 
instrução errada

Ou seja, após cada instrução, seu código de retorno é testado e, sendo diferente de zero, a mensagem instrução errada será dada em ênfase e logo após será restaurado o modo normal do terminal (sem negrito).

REPLY

Quando você lê algo com importância somente pontual para seu programa, use esta variável para receber o dado lido.
read -n1 -p "Deseja sair? "; [[ ${REPLY^} == S ]] && exit
Repare que não armazenei em nenhuma variável o que foi teclado, pois após esse local, ele não teria nenhum interesse para o meu programa. Usei então o $REPLY dentro de uma Expansão de Parâmetros que passa seu conteúdo para caixa alta.

Htpasswd - Autenticação

Para proteger um diretório ou arquivos por senha, siga as instruções abaixo:

1) Conecte-se ao seu site via Telnet (porta 2300) ou SSH (preferivelmente).

2) Certifique-se de que você está no seu diretório home. Para isto basta digitar no Telnet o comando "cd" sem argumentos.

3) Para criar um arquivo de senhas chamado ".htpasswd" e acrescentar um usuário "nome1", digite:

htpasswd -c .htpasswd nome1

Será pedida a senha do novo usuário, que deverá ser digitada duas vezes.

4) Para adicionar mais usuários (o que pode também ser feito posteriormente) digite, por exemplo:

cd
htpasswd .htpasswd nome2
htpasswd .htpasswd nome3
... 

5) Para alterar as senhas:

cd
htpasswd .htpasswd nome1
htpasswd .htpasswd nome2
htpasswd .htpasswd nome3

6) Supondo que você queira proteger um DIRETÓRIO chamado secreto sob a raiz do site, deve-se criar um arquivo texto chamado ".htaccess" no diretório public_html/secreto com o conteúdo:

AuthUserFile /home/<LOGIN>/.htpasswd
AuthGroupFile /dev/null
AuthName Restrito
AuthType Basic
<Limit GET POST>
require user nome1 nome2 ( somente os usuários nome1 e nome2 teram acesso a este diretório )
</Limit> 

7) Já para proteger um ARQUIVO chamado, por exemplo, secreto.php sob a raiz do site, o arquivo texto ".htaccess" no diretório public_html/secreto deverá ter o conteúdo a seguir:

AuthUserFile /home/<LOGIN>/.htpasswd
AuthGroupFile /dev/null
AuthName Restrito
AuthType Basic
<Files "secreto.php">
require user nome1 nome2 ( somente os usuários nome1 e nome2 teram acesso a este arquivo )
</Files>


8) Para proteger mais de um arquivo, basta incrementar com a TAG <Files> </Files>:

<Files "secreto.php">
require user nome1 nome2 ( somente os usuários nome1 e nome2 teram acesso a este arquivo )

</Files>
<Files "arquivo2.php">
require user nome1 nome2 nome3 ( os usuários nome1, nome2 e nome3 teram acesso a este arquivo )
</Files>
<Files "arquivo3.php">
require user nome1 ( somente o usuário nome1 terá acesso a este arquivo )
</Files> 


Notas: 

- A diretiva "Options Indexes" não está habilitada no servidor compartilhado por questões de segurança.

Options +Indexes -> Lista os arquivos caso não haja uma página index.html.
Options -Indexes -> Desativa a opção acima.

- Caso queira transferir por FTP o arquivo .htaccess para um diretório do seu site, certifique-se de utilizar tipo "ASCII" (e nao "BINARY") na transmissão.

- Para permitir acesso a todos os usuários cadastrados, ao invés de require user nome1 nome2 etc.

colocar simplesmente:

require valid-user 

- O AuthName é a mensagem que irá aparecer na janela de senha (para usar mais de uma palavra, coloque entre " ").

- Lembre-se de alterar <LOGIN> pelo seu usuário de FTP. 

- As senhas dos usuários devem ter no máximo 8 dígitos.

quarta-feira, 8 de maio de 2019

Habilitar desligamento automatico

Shutdown Windows 10 remotely

In order to enable Alexa to be able to shutdown window PC in our home using voice commands I needed to start by being able to perform the task from my Linux machine using a shell script.
There are a few hurdles I cam across when I was working through setting this up on my windows 10 Pro Desktop.

1. Firewall

If your Linux PC is on the same LAN and in the same IP subnet but is unable to connect to your windows desktop which is evident with returned errors talking of TIMEOUT then try disabling your firewall temporarily for troubleshooting. 
  1. Step 1: Open the Control Panel. Hold down the Windows key ( ) and press “X”. Select “Control Panel” in the menu.
  2. Step 2: Open Windows Firewall Settings. In the Control Panel select “System and Security” …
  3. Step 3: Disable the Firewall. Ensure that both the private and public network firewalls are turned off.
It is recommended that you turn on the firewall after trouble shooting and add an exception for RPC instead, OR if you network type is set to Public and is better suited to be classified as Private then simply change the network type as shown below.
Change Network Category
Open PowerShell with administrative privileges
Run the following command:
Get-NetConnectionProfile
See the network name you want to change its type and run the following command:
Set-NetConnectionProfile -Name “NETWORKNAME” -NetworkCategory Private
Where NETWORKNAME is the name of your network and you can change the -NetworkCategory switch value to Public or Private.

TESTING
From your Linux PC try:
telnet <desktop.IP.Address> 445
If this connects then the firewall is either disabled or configured to pass the RPC traffic through to your desktop.
Example of a successful connection
root@linux:~# telnet 192.168.0.65 445                 
Trying 192.168.0.65…
Connected to 192.168.0.65.
Escape character is ’^]’.


2. UAC (User Account Control)

If you run the ‘net rpc shutdown’ command and see a response similaar to this:
Shutdown of remote machine failed
result was: WERR_CALL_NOT_IMPLEMENTED
To solve this temporarily you could simply disable the UAC but this is certainly not a great position to leave your desktop. I am satisfied with the workaround provided below but you may think differently.
The credit for the UAC workaround goes to  Lowell Heddings, better known online as the How-To Geek.
By default your desktop doesn’t allow UAC elevation over the network with a local user account.
There’s a registry key that we can use to change this behavior to work the same as Windows XP. This will make your computer less secure, and I can’t recommend that you do this… but it’s also good to understand how Windows works.
Manual Registry Hack
Open regedit.exe through the start menu search or run box, and then navigate down to the following key, creating a new key if it doesn’t exist.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
image
On the right-hand side, add a new 32-bit DWORD value named LocalAccountTokenFilterPolicy and set the value to 1.
To remove this tweak you can set the value to 0 or just delete the key.

3. Remote Registry Service

Another error that you may come across when running the ‘net rpc shutdown’ command is this:
could not initialise pipe \winreg. Error was NT_STATUS_OBJECT_NAME_NOT_FOUND
Try running services.msc, scroll down to ‘Remote Registry and make sure it is set to automatic and started (running) then try again.

Linux PC

On your Linux PC use the following command (try apt-get install samba-common if its not already available).
net rpc shutdown -I WIN.IP.ADDR -U USER%PASSWORD
All going well the Windows PC should advise the user they are being signed out and then shutdown.
In a future Post I will look at extending this to explain how to make Alexa shutdown the PC upon request using a script.

RECOVER SENHA UBUNTU