Linux Logando no AD com SSSD

Oi pessoal, Isaac aqui!

Alguns anos atrás logar o Linux no AD era uma baita dor de cabeça tinha que usar o Samba e me da preguiça só de pensar.

Na empresa nova em que estou trabalhando fui solicitado a fazer com que os servidores se usassem a base do AD para que apenas as pessoas do grupo determinado pudessem ter acesso, e pensei viiiiish, mas ai fui estudar um pouco e descobri a solução quase mágica que é o SSSD, como bom entusiasta de Software Livre, estou aqui pra compartilhar.

Primeiro de tudo precisamos baixar os pacotes necessários para o funcionamento:

Se estiver em algum “Filho do Debian”:

apt -y install realmd sssd sssd-tools adcli krb5-user packagekit samba-common samba-common-bin samba-libs resolvconf

Agora, se sua praia for os “chapéus vermelhos”:

yum install sssd sssd-tools adcli packagekit samba-common samba-common samba-libs krb5-workstation realmd

 

Depois disso Editamos o /etc/krb5.conf da seguite forma:

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = DOMINIO.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = yes

[realms]
DOMINIO.LOCAL = {
kdc = servidor.dominio.local:88
admin_server = servidor.dominio.local:749
}

[domain_realm]
dominio.local = DOMINIO.LOCAL
.dominio.local = DOMINIO.LOCAL

 

 

Lembrando que aqui no nosso exemplo o nome do domínio é “dominio.local” e que o AD é meio chato então é importante as vezes deixar em caixa alta algumas coisas. Outra coisa, é importante que seu servidor de DNS consiga resolver o seu domínio e o nome do seu servidor de domínios.

Agora vamos adicionar a máquina ao domínio:

#kinit Administrator@DOMINIO.LOCAL

#realm leave DOMINIO.LOCAL

#realm discover DOMINIO.LOCAL

#realm join DOMINIO.LOCAL

 

Agora a cereja do bolo editar arquivo /etc/sssd/sssd.conf:

[sssd]
domains = dominio.local
config_file_version = 2
services = nss, pam , pac , sudo

[domain/dominio.local]
ad_domain = dominio.local
krb5_realm = DOMINIO.LOCAL
realmd_tags = manages-system joined-with-adcli
cache_credentials = False
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = False
fallback_homedir = /home/%d/%u
access_provider = ad
auth_provider = ad
chpass_provider = ad
#debug_level = 9
#debug_level = 0x0FF0
enumerate = True
case_sensitive = False
#testes
ldap_user_principal = nosuchattribute
krb5_validate = false
krb5_use_enterprise_principal = false
krb5_canonicalize = false
ad_gpo_access_control = permissive

[nss]
filter_groups = root
filter_users = root

[pam]
offline_credentials_expiration = 3

 

Agora, para que as pastas home dos usuários sejam criadas automaticamente quando for feito o login edite /etc/pam.d/common-account e inclua a linha:

session required pam_mkhomedir.so skel=/etc/skel/ umask=0022

 

Reiniciar e habilitar o sistema do sssd:

systemctl restart sssd

systemctl enable sssd

 

Pronto, os usuários do AD já podem se logar no seu Linux sem maiores problemas.

Agora tenho uns truques legais pra dar uma incrementada na situação:

1 – Para que apenas um grupo especifico do AD consiga logar no Linux

Editar o /etc/pam.d/sshd (ou /etc/pam.d/login para logins locais) e adicionar ou descomentar a linha:

account required pam_access.so

 

Ai então editamos o arquivo /etc/security/access.conf da seguinte forma

+:dominio.local\grupo_ad:ALL (permite o grupo_ad se logar vindo de qualquer ip)

+:suporte:ALL (permite o usuário local chamado suporte se logar de qualquer ip)

+:root:10.1.1.1(permite o usuário local root se logar vindo apenas de um ip específico)

