vsftpd pendurado ao usar pam_exec ou pam_script

1

Eu tenho o VSFTPD integrado ao pam_mysql, permitindo que eu faça login com sucesso em um servidor FTP usando contas mantidas em um banco de dados mysql.

Eu preciso criar automaticamente um diretório para o usuário se for a primeira vez que ele fizer login no servidor. Eu já vi sugestões para usar pam_script ou pam_exec para conseguir isso.

Como teste, revisei minha configuração /etc/pam.d/vsftpd para incluir a seguinte linha:

account optional pam_exec.so debug log=/tmp/pam_exec.log /etc/pam-script/test.sh

O script apenas ecoa o usuário:

#!/bin/sh
echo $PAM_USER

Em /var/log/auth.log , vejo que o script está sendo chamado:

Jan 16 17:15:44 ip-172-31-8-61 vsftpd: pam_exec(vsftpd:auth): Calling /etc/pam-script/dir.sh ...

No entanto, o login de FTP não é concluído. A conexão trava. Todas as conexões subsequentes falham e tenho que reiniciar o serviço para que ele responda.

Eu eliminei problemas com a configuração / script alterando também a configuração do PAM para logins do SSHD, isso parece funcionar bem.

Eu também testei isso usando o módulo pam_script e obtive resultados semelhantes quando o script pam_script_auth é chamado.

O problema parece ser que o VSFTP não pode concluir um login se houver etapas adicionais na configuração do PAM. Eu tentei configurações diferentes (auth, conta) e diferentes níveis de requisitos (opcional, obrigatório) sem qualquer sucesso.

Alguém tem alguma ideia?

Atualização: Ubuntu 12.04. Usando uma versão ajustada de VSFTP conforme descrito aqui

    
por ldodds 16.01.2014 / 18:28

3 respostas

0

Verifique seus logs do suexec. Talvez sua estrutura de diretórios esteja em um local não padrão para o vsftpd. Além disso, acho que você precisa de mais no seu arquivo de configuração pam.

Veja a aparência da configuração do meu pam:

cat /etc/pam.d/vsftpd 
#%PAM-1.0

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

# Account in MySQL
account required pam_mysql.so user=readonly passwd=readonly host=somehost db=somedb table=accounts usercolumn=username passwdcolumn=pass crypt=3


$ cat /etc/pam-script/pam_script_auth
#!/bin/sh
# Purpose: create the users's homedir and default message
#
# The evnironment variable $PAM_USER is passed on from PAM
# layer to this script via pam_script.so

if [ ! -d "/opt/ftp/$PAM_USER" ]; then
  /bin/su - ftp -s /bin/sh -c "/usr/bin/env mkdir /opt/ftp/$PAM_USER"
  /bin/su - ftp -s /bin/sh -c "/usr/bin/env chmod 751 /opt/ftp/$PAM_USER"
  /bin/su - ftp -s /bin/sh -c "/usr/bin/env cat /etc/vsftpd /vsftpd.banner.homedir.txt > /opt/ftp/$PAM_USER/.message"
  /bin/su - ftp -s /bin/sh -c "/usr/bin/env cat /etc/vsftpd/vsftpd.banner.homedir.txt > /opt/ftp/$PAM_USER/README.first"
fi

$ cat /etc/vsftpd/vsftpd.int.21.conf
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
message_file=.message
xferlog_enable=YES
connect_from_port_20=YES
nopriv_user=ftp
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/vsftpd/ssl/

guest_enable=YES
guest_username=ftp
local_root=/opt/ftp/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd_user_conf
banner_file=/etc/vsftpd/vsftpd.banner.server.txt

pasv_min_port=20005
pasv_max_port=30005
pasv_address=10.10.10.10

## FTPS (21) Config Changes
listen_port=21
ftp_data_port=20
listen_address=10.10.10.123

Já passou algum tempo desde que eu olhei para isso, então espero que ajude.

    
por Nick Bausch 20.01.2014 / 19:48
0

Eu sei que esta pergunta foi feita há um tempo, mas eu tive problemas semelhantes no Debian, ou seja, suspendendo o processo vsftpd ao adicionar o pam_exec na cadeia. Para mim, o problema era que não bastava adicionar

