criação automática de perfis bash?

1

Seguindo as instruções deste belo tutorial aqui .

Eu configurei com sucesso meu servidor CentOS 6.5 para autenticar com meu domínio. Além disso, somente permite que usuários do domínio do grupo domain-ssh-users efetuem login via SSH. Há mais uma peça que preciso para o meu quebra-cabeça.

Quando um usuário de domínio faz logon via SSH pela primeira vez, um diretório pessoal é criado automaticamente para eles (conforme a explicação que eu postei acima). Para todos os diretórios base criados para esses usuários de domínio do grupo domain-ssh-users , mas não para usuários locais, eu quero que um .bash_profile específico seja criado. A parte "fácil" disso é que .bash_profile será idêntico para todos os domain-ssh-users .

Alguém pode me dar alguma pista sobre como fazer isso?

Editar : Diferença em variáveis de ambiente entre logins locais e de domínio.

Tudo é praticamente o mesmo, exceto por essas diferenças (ofuscadas pela segurança).

Utilizador local:

PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/LOCALUSER/bin
PWD=/home/LOCALUSER
HOME=/home/LOCALUSER
LOGNAME=LOCALUSER

Utilizador do domínio:

PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/local.mydomainname.com/DOMAINUSER/bin
PWD=/home/local.mydomainname.com/DOMAINUSER
KRB5CCNAME=FILE:/tmp/krb5cc_gibberish_8839
HOME=/home/local.mydomainname.com/DOMAINUSER

Então ... hum talvez isso seja super fácil. Posso fazer com que o script de criação bash use um bash_profile diferente dependendo se o usuário está ou não em /home ou em /home/local.mydomainname.com ?

Edit2 :

Então, tentei criar este .bash_profile como um teste e colocá-lo nos diretórios / home de um usuário local e de domínio:

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
       . ~/.bashrc
fi

env='env'

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

if echo $env grep -q "local.mydomain.com"
       then
               umask 000
               /domain/menu.sh
               clear;exit
fi

Mas agora, quando eu faço o login como o usuário local ou o usuário do domínio, ele inicia o menu.sh. Eu sou novo nessa criação de .bash_profile, então tenho certeza de que estou perdendo algo simples.

    
por Daniel 02.10.2014 / 04:30

3 respostas

1

Coloque o arquivo .bash_profile em /etc/skel/ . É basicamente um diretório de modelos para novos perfis de usuários. Qualquer coisa lá é copiada para $HOME quando um novo usuário é criado e eles têm um $HOME dir. É semelhante a um perfil padrão no Windows.

Para usar o mesmo arquivo para usuários remotos e locais, procure uma variável que somente usuários remotos tenham definido e inclua um teste para isso em funções / configurações que você deseja aplicar a eles. Algo semelhante a SSH_CLIENT ou SSH_TTY

if [[ $SSH_CLIENT ]]; then
    setup foo for a remote user
else
    setup foo for a local user
fi
    
por 02.10.2014 / 07:05
0
O diretório

/etc/profile.d / contém scripts que são executados em user_login. Crie um script aqui para gerar o perfil bash.

#!/bin/bash
export your environment variables here
or invoke a script that generates bash profile.

O local bash_profile deve estar localizado no diretório do usuário, por exemplo, (/home/usr/.bash_profile)

Um bash_profile, geralmente, é uma lista de variáveis de ambiente exportadas (por exemplo, caminhos ...)

export VARENV="/path/to/object/"
    
por 02.10.2014 / 04:38
0

Página do Manual do SAMBA para Sincronizar Contas de Usuário com Domínio

Lista de e-mails do SAMBA :: Verificando o status de um usuário do domínio em relação ao Active Directory D (omain) / C (ontroller)

Uma maneira que eu vejo para realizar essa tarefa é colocar um script dentro do diretório /profile.d/ indicado na minha outra resposta.

Teste a participação no domínio e o status do usuário, dependendo dos resultados da consulta, atenda ao seu requisito ou, se o usuário não atender ao requisito de privilégio de domínio, não crie um bash_profile.

Comando do console Bash

$> getent group

Resultado

Domain Admins:x:512:root
Domain Users:x:513:jht,lct,ajt,met,vlendecke
Domain Computers:x:553:
... ...
domain-ssh-users:x:55X:harry,mark,john

Testando a participação no grupo de domínio

DOMAIN_GROUPS='getent group'
USERS_DOMAIN_SSH='echo $DOMAIN_GROUPS | grep "domain-ssh-users" | sed 's/domain-ssh-users:x:55X://g'
USER='last | head -n 1'
if [ 'echo $DOMAIN_GROUPS | grep $USER' ]
then
#... Do add bash_profile.
else
#... Do not add bash_profile.
exit
fi

Isso é hacky, mas é viável ...

A atribuição

DOMAIN_GROUPS lista grupos de domínio e usuários associados. USER_DOMAIN_SSH lê DOMAIN_GROUPS, retira tudo, exceto a linha de domínio-ssh-users, e o processamento de texto por stream retira tudo, exceto para usuários delineados por vírgula. USER verifica os últimos usuários para fazer login e lê o último login absoluto.

O teste verifica a string DOMAIN_GROUPS para o USUÁRIO.

Exemplo de exportações de caminho do SAMBA

if [ $TEST_DOMAIN_USER_ACCESS_LEVEL ]
then
export PATH='/usr/local/samba/bin:\
/usr/local/samba/sbin:$PATH' >> /home/domain/user/.bash_profile && echo OK
else
exit
fi

Gerenciamento do grupo SAMBA

script profile.d

#!/bin/bash
env='env'
#Store env to string then test for domain membership...
if echo $env grep -q "local.mydomainname.com"
  then
    user='cat /var/log/auth | grep LOGIN | grep -o '.\{0,0\}:.\{0,100\} | sed 's/: //g' | grep -Eo '^[^ ]'
    # There's a step ^^ missing in this assignment to grab the first line matching a pattern. So here we are checking what user to build for.
    echo "Line 1 of ~/.bashrc" >> /home/mydomain/$user
    echo "Line 2 of ~/.bashrc" >> /home/mydomain/$user
  else
    echo "Do not build a ~./bashrc for non-domain users"
fi
    
por 02.10.2014 / 15:53