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?
Respostas:
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.fonte
nss-mysql
no meu contexto?pam_mkhomedir
vai 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.nss_mysql
, por exemplo, o Debian e derivados o fornecem comolibnss-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 seunsswitch.conf(5)
computador, tudo começará a funcionar para você.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_script
aqui: 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.
fonte
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.
fonte