Сохраните имена пользователей, как было предложено Фрэнком, но когда вы сохраняете имена пользователей, используйте функцию runTransaction в Firebase, чтобы убедиться, что имя пользователя не занято. Эта функция гарантируется Firebase как атомная операция, поэтому вы можете быть уверены в отсутствии столкновения
firebaseRef.child("usernames").child(username).runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
if (mutableData.getValue() == null) {
mutableData.setValue(authData.getUid());
return Transaction.success(mutableData);
}
return Transaction.abort();
}
@Override
public void onComplete(FirebaseError firebaseError, boolean commited, DataSnapshot dataSnapshot) {
if (commited) {
// username saved
} else {
// username exists
}
}
});
Обычный универсальный Unix отвечает на это, 'PAM'. Если Вы хотите, чтобы простой OpenSSH SSHD обработал Ваш SFTP, Вам нужно что-то включенное к стеку PAM SSHD (/etc/pam.d/sshd), который делает то, в чем Вы нуждаетесь, и не учитывает то, в чем Вы не нуждаетесь. Это могло бы быть сервером каталогов общего назначения (вероятно, LDAP), который отображает всех Ваших виртуальных пользователей на один корневой каталог и дает им ограниченный или scponly вид оболочки.
Если Вы захотите посмотреть на FTP-серверы, которые могут также сделать FTP-ssl (который не является тем же как SFTP), то хорошие FTP-серверы как Чистый-ftpd или vsftp сделают это. Серверы FTP-ssl сделали, чтобы более простой виртуальный пользователь поддерживал.
http://www.bsdguides.org/guides/freebsd/networking/pure-ftpd_virtual_users.php