实现的功能:
1. 用Samba实现主域控制器(PDC)。并且客户端在登录到域后,可以修改密码,可以在共享文件的安全属性中可以添加组和用户;(已测试)
2. 用一个Samba服务器虚拟多个Samba服务器;每个Samba分别以不同的安全级别(Security)运行;(已测试)
3. 客户端可以使用Windows AD中的帐号登录Samba服务器;
4. 实现对Samba用户进行磁盘配额。(已测试)
附录:
1:samba中定义的一些宏变量;
2:如何解决Windows访问Samba服务器时文件夹及文件名乱码问题;
3:一个完整的用Samba实现PDC的smb.conf配置文件样本;
4:参考文章列表。
一:用Samba实现主域控制器(PDC)
Step 1 :修改 smb.conf 文件;
配置Samba,将其设置为以PDC模式工作:
[global]
# 指定工作组或域的名称,需要和系统的hostname一致
workgroup = smbdomain
# 设置Samba服务器的netbios名称
netbios name = sambapdc
# 对该Samba服务器的一些描述
server string = Samba Server
# 设置客户端与服务器端进行通信时采用加密密码
encrypt passwords = yes
# 指定Samba密码文件的位置
smb passwd file = /etc/samba/smbpasswd
# 允许哪些客户端访问
# 0.0.0.0表示无限制;192.168.0. 表示允许整个网段访问
;hosts allow = 0.0.0.0
# 信任来自哪个网卡的连接
;interfaces = eth0
# 指定日志文件的位置,也可以使用Samba的宏来定义日志文件。比如:
# log.%U,为每个访问的用户都创建一个日志。
log file = /var/log/samba/smbd.log
# 指定日志文件的大小,以K字节为单位
max log size = 50
# 设置套接字选项,在与客户端对话时使用这个选项
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
# 以下选项设置PDC
# PDC 必须工作在user安全级别
security = user
# 设置Samba为本地主浏览器
local master = yes
# 设置为65,nmbd将打败任何NT服务器而在本地广播范围内成为工作组的
# 本地主浏览器
os level = 64
# 设置为域主浏览器
domain master = yes
# 设置为首选主浏览器
preferred master = yes
# 允许客户端登录到域
domain logons = yes
# 客户端登录到域后执行的脚本
# 将logon path设置成%U.bat(%U指登录的用户名),这样可以针对每个用户
# 做更具体的设置
logon script = logon.bat
# 设置Windows客户端登录到域后的主目录位置
logon home = \\%L\%U\.profile
# 设置Windows客户端登录域后漫游文件(Roaming profiles)存放的目录
logon path = \\%L\profiles\%U
# 设置Windows客户端登录到域后,主目录将要被连接到哪个本地驱动器;
# 这里指定的是H:。
logon drive = H:
# 指定Samba的管理员。用户名之间以空格隔开
admin users = root bibby
Step 2:为domain logon选项添加netlogon字段,为logon path添加profiles字段。并分别将他们设置正确的权限。
[netlogon]
path = /home/sambapdc/netlogon
writeable = no
browseable = no
guest ok = no
[profiles]
path = /home/sambapdc/profiles
writeable = yes
browseable = yes
guest ok = no
为这两个文件夹设置正确的权限:
Shell > chmod –R 755 /home/sambapdc/netlogon
Shell > chmod –R 777 /home/sambapdc/profiles
最后还需要为logon script添加logon.bat文件。该文件放在netlogon字段指定的目录下(本例为/home/sambapdc/netlogon/logon.bat):
net use H: \\%L\%U
logon.bat文件必须是Dos格式的,所以还需要用unix2dos这个工具来转换一下格式:
shell > unix2dos logon.bat
这样Samba服务器端的设置就完成了。
Step 3 :为PDC添加管理员;
“root”是Samba缺省的管理员。
shell > smbpasswd –a root
> New SMB password: PASSWORD
> Retype new SMB password: PASSWORD
或者直接:
shell > smbpasswd –a root PASSWORD
还可以在smb.conf的”admin users =”中加上某个用户的名字,使其成为管理员。比如:
[global]
admin users = root ntclient
这样就把登录名为ntclient的客户机器也设置为管理员了。
Step 4:为PDC添加客户端;
为了便于管理,可以先添加一个用户组:
shell > groupadd smbtest
然后为把客户端的机器添加到这个组中(在Novell Suse Enterprisee 9中的操作),做为可信任用户:
1)
# 先将Windows客户端的netbios名称添加到Unix系统中
# 用户名(ntclient$)加$符号表示这是一个客户端机器的netbios名称,而不是
# 实际Unix系统上的用户
shell > useradd –g smbtest –s /sbin/nologin ntclient$
注意:在RedHat系统中无法添加ntclient$(带$符号的用户)用户,所以你需要先添加一个ntclient用户,然后用vipw工具编辑/etc/passwd,将它修改成ntclient$用户。
2)
# 为这个客户端的机器在Unix系统中添加一个对应的管理用户
# 为了方便管理,使用和客户端netbios名称相同的用户名
shell > useradd –g smbtest –s /sbin/nologin ntclient
3)
# 把客户端机器加入到Samba中
# 这里的ntclient是客户端机器的netbios名称,添加的时候不加$符号
# smbpasswd命令的 –m 参数表示添加的是一个可信任的客户端机器
shell > smbpasswd –a –m ntclient
4)
# 为客户端机器在Samba中添加一个管理员
# 这里的ntclient是第2)步中添加的用户名,添加时需要输入密码
# 这个用户名和密码就是客户端登陆时所使用的帐号
shell > smbpasswd –a ntclient
OK,重新启动samba服务。
注:在RedHat中无法直接添加带”$”符号的用户。一种可行的方法是:
1:先添加一个普通用户ntclient(useradd);
2:使用vipw –p修改/etc/passwd,将ntclient改成ntclient$;
3:同第一步一样,添加一个普通用户ntclient。
这样就可以了。
Step 5:从Windows客户端登录域;
将系统注销,然后在登录框中选择要登录的域,输入已经在Samba服务器中添加的用户名和密码,OK,登录了。
Step 6:客户端如何修改登录密码:
登录域后,按Ctrl+Alt+Delete键,然后在“更改密码”中,选定域,再输入登录域的用户名和旧密码新密码。
OK,密码修改成功。
Step 7:将Unix系统上的用户和组映射到Windows域用户组中,使用户在登录域后可以为共享的文件夹添加管理用户;
要实现此功能,Samba必须被配置为PDC,并且需要在 smb.conf 文件中添加以下选项:
[global]
nt acl support = yes
1):创建NT已有用户组到Unix系统用户组的映射;
常见的NT域的用户组有:
Power Users
Domain Admins
Print Operators
Domain Guests
Administrators
Account Operators
Backup Operators
Users
Domain Users
下面将创建NT域中”Domain Admins”组到Unix系统中winadmin的映射:
1:创建用户组winadmin(也可以使用 yast à security à create user来创建)
shell > groupadd winadmin
2:在该用户组里添加域管理员用户,比如root,adminitrator之类的。
可以使用yast,也可以直接直接编辑/etc/group文件。
3:创建”Domain Admins”到winadmin的映射:
shell > net groupmap set “Domain Admins” winadmin
4:使用 net groupmap list 来查看是否映射成功。
5:重新启动smbd和nmbd。
2):创建自定义用户组smbtest到本地用户组smbtest的映射(组的名称必须相同才能做映射);
1:在Unix系统下创建一个用户组smbtest;
Shell > groupadd smbtest
2:将一些用户添加到smbtest组中。
可以用yast,也可以直接编辑/etc/group文件。
3:创建映射:
Net groupmap set smbtest smbtest
4:使用 net groupmap list 来查看是否映射成功。
5:重新启动smbd和nmbd。
在客户端登录到域后,在文件夹的属性页上选择“安全”标签,点击“添加”,就可以看到已经做好映射的组了。
二:用一个Samba服务器虚拟多个Samba服务器;
要用Samba服务器虚拟出多个Samba服务器是件很简单的事,只需要在[global]中加入以下几个选项:
[global]
netbios name = sambaserver1
# 虚拟另一个Samba服务器,netbios名为sambaserver2
netbios aliases = sambaserver2
# include选项指定虚拟的Samba服务器使用的配置文件
# %L宏,代表netbios name。smb.conf.%L就表示sambaserver1将使用
# smb.conf.sambaserver1这个配置文件。
include = /etc/samba/smb.conf.%L
然后让sambaserver1和sambaserver2共享一部分的smb.conf文件,再配置分别配置好smb.conf.%L文件就可以了。
以下是一个简单的例子,用一台Samba服务器,虚拟出两个Samba服务器,netbios name 分别为a和b。
其中a被配置为PDC(关于如何将Samba配置为PDC,请参考第一部分),b被配置为文件服务器,提供一些共享文件。
============ File : /etc/samba/smb.conf ================
[global]
workgroup = sambatest
server string = samba server %L
# “a”为系统的hostname
netbios name = a
netbios aliases = b
encrypt password = yes
include = /etc/samba/smb.conf.%L
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=8192 SO_RCVBUF=8192
password level = 8
username level = 8
log file = /var/log/samba/log.%L%M
max log size = 50
============= File : /etc/samba/smb.conf.a ===========
security = user
os level = 64
domain master = yes
local master = yes
domain logons = yes
logon script = logon.bat
preferred master = yes
[netlogon]
comment = "netlogon dir"
path = /home/samba/netlogon
writeable = no
browseable = yes
public = no
[profiles]
path = /home/samba/profiles
writeable = yes
browseable = yes
guest ok = no
============= File : /etc/samba/smb.conf.b ===============
security = share
[share]
path = /tmp
browseable = yes
writeable = no
guest ok = yes
按照如何将Samba配置为一个PDC的方法,添加和设置好相关文件和目录,然后就可以重新启动smbd和nmbd了。这时候就可以在Windows的“网上邻居”中看到配置好的Samba服务器了(或者直接在浏览器的地址栏中输入file://a/或者file://b/来测试,能访问即表示配置成功)。
三:配置Samba,使客户端可以使用Windows AD中的帐号登录Samba服务器;
这时候Samba必须运行在security=server或domain级别上。并且添加以下几个选项:
[global]
security = server
# 指定Windows AD服务器,从它上面获取帐号信息,供客户端登录
# 可以是IP地址,也可以是netbios名称
# 多个AD服务器以空格分开
password server = 192.168.0.1 192.168.0.2
# 指定username map的映射文件
username map = /etc/samba/user.map
/etc/samba/user.map文件的格式为:
root=admin administrator
bibby=@administrators
第1行:符号“=” 左边是单独的Unix系统账号,右边是要映射的Windows AD系统上的账号列表。服务器逐行分析映射文件,如果提供的账号和某行有右侧列表中的账号匹配,就把它替换为等号左边的账号。
第2行:符号“=” 左边是单独的Unix系统账号,右边是要映射的Windows AD系统上的用户组。如果提供的帐号和用户组administrators中的一个用户名匹配,就被映射成用户bibby。
四:为Samba用户设置磁盘限额;
几个概念:
Grace Period : 用户可被容许超过soft limit 的时间。
假设Grace Period设定为3天,超过soft limit的user在三天内未处理超过limit的档案的话,user将无法再使用任何磁盘空间(这会造成该user无法登录系统)。
设置Grace Period可以使用命令“edquota –t”。
Soft Limit : 用户能使用的硬盘空间的大小。
但如果Grace Period不是设为0的话,则Soft Limit只是一个警戒线,使用者如果使用的磁盘空间超过这个警戒线,就会开始收到系统所给的警告。
Hard Limit : Hard Limit代表的是用户对磁盘空间使用的绝对上限。使用者使用的磁
盘空间绝对无法超越此上限。
只有当Grace Period不是设为0时,Hard Limit的设定才会生效。
inode :每个文件和目录都需要使用一个inode。所以可以用来限制用户的文件数目。
block limits是对磁盘空间使用的限制,以字节为单位,1024 blocks大概就是1M。
每个客户端机器登录Samba PDC时都需要一个Samba帐号,而这个帐号也对应一个Unix系统帐号,而为了方便管理,这两个帐号的用户名通常都和客户端机器的Netbios Name一致。所以,当客户端机器登录到Samba域的时候,就等于是同名的Unix系统用户登录上系统,而Quota开始起作用了。
1:设置quota(这里以/home为例);
编辑/etc/fstab文件,在options区域加上usrquota或者grpquota。也可以同时设置用户quota和组quota。加上后的文件看起来就象这样:
LABEL=/home /home ext3 defaults,usrquota,grpquota 1 2
然后重新启动系统(也可以不重启系统,而使用mount的remount参数:
Shell > mount –o remount /home
)。
第一次使用quota,需要先运行一次quotacheck命令。该命令会自动创建对用户和组进行quota时使用的两个文件:
Shell > quotacheck –avug
然后会在被quota的目录(这里是/home)下生成两个文件:
Shell > ls /home/*quota*
/home/aquota.group /home/aquota.user
接下来可以使用quota提供的工具来配置和监视quota:
1):edquota;
edquota –u USER # 为用户“USER” 配置quota
edquota –g GROUP # 为组“GROUP”配置quota
shell > edquota –u ntclient
Disk quotas for user ntclient (uid 509):
Filesystem blocks soft hard inodes soft hard
/dev/sda2 28 1024 2048 7 0 0
这个例子为ntclient用户设置了quota:当总大小达到1024K(1M)的时候,会向用户发出警告,但是还可以继续添加文件(因为还未超过Hard Limit设置的值)。当总大小达到2048K(2M)时,系统将提示用户,磁盘已满,无法添加文件。
这里blocks和inodes都不能更改,因为它们表示的是现在已经使用的数目。
第一个soft是指对文件总大小的Soft Limit,第二个soft是对inode的Soft Limit。一个inode对应一个文件或者一个文件夹。
这里只配置了对文件总大小的Soft Limit。你可以两个同时使用,既可以限制文件总大小,也可以限制文件和文件夹的数目。
edquota的一些常见用法:
# 将为ntclient用户设置的quota复制给用户bibby和king
# 则他们的quota都是一样的
shell > edquota –p ntclient bibby king
2):repquota,报告分区的quota情况;
使用方法:
repquota /quota/path
例如:
Shell > repquota /home
*** Report for user quotas on device /dev/sda2
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 36804 0 0 12 0 0
ntclient -- 28 1024 2048 7 0 0
bibby$ -- 4 0 0 1 0 0
bibby -- 20 1024 2048 5 0 0
#502 -- 24 0 0 6 0 0
#504 -- 4 0 0 1 0 0
#505 -- 20 0 0 5 0 0
#506 -- 4 0 0 1 0 0
#507 -- 20 0 0 5 0 0
这就是repquota的输出,象你汇报quota的配置情况。
另外还有quotaoff和quotaon命令,都比较简单,这里就不说了。
3):查看为某个用户设置的quota(以用户ntclient为例):
shell > quota –u ntclient
你将会看到和“edquota –u ntclient”一样的结果。
4):查看为某个用户组设置的quota(以组ntclient为例):
Shell > quota –g ntclient
看到的结果和edquota –g ntclient一样。
2:设置User Quota(以ntclient用户为例):
Shell > edquota –u ntclient
Disk quotas for user ntclient (uid 509):
Filesystem blocks soft hard inodes soft hard
/dev/sda2 556 1024 2048 85 0 0
运行以后,将会启动编辑器(看看你的编辑器设置的是什么:echo $EDITOR)进行编辑。这里我为ntclient用户设置的Block Soft Limit是1024K(1M),Block Soft Limit是2048K(2M)。而对于inode的soft/hard limit都没有设置。
设置好后,执行命令(本例设置Quota的FileSystem是/home(/dev/sda2)):
Shell > quotaoff /home
Shell > quotacheck –avug
Shell > quotaon /home
3:测试User Quota:
从一台客户端的Windows 2000系统上登录到Samba域中,复制一些文件到映射的驱动器中,当超过设置的Block soft limit时,系统不会出现提示,仍然可以继续添加文件。当文件总大小超过Block hard limit时,就不能再添加文件了,会提示一个类似于“磁盘空间不足”的警告信息。
这表明Quota正常工作。
4:设置Group Quota(以用户组ntclient为例,该组中有两个用户:ntclient,bibby);
Shell > edquota –g ntclient
Disk quotas for group ntclient (gid 505):
Filesystem blocks soft hard inodes soft hard
/dev/sda2 580 1024 3000 91 0 0
这里为组ntclient设置的Block Soft Limit为1024K(1M),Block Hard Limit为3000K(接近3M);对inode不进行限制。
5:测试Group Quota:
刚才已经为用户ntclient设置了2048K的Block Hard Limit,这里再让另一台netbios name为bibby的Windows客户端登录Samba域,并在映射的驱动器中添加文件,看看两个用户(ntclient和bibby)的总文件大小能否超过为组ntclient设置的Block Hard Limit。
注意:如果在smb.conf中设置了“admin users = ”选项,并且添加了某个用户,则这个用户从客户端登录到Samba PDC中时,对文件的操作将是以root权限进行的,所以也不受quota设置的磁盘容量限制。
比如,如果在smb.conf中有如下选项:
admin users = root ntclient
则这里所做的Quota测试将出现错误(即ntclient用户不受Quota设置的磁盘限额的限制)。
附录:
1:samba中定义的一些宏变量:
%S = 当前服务名(如果有的话)
%P = 当前服务的根目录(如果有的话)
%u = 当前服务的用户名(如果有的话)
%g = 当前用户说在的主工作组
%U = 当前对话的用户名
%G = 当前对话的用户的主工作组
%H = 当前服务的用户的Home目录
%v = Samba服务的版本号。
%h = 运行Samba服务机器的主机名
%m = 客户机的NETBIOS名称
%L = 服务器的NETBIOS名称
%M = 客户机的主机名
%N = NIS服务器名
%p = NIS服务的Home目录
%R = 说采用的协议等级(值可以是CORE, COREPLUS, LANMAN1, LANMAN2,NT1)
%d = 当前服务进程的ID
%a = 客户机的结构(只能识别几项:Samba,WinNT,Win95)
%I = 客户机的IP
%T = 当前日期和时间
2:Windows访问Samba服务器时文件夹及文件名乱码问题:
在 smb.conf 文件中添加以下选项:
[global]
# dos客户端连接到Samba服务器时,Samba告诉客户端显示的字符集
dos charset = cp936
# Samba服务器使用的字符集
unix charset = cp936
3:一个完整的用Samba实现PDC的smb.conf配置文件样本:
[global]
workgroup = samba
netbios name = sambabibby
server string = Samba PDC running %v
unix password sync = yes
passwd program = /usr/bin/passwd %u
nt acl support = yes
security = user
os level = 64
preferred master = yes
local master = yes
domain master = yes
encrypt passwords = yes
domain logons = yes
log file = /var/log/samba/log.%m
log level = 2
max log size = 50
logon home = \\%L\%U\.profile
logon path = \\%L\profiles\%G\%U
logon drive = H:
logon script = logon.bat
admin users = root
[homes]
browseable = no
writeable = yes
[profiles]
path = /home/sambapdc/profiles
writeable = yes
browseable = no
create mask = 0600
directory mask = 0770
[netlogon]
comment = Network Logon Service
path = /home/sambapdc/netlogon
read only = yes
参考文章:
Samba官方文档:http://us2.samba.org/samba/docs
Quota Tutorial on Linux:
http://souptonuts.sourceforge.net/quota_tutorial.html
Quota:User硬碟管理:
http://souptonuts.sourceforge.net/quota_tutorial.html
磁碟空間管理(Disk Quota):