它应该是什么样子:我的 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
可能存在更有效的解决方案,我很高兴知道它,但到目前为止,这使得一切都正常。