Configurando um script em uma caixa AMI para criar diretórios - vsftpd, pam, mysql

1

Estou tentando configurar o vsftpd em uma caixa amazon ami de 64 bits, micro camada livre.

Seguindo estas instruções, link , consegui colocar meu ftp em funcionamento com sucesso. Desde que eu crie manualmente o diretório home dos usuários, ele funciona perfeitamente.

É necessário ter ajuda para configurar automaticamente os diretórios pessoais dos usuários. para o cliente ftp

A próxima coisa que queria fazer era configurar um script para configurar automaticamente o diretório inicial dos usuários, em vez de ter que fazê-lo manualmente. Eu encontrei alguma documentação aqui, link Eu passei horas tentando para que isso funcione sem sucesso.

Como a documentação do nicks, modifiquei meu arquivo /etc/pam.d/vsftpd para incluir as seguintes linhas de código.

#%PAM-1.0
session       optional        pam_keyinit.so       force revoke

# Auth in MySQL   
auth requisite pam_mysql.so user=vsftpd-ro passwd=readonly host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=0   
auth required pam_script.so onerr=success dir=/etc/pam-script**

Agora minha confusão

Devido à minha falta de conhecimento, não tenho certeza se devo criar o arquivo de script ou se ele já está incluído na caixa e só preciso modificá-lo. Eu estou supondo que quando Nick postou seu exemplo, ele criou o script em uma caixa de 32 bits, mas na parte inferior de seu artigo ele fala sobre um script de 64 bits.

De qualquer forma, quando tento navegar para $ cat /etc/pam-script/pam_script_auth , não encontro nem o script nem o pam-script dir. Se eu tentar criá-lo, recebo um erro de permissão negada, a menos que eu use sudo vi /etc/pam-script/pam_script_auth

Agora, mais uma vez, não tenho certeza se a criação manual do script é a maneira correta de fazer isso. Não tenho certeza se devo fazer o download de algo, ou se em uma caixa de 64 bits, se o script deles já existe, onde é necessário modificá-lo. De qualquer forma, depois de criá-lo manualmente e dar permissões ao script para ler, escrever, executar, acabo com isso.

$ cat /etc/pam-script/pam_script_auth

pam_script_auth

#!/bin/sh
if [ ! -d "/opt/ftp/$PAM_USER" ]; then
  /usr/bin/env mkdir /opt/ftp/$PAM_USER
  /usr/bin/env chown ftp:ftp /opt/ftp/$PAM_USER
fi

Agora posso fazer o login na caixa, mas parece não conseguir autenticar no banco de dados e não estou vendo onde o arquivo do usuário foi criado. Eu estou supondo que isso é algo errado com o script. Eu também encontrei a seguinte questão do ubuntu, onde nick respondeu a uma pergunta semelhante.

link

Obrigado antecipadamente.

EDITAR

Foi sugerido pelo jayhendren para usar pam_mkhomedir.so ao invés de um script.

Por favor, corrija-me se estiver errado, mas a minha suposição é configurar o meu /etc/pam.d/vsftpd como assim

#%PAM-1.0
session       optional        pam_keyinit.so       force revoke

# Auth in MySQL   
auth requisite pam_mysql.so user=vsftpd-ro passwd=readonly host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=0   
session required pam_mkhomedir.so skel=/opt/ftp/ umask=0022 debug

account required pam_mysql.so user=vsftpd-ro passwd=readonly host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=0

Alguém poderia confirmar essa configuração?

    
por Code Junkie 29.01.2015 / 19:20

2 respostas

1

Aqui estão algumas ideias:

1) Você provavelmente precisará usar o módulo pam_script ou algo similar para criar o homedir do usuário. O módulo pam pam_mkhomedir baseia o diretório home no que é visto no arquivo passwd (ou ldap etc.) e assume vários mapeamentos uid / gid / homedir. Seus usuários são virtuais no mysql e não são baseados em uma entrada passwd que o sistema está ciente e pode jogar bem no mundo vsftp.

O módulo pam_script provavelmente não está incluído na sua distribuição e você pode precisar encontrar um pacote externo ou compilar o pacote a partir do código-fonte.

2) O $ PAM_USER é uma variável ambiental que é passada para os módulos pam: Com pam_script, como eu passo PAM_AUTHTOK e PAM_USER em todos os casos?

3) Quando você chegar na parte do script, verifique os erros do selinux, já que / etc / pam-script / pam_script_auth pode estar sendo espancado escrevendo para um local não padrão para sua distribuição.

4) Envie sua saída em / etc / pam-script / pam_script_auth para um arquivo de log para que você possa ver se está recebendo erros relacionados aos seus comandos.

$ cat /etc/pam-script/pam_script_auth
#!/bin/sh
echo "I got here" >> /tmp/script.out 2>&1
if [ ! -d "/opt/ftp/$PAM_USER" ]; then
  /usr/bin/env mkdir /opt/ftp/$PAM_USER >> /tmp/script.out 2>&1
  /usr/bin/env chown ftp:ftp /opt/ftp/$PAM_USER >> /tmp/script.out 2>&1
fi

Boa sorte,

Nick

    
por 03.02.2015 / 15:41
0

Então este é o seu script:

#!/bin/sh
if [ ! -d "/opt/ftp/$PAM_USER" ]; then
 /usr/bin/env mkdir /opt/ftp/$PAM_USER
 /usr/bin/env chown ftp:ftp /opt/ftp/$PAM_USER
fi

Experimente o seu script com isto:

#!/bin/sh
if [ ! -d "/opt/ftp/${PAM_USER}" ]; then
 /usr/bin/env mkdir /opt/ftp/${PAM_USER}
 /usr/bin/env chown ftp:ftp /opt/ftp/${PAM_USER}
fi

PAM_USER é um direito variável? Mas não vejo onde você cria essa variável.

Espero que isso ajude você, eu tenho um script similar, ele checa meu hostname para pegar um arquivo em um servidor tftp.

    
por 30.01.2015 / 10:14