-:ALL:ALL (nega o acesso de qualquer outro usuário a vindo de qualquer ip)

 

Reiniciar o Serviço do SSH!

 

2 – Para que um grupo do AD possa usar poderes de root:

Editar /etc/sudoers da maneira bagunçada que funcionou pra mim :

 

%dominio.local\\grupo_ad ALL=NOPASSWD: ALL
+dominio.local\\grupo_ad ALL=NOPASSWD: ALL
+grupo_ad@dominio.local ALL=NOPASSWD: ALL
%grupo_ad ALL=NOPASSWD: ALL

Bom ficou meio grande pra caramba, mas acho que da pra seguir certinho sem maiores problemas e o resultado é muito bom. Lembre-se sempre de deixar um usuário local de “back door” para que você consiga logar no servidor em qualquer eventualidade.

No mais é isso, espero que vocês usem e gostem do artigo. Até a próxima.

 

 

Anúncios

Ldapsearch, dicas para melhorar suas buscas

Duas dicas rápidas para melhorar suas buscas com Ldapsearch:

1 – Impedir quebra de linhas estranhas:

Normalmente o ldapsearch quebra as linhas de forma estranha o que pode dificultar na criação de scripts que dependam dessa saída, para evitar que isso ocorro adicione “-o ldif-wrap=no”

 

2 – Alterar limite de resultados:

Bom aqui temos duas dicas em uma, para configurar no lado do client impedindo que este tenha limite de resultados dentro do ldap.conf devemos adicionar a linha:

sizelimit           0

Caso ainda assim os resultados venham com limite significa que o servidor ldap está limitando sua busca, para isso durante o ldapsearch você pode paginar suas buscas usando “-E pr=10000/noprompt” fazendo assim que sejam criadas páginas de 1000 resultados e buscando todos os resultados do servidor.

Até mais pessoal. o>

Vim – Criar backups automáticos

Tirando a poeira disso aqui. =D

Uma dica bacana pra quem usa o vim (vi improved) e usa mexe muito em arquivos de configuração. Existe a possibilidade de criar uma regra no vim para toda vez que você editar um arquivo ele criar um backup de como esse arquivo era antes da alteração. Para tal você deve alterar o arquivo “/usr/share/vim/vim80/defaults.vim” se sua máquina for um Debian ou deriavados, ou o arquivo /etc/vimrc no CentOS, e adicionar as linhas abaixo:

 

set backup
set writebackup
set backupcopy=yes
au BufWritePre * let &bex = ‘@’ . strftime(“%F.%H:%M”)

Vou tentar voltar a escrever com mais regularidade, Obrigado pessoal e até a próxima. o>

Matar todos os processos que compartilham um nome no Linux

Diquinha rápida e útil no linux que eu descobri recentemente.

Ao invés de ter que procurar todos os PIDs de um processo no linux e copia-los um a um pra matar existe uma forma mais rápida, o comando pgrep, lista todos os PIDs de um determiado processo por exemplo:

pgrep chrome  #lista todos os PIDs de processos que contenha chrome no nome.

Para então matar todos os processos de uma só vez:

pgrep chrome | xargs kill -9

Até mais! =D

Admin Limitado a Domínio no Zimbra

Meio sumido com posts aqui no site mas escrevendo pra compartilhar uma coisa que achei legal na internet e pode ser bem útil, um script que permite um usuário a ser administrador do zimbra apenas para um domínio, segue abaixo:

#!/bin/bash

# $1 domain

# $2 email

zmprov ma $2 zimbraIsDelegatedAdminAccount TRUE

zmprov ma $2 zimbraAdminConsoleUIComponents cartBlancheUI zimbraAdminConsoleUIComponents domainListView zimbraAdminConsoleUIComponents accountListView zimbraAdminConsoleUIComponents DLListView

zmprov ma $2 zimbraDomainAdminMaxMailQuota 0

zmprov grantRight domain $1 usr $2 +createAccount

