最近正在做单位电脑的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模式加入域并提供共享,那么就需要安装若干软件来实现这个功能。

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搜索域。

vi /etc/sysconfig/network-scripts/ifcfg-ens33

在最后添加一行:

    SEARCH="your_domain_name"

本例是

    SEARCH=“xyz.local"

重启linux,或者使用命令 systemctl restart network 来重启网络。

2.验证DNS

使用下面的的命令查看DNS配置参数

cat /etc/resolv.conf

应该有至少两行:

search xyz.local
nameserver 10.99.**.**

第一行是搜索域,第二行是dns服务器地址指向DC,如果你还有可用的DNS地址,可能会在第三行,第四行。

3.查看(配置)主机名

使用命令查看主机名

hostname

如果主机名需要修改可以使用以下命令

hostnamectl set-hostname newname

newname就是新的主机名。

4.测试DNS

能ping 通  dc  并自动解析为 dc.xyz.local即可

ping  dc
ping dc.xyz.local

5.使用命令行加入域

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

根据提示输入域管理员密码即可加入域。

但是提示是有错误

[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 可以查看信任关系。

checking the trust secret  via RPC calls succeeded
使用wbinfo –u 可以列出AD中注册的帐号信息
Wbinfo –g可以返回AD中的组信息

7.手动补全配置

vi /etc/samba/smb.conf

在Global当中添加以下两行

Winbind enum users = yes
Winbind enum groups = yes

在home当中添加以下一行

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格式的磁盘,所以磁盘配额命令有区别了。

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

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

vi /etc/samba/smb.conf

;在homes里面加入

path = /home/$U
root preexec = /root/mkhome.sh %U %G

设置mkhome.sh为700权限

chmod 700 /root/mkhome.sh

重启samba

systemctl restart smb

4.验证配置

在其他windows计算机,登录域(非刚才的administrator),然后访问samba服务器。

会看到以用户名命名的一个共享目录。

进去是有权限读写的。

在samba服务器查看磁盘配额。虽然用户ID看不出是谁,但是可以看到磁盘配额是和administrator一样的1G。

另一个磁盘配额检查命令

repquota /storage

/storage 是需要查询配额的目录。

5.后期修改磁盘配额

使用下面的命令,修改域用户的磁盘配额。用户名是带域名的完整用户名。

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

Samba通过ad域进行认证并限制空间大小的更多相关文章

  1. Samba通过ad域进行认证并限制空间大小《转载》

    本文实现了samba服务被访问的时候通过windows域服务器进行用户名和密码验证;认证通过的用户可以自动分配500M的共享空间;在用户通过windows域登陆系统的时候可以自动把这块空间映射成一块硬 ...

  2. Java利用jcifs集成AD域用户认证

    近期一段时间发现AD这东西老火了,尤其是涉及到安全这一方面的,所以AD域用户认证成了如今网络安全方面的产品必备!这里就简单的分享一下,Java通过jcifs集成AD域用户实现认证,以实现网络安全! 我 ...

  3. java修改AD域用户密码使用SSL连接方式

    正常情况下,JAVA修改AD域用户属性,只能修改一些普通属性, 如果要修改AD域用户密码和userAccountControl属性就得使用SSL连接的方式修改, SSL连接的方式需要操作以下步骤: 1 ...

  4. Samba结合AD实现域帐号认证的文件服务器

    准备一台Windows域控制器, 在Samba服务器上安装Webmin图形化管理工具, samba, krb5-user, winbind. 修改/etc/krb5.conf. [logging] d ...

  5. freeradius整合AD域作anyconncet认证服务器

    一.服务器要求 Radius服务器:centos6.6.hostname.selinux  disabled.stop iptables AD域服务器:Windows Server 2008 R2 E ...

  6. Python实现AD域认证

    Python 通过ldap进行ad域账号的校验. 首先需要安装python-ldap的模块 http://www.python-ldap.org/. 在这里用的是windows系统,当然比较容易,下载 ...

  7. Jenkins配置AD域认证

    Jenkins配置AD域认证 #检测域控地址ping youad.com指向的IP #如果不是实际域控ip地址,则修改hosts vi /etc/hosts #192.168.100.100替换为实际 ...

  8. Ldap实现AD域认证

    1.java Ldap基础类 package com.common; import java.io.FileInputStream; import java.io.IOException; impor ...

  9. SANGFOR AC配置AD域单点登录(二)----AD域侧配置及单点登录认证、注销测试

    1.AD域侧配置 1)新建组策略并配置logon登录脚本,以实现用户开机登录域时,自动通过AC认证  AD域服务器"运行"输入gpmc.msc,打开组策略编辑器,如下图. 右建需要 ...

随机推荐

  1. OpenStack核心组件-neutron网络服务

    1. neutron 介绍 1.1 Neutron 概述 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云环境下的网络已经变得非常复杂,特别是在多租户场景里,用户随时都可能 ...

  2. OpenStack核心组件-glance镜像服务

    1. glance介绍 Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找.注册和检索等. Glance提供Restful API可以查询虚拟机镜像的metadata ...

  3. anyproxy学习1-windows平台安装和抓手机app上https请求

    前言 做接口测试肯定离不开抓包,目前比较流行的抓包工具是fiddler和charles,相信并不陌生.这里介绍一个阿里公司研发的一个抓包神器,只需打开web页面,就能抓到手机app上的http和htt ...

  4. netstat -an unix socket 会阻塞吗

    [lyd@localhost ~]$ netstat -an | grep "SOFO"unix 2 [ ACC ] SEQPACKET LISTENING 86308 @*MY- ...

  5. django 进行语言的国际化及在后台进行中英文切换

    项目的部署地为: 中国大陆与美国东海岸, 两个地区的服务器数据不进行同步, 中国地区的服务器页面展示中文, 美国地区的服务器页面展示成英文, 项目后台使用python编程语言进行开发, 并结合djan ...

  6. .Net Core 遇到 “'windows-1252' is not a supported encoding name.”

    使用iTextSharp生成Pdf文件时报错如下: 'windows-1252' is not a supported encoding name. For information on defini ...

  7. 洛谷 [USACO05DEC] 布局 题解

    今天学了差分约束系统, 这是一道板子题. 核心:a[v]>a[u]+d 相当于从u到v连一条长度为d的有向边.由于要判断有环,所以要从0点先跑一遍spfa因为1点不一定能到所有的点. #incl ...

  8. Linux grep 查找字符所在文件(grep详解)

    查找字符所在文件 grep -ir "S_ROLE"  ./* -i 不区分大小写 -r 查找字符出处 -a   --text   #不要忽略二进制的数据. -A<显示行数& ...

  9. (尚021)Vue_eslint编码规范检查

    1.eslint 1.1说明 1)ESLint是一个代码规范检查工具 2)它定义了很多特定的规则,一旦你的代码违背了某一规则,eslint会做出非常有用的提示 3)官网:http://eslint.o ...

  10. WinDbg常用命令系列---!peb

    !peb 简介 !peb显示进程环境块(PEB)中信息的格式化视图. 使用形式 !peb [PEB-Address] 参数 PEB-Address要检查其PEB的进程的十六进制地址.(这不是从进程的内 ...