具有 Active Directory 身份验证的 SFTP(RealmD 和 SSSD)

具有 Active Directory 身份验证的 SFTP(RealmD 和 SSSD)

它应该是什么样子:我的 Ubuntu VM 通过 SSSD 连接到我的 Active Directory 服务器。我想要一个 SFTP 服务器,它可以监禁分配了特定 AD 组 (USR-SFTP@domain) 的传入用户,并且只能使用 SFTP 而不能使用 SSH。分配了其组的管理员用户 (Domain-Admins@domain) 仍然应该能够通过 SSH 登录,但不能通过 SFTP 登录。

现在的情况:SSSD 运行正常。SFTP 给我带来了问题。

sssd.conf:

[sssd]
domains = domain
config_file_version = 2
services = nss, pam
default_domain_suffix = domain

[domain/domain]
default_shell = /bin/bash
krb5_store_password_if_offline = True
cache_credentials = True
krb5_realm = domain
realmd_tags = manages-system joined-with-adcli
id_provider = ad
fallback_homedir = /home/%u@%d
ad_domain = domain
use_fully_qualified_names = True
ldap_id_mapping = True
access_provider = simple
simple_allow_groups = Domain-Admins@domain

sshd.conf:

Subsystem sftp internal-sftp

Match Group usr-sftp
        ChrootDirectory /appdata/SFTPdata/%u
        ForceCommand internal-sftp -d /upload
        AllowTcpForwarding no
        GatewayPorts no
        X11Forwarding no

文件夹 /appdata/SFTPdata/%u 归 root 所有。文件夹 /appdata/SFTPdata/%u/upload 归用户所有。

当我在 sssd.conf 中的允许组中添加 AD 组“usr-sftp”时,我能够通过 ssh 和 sftp 连接,但被定向到 /home。

我不知道现在我做错了什么。

答案1

似乎不可能在 SSSD 中有一个域配置并能够分离组权限,至少我没有找到它。所以我的解决方案如下

sssd.conf

[sssd]
domains = domain1.lan, domain2.lan
config_file_version = 2
services = nss, pam
default_domain_suffix = domain.lan

[domain/domain1.lan]
default_shell = /bin/bash
krb5_store_password_if_offline = True
cache_credentials = True
krb5_realm = domain.LAN
realmd_tags = manages-system joined-with-adcli
id_provider = ad
overwrite_homedir = /appdata/SFTPdata/%u@%d
ad_domain = domain.lan
use_fully_qualified_names = True
ldap_id_mapping = True
access_provider = simple
simple_allow_groups = [email protected]

ldap_user_extra_attrs = altSecurityIdentities:altSecurityIdentities
ldap_user_ssh_public_key = altSecurityIdentities
ldap_schema = ad

[domain/domain2.lan]
default_shell = /bin/bash
krb5_store_password_if_offline = True
cache_credentials = True
krb5_realm = domain.LAN
realmd_tags = manages-system joined-with-adcli
id_provider = ad
fallback_homedir = /home/%u@%d
ad_domain = domain.lan
use_fully_qualified_names = True
ldap_id_mapping = True
access_provider = simple
simple_allow_groups = Domä[email protected]

ldap_user_extra_attrs = altSecurityIdentities:altSecurityIdentities
ldap_user_ssh_public_key = altSecurityIdentities
ldap_schema = ad

[sssd]注意:指定您在( )下创建的域空间,domains = domain1.lan, domain2.lan在配置中设置正确的域名,如图所示,但simple_allow_groups使用您指定的域后缀([电子邮件保护])此配置还包括SSH公钥认证。

我知道我不必使用全名,但在这种情况下我想使用它,因为它使通过 ssh 或 sftp 登录更加容易。要能够以管理员用户身份登录节点,您必须使用。这是迄今为止唯一的缺点,但我可以忍受。ssh [email protected]@server

sshd_config

ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
UseDNS no
PasswordAuthentication yes

AcceptEnv LANG LC_*

Subsystem sftp internal-sftp

AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys
AuthorizedKeysCommandUser root

Match Group [email protected]
        ChrootDirectory /appdata/SFTPdata/%u
        AuthorizedKeysFile /appdata/SFTPdata/%u/.ssh/authorized_keys
        ForceCommand internal-sftp -d /upload
        AllowTcpForwarding no
        GatewayPorts no
        X11Forwarding no

有了 SSSD 配置后,我终于能够完全应用 sshd 配置了,现在我可以解析广告组,一切正常。此时唯一重要的事情是正确的文件夹权限。

/appdata <- root:root 755  
/appdata/SFTPdata <- root:root 700  
/appdata/SFTPdata/%u <- root:root 755  
/appdata/SFTPdata/%u/upload <- user:[email protected] 700  

可能存在更有效的解决方案,我很高兴知道它,但到目前为止,这使得一切都正常。

相关内容