zmprov grantRight domain $1 usr $2 +createAlias

zmprov grantRight domain $1 usr $2 +createCalendarResource

zmprov grantRight domain $1 usr $2 +createDistributionList

zmprov grantRight domain $1 usr $2 +deleteAlias

zmprov grantRight domain $1 usr $2 +listDomain

zmprov grantRight domain $1 usr $2 +domainAdminRights

zmprov grantRight domain $1 usr $2 +configureQuota

zmprov grantRight domain $1 usr $2 set.account.zimbraAccountStatus

zmprov grantRight domain $1 usr $2 set.account.sn

zmprov grantRight domain $1 usr $2 set.account.displayName

zmprov grantRight domain $1 usr $2 set.account.zimbraPasswordMustChange

zmprov grantRight domain $1 usr $2 getDomainQuotaUsage

zmprov grantRight account $2 usr $2 +deleteAccount

zmprov grantRight account $2 usr $2 +getAccountInfo

zmprov grantRight account $2 usr $2 +getAccountMembership

zmprov grantRight account $2 usr $2 +getMailboxInfo

zmprov grantRight account $2 usr $2 +listAccount

zmprov grantRight account $2 usr $2 +removeAccountAlias

zmprov grantRight account $2 usr $2 +renameAccount

zmprov grantRight account $2 usr $2 +setAccountPassword

zmprov grantRight account $2 usr $2 +viewAccountAdminUI

zmprov grantRight account $2 usr $2 +configureQuota

 

Para funcionamento criar o admin.sh com as linhas acima, dar poder de execução com chmod +x admin.sh e executar como usuário root (de preferência na pasta /tmp).

O Script pode ser modificado para dar mais ou menos permissões de acordo com as possibilidades do zmprov.

Espero ter ajudado !

 

Créditos a SWS:

https://www.facebook.com/SWS-440700789370413/?fref=photo

Inodes Cheios no Linux, como identificar onde está o problema.

Olá!

Essa é uma dica bem simples do que aconteceu comigo.

Como a maioria deve saber o HD da máquina pode não estar cheio e ainda assim você não conseguir gravar mais arquivos devido a falta de Inodes no HD.

Mas o que isso significa? Toda vez que você cria um novo arquivo no linux ele usa um espaço no HD chamado Inode. Você pode então não estar com todos os Gbs ou Tbs do seu HD cheio, mas sim com o HD faltando Inodes.

Para identificar quanto de Inodes temos disponível é fácil basta usar um:

df -hi

Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 32M 54K 32M 1% /

Bom no meu caso aqui como da pra ver estou usando somente 1% dos inodes disponíveis. Quando uso o comando df no linux sempre gosto da opção ‘h’ pois fica mais fácil de visualisar de forma ‘humana’ como diz o próprio comando. Já a opção i é para verificar os inodes e não o espaço em disco.

Aí você se pergunta: “E se os inodes estão cheios, como verifico onde esão as pastas que contem mais arquivos para que possa verificar  o que está ocorrendo ?”, fácil é só usar esse comando abaixo:

find / -xdev -printf ‘%h\n’ | sort | uniq -c | sort -k 1 -n

Ele vai listar todas as pastas do sistema e organizar de forma que  você visualize aquelas que contém mais arquivos.

Espero ter ajudado! Até a próxima!

Zimbra: Alterar Status das contas via LDAP

Bom, algumas empresas tem requisitado que seus usuários não possam acessar suas contas fora do horário comercial.

Para realizar um bloqueio das contas usando os comandos do Zimbra é uma tarefa fácil, porem muito demorada, ainda mais se a base de usuários for muito grande.

Então desenvolvi um script que altera o status de todas as contas de forma prática e rápida via LDAP. Segue abaixo:

https://github.com/whyzack/change_status/blob/master/change_status.sh

Espero que seja util assim como foi para mim.

Qualquer dúvida é só perguntar.