vsftpd - PAM - MySQL e pam_mkhomedir para criar diretórios

11

Eu tenho usado com sucesso o vsftpd com usuários virtuais se conectando ao PAM no meu banco de dados mysql. Agora eu gostaria de automatizar a criação de diretórios de usuários com uma conexão vsftpd bem-sucedida.

Aqui está a configuração do /etc/pam.d/vsftpd:

#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth required pam_mysql.so verbose=1 user=root passwd=mypass host=localhost db=mydb table=mytable usercolumn=username passwdcolumn=password crypt=3
account required pam_mysql.so verbose=1 user=root passwd=mypass host=localhost db=mydb table=mytable usercolumn=username passwdcolumn=password crypt=3
session required pam_mkhomedir.so skel=/home/skel/ umask=0022 debug

Adicionar pam_mkhomedir agora mostra que não é possível criar o diretório sem outras mensagens em nenhum log. Portanto, obviamente, não está sendo aplicado. Preciso de mais alguma coisa?

Meu /etc/vsftpd/vsftpd.conf:

# No ANONYMOUS users allowed
anonymous_enable=NO
# Allow 'local' users with WRITE permissions (0755)
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=NO
xferlog_enable=YES
connect_from_port_20=YES

# define a unique user on your system which the
# ftp server can use as a totally isolated and unprivileged user.
nopriv_user=vsftpd
chroot_local_user=YES
listen=YES

# here we use the authentication module for vsftpd to check users name and passw
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
userlist_deny=YES
# here the vsftpd will allow the 'vsftpd' user to login into '/home/vsftpd/$USER directory
guest_enable=YES
guest_username=vsftpd
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
download_enable=NO

force_local_data_ssl=NO
force_local_logins_ssl=NO

# PASV - passive ports for FTP 
pasv_enable=YES
pasv_min_port=14000
pasv_max_port=14100

Vi um post dizendo que eu precisava disso no meu vsftpd.conf, então tentei isso também:

session_support=YES

Mas agora não parece mais se autenticar, como mostram os logs:

Mar 24 00:46:16 ip-10-212-239-40 vsftpd[1962]: pam_keyinit(vsftpd:session): Unable to look up user "user1"
Mar 24 00:46:16 ip-10-212-239-40 vsftpd[1962]: pam_mkhomedir(vsftpd:session): User unknown.

Isso é mesmo se eu já tiver criado o diretório. Agora ninguém pode entrar.

Alguma ideia?

Tom
fonte
Olá, você já conseguiu resolver esse problema?
George
@ George De jeito nenhum.
Tom
Resolvi o problema de uma maneira muito diferente. Afastei-me do vsftpd e fui com o pureftp. Instale e execute em algumas horas sem todos esses problemas. Funciona perfeitamente.
George George
/ home / vsftpd pertence a vsftpd?
Luca Gibelli

Respostas:

0

Para que as pesquisas de usuários pelo módulo PAM sejam bem-sucedidas, é necessário ativar o módulo NSS para MySQL no Windows nsswitch.conf(5). nss_mysqlé seu amigo.

Ashish SHUKLA
fonte
Alguma referência que você pode fornecer sobre isso? Não consigo encontrar nada sobre a necessidade nss-mysqlno meu contexto?
Tom
Como pam_mkhomedirvai descobrir o caminho para o diretório inicial do usuário que ele deve criar? Como ele sabe qual banco de dados usar para resolver o usuário? O NSS fornece essas informações. No seu caso, você precisará do nss_mysql , assumindo que o banco de dados do usuário esteja armazenado no banco de dados MySQL.
Ashish SHUKLA
Só estou tentando descobrir algo sobre esta biblioteca. O link que você forneceu é um projeto muito antigo, sem documentação. Se eu instalar isso, ele não dará nenhuma indicação sobre o que colocar no seu nssswitch.conf. Só que ele pode conter 3 parâmetros. Você pode fornecer algum tipo de orientação? Parece que pam_mysql é a mesma coisa que nss-mysql? Eu tenho pam_mysql trabalhando onde ele usa o mysql db para autenticar com usuários virtuais vsftpd.
Tom
PAM não é o mesmo que NSS . O PAM é direcionado à autenticação, enquanto o objetivo do NSS é resolver nomes (nomes de host, nomes de usuário etc.). A maioria das distribuições fornece um pacote para nss_mysql, por exemplo, o Debian e derivados o fornecem como libnss-mysql. E, sim, não é atualizado por meia década, mas funciona bem. Depois de instalar o módulo, configurá-lo e adicioná-lo ao seu nsswitch.conf(5)computador, tudo começará a funcionar para você.
Ashish SHUKLA 24/03
Adicionei libnss-mysql da minha distribuição. Tentei fora da caixa e nada está funcionando. Alguma idéia do que eu preciso mudar no nsswitch.conf?
Tom
0

Você pode tentar usar pam_script- é um módulo pam que permite executar scripts de shell arbitrários após a abertura de uma sessão do usuário (entre outros).

Você pode encontrar pam_scriptaqui: https://github.com/jeroennijhof/pam_script . Também deve ser instalável através de gerenciadores de pacotes, pelo menos eu consegui instalá-lo através do apt-get.

Tenha cuidado, pois o vsftpd parece ter alguns problemas com o pam_script pelo menos quando ele nega a autenticação. Veja minha pergunta não resolvida: o vsftpd congela após uma falha na autenticação do pam_script . No entanto, no seu caso, não deve ser um problema.

edziubudzik
fonte
0

A resposta curta é que você está misturando credenciais de sistema e serviço e não deve (não pode?) Usar o pam_mkhomedir com usuários virtuais no vsftpd.

pam_mkhomedir é para criação de diretórios locais do usuário e assume que o usuário está definido no sistema. Os usuários virtuais no vsftpd não são usuários do sistema (por design) e, como tal, não têm privilégios fora do serviço vsftpd (o sistema não tem conhecimento desses usuários). Usar o PAM para autenticação é apenas entregar a validação de credenciais do usuário (nome de usuário + senha ==> OK). Isso pode ser confuso ao usar usuários virtuais, pois o vsftpd também pode ser configurado para usar usuários do sistema com o PAM.

Ao criar o diretório pessoal para um usuário virtual , você deve tornar a conta / grupo do serviço vsftpd o proprietário da pasta e colocar o "diretório pessoal virtual" no caminho do serviço vsftpd, com permissões apropriadas para o serviço vsftpd. Não tenho certeza de qual problema você está tentando resolver, mas, ao iniciar a sessão do usuário, presumo que você esteja tentando criar algum isolamento entre os usuários. Como você deve criar o usuário virtual no banco de dados do usuário para efetuar login, por que não gerar o diretório inicial ao mesmo tempo? Fiz isso usando um script para adicionar / alterar / excluir do usuário para manter consistente o banco de dados do usuário virtual e as pastas pessoais virtuais do usuário vsftpd. YMMV.

Lembre-se de que, com usuários virtuais, você está trabalhando apenas no vsftpd, e não no sistema.

Yaro
fonte