Samba是SMB网络协议(CIFS是它的一个版本)的重新实现,免费且提供文件和打印共享服务。通过Samba实现的文件共享服务在很多公司中使用,因为目前主流的桌面操作系统都支持SMB协议,比如Windows、macOS等。Samba服务虽然兼容性很好,但是账号和权限管理比较麻烦。
实际使用中,我们可能想配置某个文件夹只能允许一个部门访问,一些文件夹每个人都可以访问,单个人可以拥有自己私有的文件夹,如果都使用Linux的本地账号管理,将非常麻烦,本文介绍Samba集成LDAP,实现集中式的账号管理和权限隔离。
为演示方便,假定运行FreeIPA的主机名为“ipa.example.com”,运行Samba的服务器主机名为“samba.example.com”。
前提条件
- 服务器操作系统为“CentOS Linux release 7.9.2009 (Core)”
- 主机都配置合格的主机名,且能够正常解析
- 如果使用现有的DNS服务,添加服务器IP的反向解析
- 每台服务器配置NTP同步
- 如果内网环境安全性较高,可以关闭SELinux,iptables各个链的默认策略配置为“ACCEPT”
LDAP实现
使用FreeIPA实现LDAP,安装配置比较简单,参见Grafana集成LDAP认证
Samba主机配置
1,注册Samba主机到FreeIPA
# 安装ipa-client,完成后,可以使用ipa-client-install命令
yum install -y ipa-client
# 执行下面命令后,主机samba.example.com将出现在FreeIPA的"Identity->Hosts"中
ipa-client-install --mkhomedir --force-ntpd --enable-dns-updates
“ipa-client-install”这条命令做了很多事情,操作完后可以通过FreeIPA上的账号登录服务器,同时还会生成文件/etc/krb5.keytab。
2,安装Samba
yum -y install samba samba-client sssd-libwbclient
systemctl enable nmb.service
systemctl enable smb.service
FreeIPA主机配置
1,添加CIFS Principal
ipa service-add cifs/samba.example.com
2,LDAP数据库中添加Samba属性(很重要)
yum -y install ipa-server-trust-ad
# 全部回答“yes”
ipa-adtrust-install --add-sids
3,权限授予
为了实现FreeIPA与Samba服务的集成,需要给Samba服务授予读取用户密码的权限
ipa permission-add "CIFS server can read user passwords" \
--attrs={ipaNTHash,ipaNTSecurityIdentifier} \
--type=user --right={read,search,compare} --bindtype=permission
ipa privilege-add "CIFS server privilege"
ipa privilege-add-permission "CIFS server privilege" \
--permission="CIFS server can read user passwords"
ipa role-add "CIFS server"
ipa role-add-privilege "CIFS server" --privilege="CIFS server privilege"
ipa role-add-member "CIFS server" --services=cifs/samba.example.com
Samba服务配置
1,生成CIFS的keytab
Samba服务对FreeIPA来说也是一个实体,需要生成相应的keytab
kinit -kt /etc/krb5.keytab
ipa-getkeytab -s ipa.example.com -p cifs/samba.example.com -k /etc/samba/samba.keytab
2,安装“ipa-server-trust-ad”包,
yum -y install ipa-server-trust-ad
Samba配置文件"/etc/samba/smb.conf"中有些选项需要“ipa-server-trust-ad”包的支持
3,准备Samba配置文件
内容如下:
[global]
# freeipa configurations
debug pid = yes
realm = EXAMPLE.COM
workgroup = EXAMPLE
domain master = Yes
ldap group suffix = cn=groups,cn=accounts
ldap machine suffix = cn=computers,cn=accounts
ldap ssl = off
ldap suffix = dc=example,dc=com
ldap user suffix = cn=users,cn=accounts
log file = /var/log/samba/log
max log size = 100000
domain logons = Yes
registry shares = Yes
disable spoolss = Yes
dedicated keytab file = FILE:/etc/samba/samba.keytab
kerberos method = dedicated keytab
passdb backend = ipasam:ldap://ipa.example.com
security = USER
create krb5 conf = No
rpc_daemon:lsasd = fork
rpc_daemon:epmd = fork
rpc_server:tcpip = yes
rpc_server:netlogon = external
rpc_server:samr = external
rpc_server:lsasd = external
rpc_server:lsass = external
rpc_server:lsarpc = external
rpc_server:epmapper = external
ldapsam:trusted = yes
idmap config * : backend = tdb
idmap config * : range = 10000-999999
ldap admin dn = cn=Directory Manager
# public share configurations
map to guest = bad user
# 用户独享的目录空间-家目录
[homes]
comment = Home Directories
valid users = %S, %D%w%S
browseable = No
read only = No
inherit acls = Yes
# 通过验证的用户都可以访问share
[share]
comment = Public Share
path = /samba/share
writable = yes
browsable = yes
guest ok = yes
read only = no
# 通过验证且属于infra组的用户可以访问infra
[infra]
comment = Public Share
path = /samba/infra
writable = yes
browsable = yes
guest ok = yes
read only = no
valid users = @infra
# 通过验证且属于development组的用户可以访问dev
[dev]
comment = Public Share
path = /samba/dev
writable = yes
browsable = yes
guest ok = yes
read only = no
valid users = @development
4,创建用户
在FreeIPA上创建用户,并将用户加入预先创建的用户组。测试中创建两个组“infra”和“development”,操作这步,便可以通过用户组的粒度来控制权限的分配。
5,创建需要的目录
根据Samba的配置文件,创建对应的目录并授予合适的权限。为了成功访问Samba共享的内容,用户不仅要满足文件系统的权限要求而且要满足Samba服务的权限要求。为了方便管理,可以在文件系统层授予用户全部权限,仅使用Samba管理用户权限:
[aneirin@samba ~]$ls -lh /samba
total 0
drwxrwxrwx 2 nobody nobody 6 Jul 3 14:46 dev
drwxrwxrwx 2 nobody nobody 6 Jul 3 14:45 infra
drwxrwxrwx 2 nobody nobody 19 May 24 17:58 share
总结
Samba集成Ldap认证比较复杂,里面涉及的概念较多,文章没有对Samba配置文件中的各个选项做介绍,读者可以自行上网查找,遇到问题,欢迎讨论。
希望这篇文章能帮到正在努力的你,欢迎关注、评论!