温馨提示×

ubuntu sftp怎么集成ldap

小樊
44
2026-09-20 14:57:21
栏目: 智能运维

在 Ubuntu 上把 SFTP 集成 LDAP 的常见做法是:
系统通过 SSSD / LDAP 做用户认证 + 使用 OpenSSH 的 SFTP(内部子系统和 chroot)。
SFTP 本身不单独对接 LDAP,而是依赖系统用户体系(Linux PAM / NSS)。

下面给你一套可落地的标准方案。


一、整体架构

LDAP Server
   ↑
Ubuntu (SSSD / libnss-ldap)
   ↑
OpenSSH (sftp-server)
  • LDAP:存账号、密码、UID/GID
  • Ubuntu:把 LDAP 用户映射为系统用户
  • SFTP:使用 OpenSSH 的 internal-sftp

二、安装必要组件

sudo apt update
sudo apt install -y \
  openssh-server \
  sssd \
  sssd-ldap \
  ldap-utils

推荐用 SSSD(比 libpam-ldap 更稳定、支持缓存)


三、配置 LDAP(SSSD 方式,推荐)

1. 编辑 SSSD 配置

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

2. 配置 NSS / PAM

sudo authconfig --enableldap --enableldapauth --update

或手动确认:

# /etc/nsswitch.conf
passwd: files sss
group:  files sss
shadow: files sss

3. 启动 SSSD

sudo systemctl enable sssd
sudo systemctl restart sssd

验证:

getent passwd ldapuser
id ldapuser

四、配置 SFTP(Chroot 限制)

1. 创建 SFTP 根目录

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

2. 配置 SSH

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

3. 把 LDAP 用户加入 sftp 组

sudo groupadd sftpusers
sudo usermod -aG sftpusers ldapuser

(LDAP 用户需有对应本地组或 LDAP 组)


4. 重启 SSH

sudo systemctl restart ssh

五、测试 SFTP(LDAP 登录)

sftp ldapuser@ubuntu-ip

✅ 使用 LDAP 密码
✅ 只能看到 /sftp/ldapuser
✅ 不能执行 shell


六、常见问题

1. 登录提示 Permission denied

  • Chroot 目录必须是 root 拥有
  • 上层目录权限不能 777

2. 用户登录后看不到目录

  • 确认 ForceCommand internal-sftp
  • 确认 getent passwd ldapuser 正常

3. 想禁止 shell 登录

LDAP 用户 shell 设为:

loginShell: /usr/sbin/nologin

七、可选增强

  • ✅ LDAP + TLS
  • ✅ SSSD 缓存离线登录
  • ✅ 使用 FreeIPA
  • ✅ 配合 rsyslog 审计 SFTP

如果你愿意,我可以:

  • 给你 完整 ldap.ldif 示例
  • 或针对 Active Directory / OpenLDAP / FreeIPA
  • 或做 只读 / 多用户共享目录方案

你现在是哪种 LDAP?OpenLDAP 还是 AD?

0 踩