在 Ubuntu 上把 SFTP 集成 LDAP 的常见做法是:
系统通过 SSSD / LDAP 做用户认证 + 使用 OpenSSH 的 SFTP(内部子系统和 chroot)。
SFTP 本身不单独对接 LDAP,而是依赖系统用户体系(Linux PAM / NSS)。
下面给你一套可落地的标准方案。
LDAP Server
↑
Ubuntu (SSSD / libnss-ldap)
↑
OpenSSH (sftp-server)
internal-sftpsudo apt update
sudo apt install -y \
openssh-server \
sssd \
sssd-ldap \
ldap-utils
推荐用 SSSD(比 libpam-ldap 更稳定、支持缓存)
sudo vim /etc/sssd/sssd.conf
示例(替换为你自己的 LDAP):
[sssd]
services = nss, pam
config_file_version = 2
domains = LDAP
[domain/LDAP]
id_provider = ldap
auth_provider = ldap
ldap_uri = ldap://ldap.example.com
ldap_search_base = dc=example,dc=com
ldap_user_search_base = ou=people,dc=example,dc=com
ldap_group_search_base = ou=groups,dc=example,dc=com
ldap_id_use_start_tls = true
ldap_tls_reqcert = allow
enumerate = true
cache_credentials = true
权限非常重要:
sudo chmod 600 /etc/sssd/sssd.conf
sudo chown root:root /etc/sssd/sssd.conf
sudo authconfig --enableldap --enableldapauth --update
或手动确认:
# /etc/nsswitch.conf
passwd: files sss
group: files sss
shadow: files sss
sudo systemctl enable sssd
sudo systemctl restart sssd
验证:
getent passwd ldapuser
id ldapuser
sudo mkdir -p /sftp
sudo chown root:root /sftp
sudo chmod 755 /sftp
每个用户:
sudo mkdir -p /sftp/ldapuser/upload
sudo chown ldapuser:ldapuser /sftp/ldapuser/upload
sudo vim /etc/ssh/sshd_config
添加或修改:
Match Group sftpusers
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
或针对单个用户:
Match User ldapuser
ChrootDirectory /sftp/ldapuser
ForceCommand internal-sftp
sudo groupadd sftpusers
sudo usermod -aG sftpusers ldapuser
(LDAP 用户需有对应本地组或 LDAP 组)
sudo systemctl restart ssh
sftp ldapuser@ubuntu-ip
✅ 使用 LDAP 密码
✅ 只能看到 /sftp/ldapuser
✅ 不能执行 shell
ForceCommand internal-sftpgetent passwd ldapuser 正常LDAP 用户 shell 设为:
loginShell: /usr/sbin/nologin
如果你愿意,我可以:
你现在是哪种 LDAP?OpenLDAP 还是 AD?