Samba通过ad域进行认证并限制空间大小
最近正在做单位电脑的AD域管理。
为漫游用户文件,研究配置Samba通过ad域进行认证并限制空间大小。
参考了很多资料,现总结如下:
DC:windows server 2016(配置安装域控制器)略...
samba:Centos 7 server 1810(指定IP,其中DNS1地址指定为DC的地址i,DNS2指定为可用的DNS服务器地址。)
域名:xyz.local
dc计算机名:dc
linux计算机名:file
一:前期准备#
1.准备分区#
因为磁盘配额只能在一块单独的分区上启用,所以笔者专门添加了一块分区挂载到home目录下,这点要注意。
https://www.cnblogs.com/jackadam/p/8213712.html
可以按这篇文章的介绍,挂在新的分区,或新的硬盘。
一般服务器都跑在虚拟化的服务器上,所以添加个新的虚拟硬盘,也是这样添加硬盘。
2.准备linux#
我们使用samba的ads模式加入域并提供共享,那么就需要安装若干软件来实现这个功能。
1 | yum -y install pam_krb5* krb5-libs* krb5-workstation* krb5-devel* krb5-auth samba samba-winbind* samba-client* samba-swat* bind-utils quota |
其中主要的有samba系列,krb5系列,winbind系列,bind-utils是网络工具,quota是磁盘限额工具
二:samba加入AD域(NT4域)#
1.配置DNS#
这里并不是配置配置DNS服务器地址,是配置DNS搜索域。
1 | vi /etc/sysconfig/network-scripts/ifcfg-ens33 |
在最后添加一行:
1 | SEARCH= "your_domain_name" |
本例是
1 | SEARCH=“xyz. local " |
重启linux,或者使用命令 systemctl restart network 来重启网络。
2.验证DNS#
使用下面的的命令查看DNS配置参数
1 | cat /etc/resolv .conf |
应该有至少两行:
1 2 | search xyz. local nameserver 10.99.**.** |
第一行是搜索域,第二行是dns服务器地址指向DC,如果你还有可用的DNS地址,可能会在第三行,第四行。
3.查看(配置)主机名#
使用命令查看主机名
1 | hostname |
如果主机名需要修改可以使用以下命令
1 | hostnamectl set - hostname newname |
newname就是新的主机名。
4.测试DNS#
能ping 通 dc 并自动解析为 dc.xyz.local即可
1 2 | ping dc ping dc .xyz. local |
5.使用命令行加入域#
1 | authconfig --enablewinbind --enablekrb5 --enablewinbindauth --krb5realm=XYZ.LOCAL --krb5kdc= dc .xyz. local --enablekrb5kdcdns --enablekrb5realmdns --smbsecurity=ads --smbrealm=xyz. local --smbservers= dc .xyz. local --winbindtemplateshell= /bin/bash --winbindjoin=administrator --enablewinbindusedefaultdomain --disablewinbindoffline --smbworkgroup=XYZ --enablemkhomedir --update |
根据提示输入域管理员密码即可加入域。
但是提示是有错误
1 2 3 4 5 6 7 | [root@ file ~]authconfig --enablewinbind --enablekrb5 --enablewinbindauth --krb5realm=ZZCLD.LOCAL --krb5kdc=dc1.zzcld. local --enablekrb5kdcdns --enablekrb5realmdns --smbsecurity=ads --smbrealm=zzcld. local --smbservers=dc1.zzcld. local --winbindtemplateshell= /bin/bash --winbindjoin=administrator --enablewinbindusedefaultdomain --disablewinbindoffline --smbworkgroup=ZZCLD --enablemkhomedir --update [ /usr/bin/net join -w XYZ -S dc .xyz. local -U administrator] Enter administrator's password: Using short domain name --XYZ Joined 'FILE' to dns domain 'xyz.local' No DNS domain configured for file . Unable to perform DNS Update. DNS update failed: NT_STATUS_INVALID_PARAMTER |
尽管有提示错误,但是貌似是DNS注册失败而已。
自己在DC里面注册一个DNS解析就好了。
6.测试域身份#
wbinfo -t 可以查看信任关系。
7.手动补全配置#
1 | vi /etc/samba/smb .conf |
在Global当中添加以下两行
1 2 | Winbind enum users = yes Winbind enum groups = yes |
在home当中添加以下一行
1 | path = /home/ %U |
这是authconfig当中没有设置的,经过几天的测试,确实就是这里没有设置,导致了显示共享目录,却无法打开。
三:测试登录域#
使用putty登录linux,使用域用户即可登录,并且会自动创建用户的主目录。
建议使用administrator登录,自动创建用户家目录,为后面磁盘配额做准备。
四:配置磁盘配额#
1.编辑fstab#
按下面格式填入/etc/fstab ,格式是XFS格式
/dev/mapper/storage-storage /storage xfs defaults 0 0
修改为:
/dev/mapper/storage-storage /storage xfs defaults,usrquota,grpquota
重启linux,使设置生效。
2.设置磁盘配‘额#
我们使用了XFS格式的磁盘,所以磁盘配额命令有区别了。
1 2 | xfs_quota -x -c "limit -u bsoft=950M bhard=1024M administrator" /home xfs_quota -x -c "report -ubin" /home |
第一行是设置administrator的磁盘限额。
第二行是查看磁盘限额。
3.将设置的磁盘配额作为模板设置给新用户#
刚才我们配置了--enablemkhomedir参数来给ssh登录创建用户家目录。但是samba登录的时候不会自动创建用户家目录。
所以我们使用samba的root preexec 参数来执行samba登录脚本。来确保用户仅使用samba共享访问服务器时能自动创建家目录。
首先编写mkhome.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | vi /root/mkhome .sh #!/bin/bash user=$1 group=$2 home= /home/ $1 if [ ! -d $home ]; then mkdir -p $home chown $user $home chgrp $gropu $home chmod 744 $home edquota -p administrator -u $user fi |
然后编辑smb.conf
1 2 3 4 5 6 | vi /etc/samba/smb .conf ;在homes里面加入 path = /home/ $U root preexec = /root/mkhome .sh %U %G |
设置mkhome.sh为700权限
1 | chmod 700 /root/mkhome .sh |
重启samba
1 | systemctl restart smb |
4.验证配置#
在其他windows计算机,登录域(非刚才的administrator),然后访问samba服务器。
会看到以用户名命名的一个共享目录。
进去是有权限读写的。
在samba服务器查看磁盘配额。虽然用户ID看不出是谁,但是可以看到磁盘配额是和administrator一样的1G。
另一个磁盘配额检查命令
repquota /storage
/storage 是需要查询配额的目录。
5.后期修改磁盘配额#
使用下面的命令,修改域用户的磁盘配额。用户名是带域名的完整用户名。
1 | xfs_quota -x -c "limit -u bsoft=950M bhard=1024M test@xyz.local" /home |
五:后记#
参考了很多文章,就不一一列举了。
但是还有遗留问题:
1.为什么net ads join 提示DNS注册失败?
是因为linux使用了指定IP?还是某些地方没有配置好。
2.如果先进行ssh登录,那么自动生成的目录蛋没有磁盘配额?
貌似没有,因为默认的创建用户家目录应该不会配置磁盘配额。
3.手动更新的3行配置,能否也使用authconfig配置进去呢?
这个需要继续研究。
4.samba集群该怎么配置?
这个也要继续研究。
5.查到了一些配置selinux的资料,还要实验测试。
重要参考文献:
https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Domain_Member
https://blog.51cto.com/rainbird/197794
https://blog.51cto.com/rainbird/197509
作者:上官飞鸿
出处:https://www.cnblogs.com/jackadam/p/11448497.html
版权:本作品采用「知识共享-署名-非商业性-禁止演绎(CC-BY-NC-ND)」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2018-09-02 mysql的取整函数
2018-09-02 sql语句最后一行显示统计。