session_support=YES

para o arquivo de configuração vsftpd mas também para colocar

@include common-session

em /etc/pam.d/vsftpd que eu havia comentado seguindo alguns guias sobre usuários somente virtuais para o vsftpd. Então o arquivo pam completo é assim para mim:

auth    required        pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
auth    required        pam_pwdfile.so pwdfile=/etc/ftppasswd
account required        pam_permit.so
session optional        pam_exec.so type=close_session log=/var/log/session.log /etc/pam_session.sh
@include common-session

(Meu caso de uso é para processar arquivos enviados uma vez que um usuário FTP específico se desconecte)

    
por ozbob 16.01.2016 / 15:14
0

Eu confirmo que isso é um bug no Debian / Ubuntu e versões nativas do vsftpd. Qualquer módulo PAM que chame um subprocesso bloqueará ou travará o vsftpd (por exemplo, pam_exec, pam_script, módulo de pam personalizado envolvendo chamadas do sistema ou popen).

Eu resolvi isso construindo fontes centos no meu Debian:

apt-get install vsftpd
cd /usr/local/src
git clone  https://git.centos.org/git/centos-git-common.git
cp ./centos-git-common/*.sh /usr/local/sbin
git clone https://git.centos.org/git/rpms/vsftpd
cd /usr/local/src/vsftpd
git checkout c7
get_sources.sh
cd SOURCES
tar xvzf vsftpd-3.0.2.tar.gz
mv vsftpd-3.0.2/* .
git apply *-3.0.2-*.patch
sed -i -e 's/vsf_findlibs.sh'/vsf_findlibs.sh' -lcap/g' Makefile
sed -i -e 's/undef VSF_BUILD_SSL/define VSF_BUILD_SSL/g' builddefs.h
make
cp vsftpd /usr/sbin

O vsftpd não irá mais travar e você poderá chamar a função system () dos seus módulos PAM. fork e exec ainda não funcionam corretamente por algum motivo.

    
por Jean-Baptiste Martin 28.05.2016 / 00:37
Drivers para Asus K73SV-TY238V ______ qstntxt ___

Eu tenho um laptop de 2 anos de idade (um ASUS K73SV, 8Gb de RAM, Intel i7-2630QM, nVIDIA GeForce GT540M 1Gb) e a configuração da GPU é um sistema híbrido (o que significa que ele alterna entre a Intel HD integrada na CPU) .

Estou executando apenas o Ubuntu 13.10 atm e qualquer instalação de driver proprietário da Nvidia falhou. Bumblebee, optimus, etc.

Existe alguém que possa me dizer se é possível instalar drivers proprietários no meu laptop? (ou alguém com uma configuração semelhante que encontrou uma maneira milagrosa de instalá-los e usá-los?).

Eu tenho tentado mais de um ano para encontrar algo e este é meu último recurso;).

Obrigado por tentar me ajudar!

EDIT: Para esclarecer, antes de instalar os drivers nvidia sem bumblebee, eu só fiquei preso com uma tela preta na inicialização. Eu tive que mexer com a linha de comando para fazer tudo funcionar novamente, mas funcionou novamente. Então eu tentei abelha, eu pensei que não funcionou porque nada realmente mudou (optirun). Agora eu tenho bumblebee instalado, mas não tenho idéia de como devo verificar se funciona ...

    
______ azszpr406461 ___

Se você seguiu as instruções aqui , provavelmente deveria ter instalado %code% e %code% , direito ? Eu acredito que o primus dá um melhor desempenho sobre o virtualgl. O último ainda é o padrão, portanto, você deve executar o optirun com a opção %code% : %code% . Veja se você tem um desempenho melhor.

Além disso, dê uma olhada neste post, que é muito esclarecedor: link

EDIT: Tente atualizar seus drivers nvidia:

%pre%

EDIT2: Aparentemente, você precisará alterar um arquivo de configuração. Veja aqui (em Atualização de Drivers ): link

E parece que rodando %code% você provavelmente pode ver se a GPU nvidia está funcionando.

    
___ Um arquivo de shell contendo contagem, mas não mostrando quando tento executar a partir do crontab