加固Samba安全三则
一 、从基本访问控制入手
Samba本身具有IP访问过滤功能。.Samba的配置文件/etc/samba/smb.conf中,host allow/deny选项规定了哪些lP的主机可以访问Samba服务:
hosts allow =192.168.0.127
上面这一行表示允许192.168.0.*段的主机和环路(Loopback)接口是可以连接Samba服务的。
在这里, “.” 是通配符,192.168.0.和127.分别表示192.168.0.* 和127.*.*.* 的lP。
hosts deny的用法和hosts allow完全相同,作用相反。
Samba本身具有IP访问过滤功能。.Samba的配置文件/etc/samba/smb.conf中,host allow/deny选项规定了哪些lP的主机可以访问Samba服务:
hosts allow =192.168.0.127
上面这一行表示允许192.168.0.*段的主机和环路(Loopback)接口是可以连接Samba服务的。
在这里, “.” 是通配符,192.168.0.和127.分别表示192.168.0.* 和127.*.*.* 的lP。
hosts deny的用法和hosts allow完全相同,作用相反。
Samba有4个安全级别,在/etc/samba/smb.conf中,由sercurity参数决定:
Security=security_ level
security_ level可以为share、user、server和domain,其中share表示没有安全性的级别,任何用户都可访问Samba服务器上的资源; user表示要求用户访问共享资源之前必须提供用
户名和密码进行验证;server和user一样需要验证身份,但账号验证的工作是递交给另一个服务器去做,如果递交失败,就退到user级别; domain这个安全级别要求网络上存在一台主域控制器(PDC),Samba将账号验证的工作交给PDC。
这几个安全级别除了share之外。其他3个级别均需要账号验证。
下面以比较安全的user级别设定为例来介绍Samba的设置。
修改 /etc/samba/smb.conf,使sercurity=user,然后设定一个共享目录,使得该目录仅可以被指定用户存取:
[myshare]
Path:=/usr/somewhere/shared
valid users=leo
public=no
writable = yes
printable = no
create mask = 0765
上述设定中。“valid users = leo”表示允许访问该共享目录的有效用户为leo,“public=
no”表示访问共享目录必须经过账号验证,“writable=yes”表示对该目录可写。其中,leo必须为Linux系统实际存在的用户,并且要用smbpasswd设定密码后,才能够通过Samba
的验证。使用如下命令增加系统账
户leo:
#adduser-s /sbin/nologin leo
#passwd leo
然后使用如下命令设定leo的Samba密码:
#srnbpasswd -a leo
然后使用如下命令使leo可以使用Samba服务:
#smbpasswd -e leo
经过上述设定后,访问/usr/somewhere/shared目录时会要求进行账号验证。
二、设置防病毒功能
Linux与Samba本身虽然并不会被Windows上的大多数病毒所感染,但那些病毒会使更多的Windows系统客户机受到威胁。一旦有客户不小心打开含有病毒的文件,病毒就会在整个局域网络中蔓延并爆发。仅通过上面的访问控制还无法控制病毒的感染,解决这个问题不能在Windows客户端,因为客户端机器情况复杂而不同,处理起来费时费力,也起不到好的效果。所以应该是在Linux和Samba的文件服务器端提供防护措施
我们采取了使用ClamAV 防病毒的方案,再配合上Samba的Vscan病毒扫描技术,起到了很好的防毒效果。文中使用的操作系统是RHEL 5
首先到http://www.sourceforge.net下载ClamAV软件。这里使用的版本是0.91。
建立ClamAV用户和ClamAV组,命令如下:
# adduser clamav -s /dev/null
解压以后执行并安装,命令如下:
#./configure;make;make install
对文件/usr/locall/etc/clamd.conf和/usr/local/etc/freshclam.conf稍加修改,将两个文件的Example行注释掉。
执行“freshclam” 命令可以从网络上更新病毒特征库,应将此命令配置为定期自动执行,以便随时更新最新的病毒库。病毒特征库缺省保存在/usr/local/share/clamav下。
执行命令“clamd”,它会将ClamAV调用为一个后台进程。
笔者使用的Samba版本是3.3.7,需要下载这个版本的源代码并将其解压。
进入Samba-3.3.7中的source目录, 执行如下命令:
#autogen.sh;./configure --prefix=/usr --sysconfdir=/etc
#make proto
下载Samba 防病毒套件Samba-Vscan并解压,使用的版本是0.37。进入Samba-Vscan的目录并进行编译,命令如下:
#./autogen.sh
#./configure --with-samba-source=/usr/src/samba-3.3.7/source --sysconfdir=/etc/samba
#make
#cp samba-vscan.so /usr/lib/samba/vfs/
# cp clamav/vscan-clamav.conf /etc/samba/
在文/etc/samba/vscan-clamav.conf中添加下面内容:
infected file action=quarantine
quarantine prefix=vir-
clamd socket name=/tmp/clamd
再修改/etc/samba/smb.conf文件,将需要共享的地方写入“vfs object=vscan-clamav” 即可。
Security=security_ level
security_ level可以为share、user、server和domain,其中share表示没有安全性的级别,任何用户都可访问Samba服务器上的资源; user表示要求用户访问共享资源之前必须提供用
户名和密码进行验证;server和user一样需要验证身份,但账号验证的工作是递交给另一个服务器去做,如果递交失败,就退到user级别; domain这个安全级别要求网络上存在一台主域控制器(PDC),Samba将账号验证的工作交给PDC。
这几个安全级别除了share之外。其他3个级别均需要账号验证。
下面以比较安全的user级别设定为例来介绍Samba的设置。
修改 /etc/samba/smb.conf,使sercurity=user,然后设定一个共享目录,使得该目录仅可以被指定用户存取:
[myshare]
Path:=/usr/somewhere/shared
valid users=leo
public=no
writable = yes
printable = no
create mask = 0765
上述设定中。“valid users = leo”表示允许访问该共享目录的有效用户为leo,“public=
no”表示访问共享目录必须经过账号验证,“writable=yes”表示对该目录可写。其中,leo必须为Linux系统实际存在的用户,并且要用smbpasswd设定密码后,才能够通过Samba
的验证。使用如下命令增加系统账
户leo:
#adduser-s /sbin/nologin leo
#passwd leo
然后使用如下命令设定leo的Samba密码:
#srnbpasswd -a leo
然后使用如下命令使leo可以使用Samba服务:
#smbpasswd -e leo
经过上述设定后,访问/usr/somewhere/shared目录时会要求进行账号验证。
二、设置防病毒功能
Linux与Samba本身虽然并不会被Windows上的大多数病毒所感染,但那些病毒会使更多的Windows系统客户机受到威胁。一旦有客户不小心打开含有病毒的文件,病毒就会在整个局域网络中蔓延并爆发。仅通过上面的访问控制还无法控制病毒的感染,解决这个问题不能在Windows客户端,因为客户端机器情况复杂而不同,处理起来费时费力,也起不到好的效果。所以应该是在Linux和Samba的文件服务器端提供防护措施
我们采取了使用ClamAV 防病毒的方案,再配合上Samba的Vscan病毒扫描技术,起到了很好的防毒效果。文中使用的操作系统是RHEL 5
首先到http://www.sourceforge.net下载ClamAV软件。这里使用的版本是0.91。
建立ClamAV用户和ClamAV组,命令如下:
# adduser clamav -s /dev/null
解压以后执行并安装,命令如下:
#./configure;make;make install
对文件/usr/locall/etc/clamd.conf和/usr/local/etc/freshclam.conf稍加修改,将两个文件的Example行注释掉。
执行“freshclam” 命令可以从网络上更新病毒特征库,应将此命令配置为定期自动执行,以便随时更新最新的病毒库。病毒特征库缺省保存在/usr/local/share/clamav下。
执行命令“clamd”,它会将ClamAV调用为一个后台进程。
笔者使用的Samba版本是3.3.7,需要下载这个版本的源代码并将其解压。
进入Samba-3.3.7中的source目录, 执行如下命令:
#autogen.sh;./configure --prefix=/usr --sysconfdir=/etc
#make proto
下载Samba 防病毒套件Samba-Vscan并解压,使用的版本是0.37。进入Samba-Vscan的目录并进行编译,命令如下:
#./autogen.sh
#./configure --with-samba-source=/usr/src/samba-3.3.7/source --sysconfdir=/etc/samba
#make
#cp samba-vscan.so /usr/lib/samba/vfs/
# cp clamav/vscan-clamav.conf /etc/samba/
在文/etc/samba/vscan-clamav.conf中添加下面内容:
infected file action=quarantine
quarantine prefix=vir-
clamd socket name=/tmp/clamd
再修改/etc/samba/smb.conf文件,将需要共享的地方写入“vfs object=vscan-clamav” 即可。
使clamav随系统一起启动
#chkconfig --level 35 chamd on
#chkconfig --level 35 freshclam on (定时更新病毒库)
#chkconfig --level 35 chamd on
#chkconfig --level 35 freshclam on (定时更新病毒库)
例如设置目录/homes共享的内容写法如下:
[homes]
comment=Home Directories
browseable=no
vfs object=vscan-clamav
writable=yes
重新启动之后,Samba服务器就拥有防病毒功能了。如果有人尝试向服务器写入病毒,那么带有病毒的文件就会被系统自动清除。如果有人下载已经感染病毒的文件,则会报
告无权读取此文件。至此,一些非常容易传播的Windows共享型病毒就被彻底控制住了。
[homes]
comment=Home Directories
browseable=no
vfs object=vscan-clamav
writable=yes
重新启动之后,Samba服务器就拥有防病毒功能了。如果有人尝试向服务器写入病毒,那么带有病毒的文件就会被系统自动清除。如果有人下载已经感染病毒的文件,则会报
告无权读取此文件。至此,一些非常容易传播的Windows共享型病毒就被彻底控制住了。
三. 使用SSL加固samba
如果客户可以从internet连接到samba server,则喜欢截获信息的hacker就可以重新构造远程用户正在使用的文件。利用程序他们甚至可以在远程用户正在使用的文件中插入数据。通过SSL加固samba就可以彻底解决此类问题,SSL是一个标准和协议,它允许双方在不安全的网络上互相进行安全的通信。如果对于局域网用户就不必设置了。
编译带有SSL支持的samba,步骤如下:
1.得到、编译和安装SSLeay.可以在站点http://www.cryptsoft.com处得到SSLeay的最新版本。在配置带有SSL支持的samba之前必须进行这个步骤,否则无法编译Samba。
#./Configure linux-elf
CC =gcc
CFLAG =-DL_ENDIAN -DTERMIO -DBN_ASM -O3 -fomit-frame-pointer
EX_LIBS =
BN_MULW =asm/bn86-elf.o
DES_ENC =asm/dx86-elf.o asm/yx86-elf.o
BF_ENC =asm/bx86-elf.o
CAST_ENC =asm/cx86-elf.o
RC4_ENC =asm/rx86-elf.o
RC5_ENC =asm/r586-elf.o
MD5_OBJ_ASM =asm/mx86-elf.o
SHA1_OBJ_ASM =asm/sx86-elf.o
RMD160_OBJ_ASM=asm/rm86-elf.o
THIRTY_TWO_BIT mode
DES_PTR used
DES_RISC1 used
DES_UNROLL used
BN_LLONG mode
RC4_INDEX mode
如果客户可以从internet连接到samba server,则喜欢截获信息的hacker就可以重新构造远程用户正在使用的文件。利用程序他们甚至可以在远程用户正在使用的文件中插入数据。通过SSL加固samba就可以彻底解决此类问题,SSL是一个标准和协议,它允许双方在不安全的网络上互相进行安全的通信。如果对于局域网用户就不必设置了。
编译带有SSL支持的samba,步骤如下:
1.得到、编译和安装SSLeay.可以在站点http://www.cryptsoft.com处得到SSLeay的最新版本。在配置带有SSL支持的samba之前必须进行这个步骤,否则无法编译Samba。
#./Configure linux-elf
CC =gcc
CFLAG =-DL_ENDIAN -DTERMIO -DBN_ASM -O3 -fomit-frame-pointer
EX_LIBS =
BN_MULW =asm/bn86-elf.o
DES_ENC =asm/dx86-elf.o asm/yx86-elf.o
BF_ENC =asm/bx86-elf.o
CAST_ENC =asm/cx86-elf.o
RC4_ENC =asm/rx86-elf.o
RC5_ENC =asm/r586-elf.o
MD5_OBJ_ASM =asm/mx86-elf.o
SHA1_OBJ_ASM =asm/sx86-elf.o
RMD160_OBJ_ASM=asm/rm86-elf.o
THIRTY_TWO_BIT mode
DES_PTR used
DES_RISC1 used
DES_UNROLL used
BN_LLONG mode
RC4_INDEX mode
接下来修改环境变量:PATH=$PATH:/usr/local/ssl/bin
生成文件:cat >/tmp/private.txt
生成随机数
# ssleay genrsa -rand /tmp/private.txt >/dev/null
2451 semi-random bytes loaded
Generating RSA private key, 512 bit long modulus
..+++++
.................................+++++
生成文件:cat >/tmp/private.txt
生成随机数
# ssleay genrsa -rand /tmp/private.txt >/dev/null
2451 semi-random bytes loaded
Generating RSA private key, 512 bit long modulus
..+++++
.................................+++++
e is 65537 (0x10001)
2.编译带有SSL支持的samba,从samba源代码编译修改Makefile文件,安装支持SSL的samba二进制文件。
#./configure --with-ssl
# make clean
# make all
3.为你的samba服务器,创建X.509证书。
# cd /etc
# mkdir certificates
# chmod 700 certificates
#./configure --with-ssl
# make clean
# make all
3.为你的samba服务器,创建X.509证书。
# cd /etc
# mkdir certificates
# chmod 700 certificates
修改CA.sb脚本文件
找到CATOP=./demoCA,把它修改成:CATOP=/etc/certificates
下面你就要修改 /usr/local/ssl/lib/ssleay.cnf 文件
把[ CA_default ]字段dir = ./demoCA # Where everything is kept
改成:[ CA_default ]
dir = /etc/certificates # Where everything is kept
接着运行CA脚本:
#/usr/local/ssl/bin/CA.sh -newca
Making CA certificate ...
Using configuration from /usr/local/ssl/lib/ssleay.cnf
Generating a 1024 bit RSA private key
.............................+++++
.....................+++++
writing new private key to /etc/certificates/private/cakey.pem
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:
接下来会填写这样的信息:
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:California
Locality Name (eg, city) []:Sebastopol
Organization Name (eg, company) []:O'Reilly
Organizational Unit Name (eg, section) []:Books
Common Name (eg, YOUR name) []:John Doe
Email Address []:doe@ora.com
创建客户端证书:
# ssleay genrsa -des3 1024 >phoenix.key
1112 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
........................................+++++
.............+++++
e is 65537 (0x10001)
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:
# ssleay req -new -key phoenix.key -out phoenix-csr
Enter PEM pass phrase:
4.配置samba使用ssl,告诉samba服务器证书,以及似有密钥的位置,并设置其他需要的参数。
下一步我们修改samba的配置文件,位置在/etc/certificates
[global]
ssl = yes
ssl server cert = /etc/certificates/cacert.pem
ssl server key = /etc/certificates/private/cakey.pem
ssl CA certDir = /etc/certificates
保存退出后重启smb服务
# nmbd -D
# smbd -D
Enter PEM pass phrase:
经过上面的设置就可以放心的在Interner上安全的使用samba传输数据了。
目前,许多用户因业务发展需要不断更新,从而造成环境差异较大,整个网络系统平台参差不齐,在服务器端大多使用Linux和Unix,桌面端使用Windows xp/Vista,所以在企业应用中往往是Linux/Unix和Windows操作系统共存形成异构网络。Linux中的Samba就是常用于Linux/Windows合组网下的文件服务器,这样Samba服务器的安全问题就凸显出来了。本文从Samba的访问控制和病毒查杀两方面的设置来加强网络中Samba服务器的安全防护。找到CATOP=./demoCA,把它修改成:CATOP=/etc/certificates
下面你就要修改 /usr/local/ssl/lib/ssleay.cnf 文件
把[ CA_default ]字段dir = ./demoCA # Where everything is kept
改成:[ CA_default ]
dir = /etc/certificates # Where everything is kept
接着运行CA脚本:
#/usr/local/ssl/bin/CA.sh -newca
Making CA certificate ...
Using configuration from /usr/local/ssl/lib/ssleay.cnf
Generating a 1024 bit RSA private key
.............................+++++
.....................+++++
writing new private key to /etc/certificates/private/cakey.pem
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:
接下来会填写这样的信息:
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:California
Locality Name (eg, city) []:Sebastopol
Organization Name (eg, company) []:O'Reilly
Organizational Unit Name (eg, section) []:Books
Common Name (eg, YOUR name) []:John Doe
Email Address []:doe@ora.com
创建客户端证书:
# ssleay genrsa -des3 1024 >phoenix.key
1112 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
........................................+++++
.............+++++
e is 65537 (0x10001)
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:
# ssleay req -new -key phoenix.key -out phoenix-csr
Enter PEM pass phrase:
4.配置samba使用ssl,告诉samba服务器证书,以及似有密钥的位置,并设置其他需要的参数。
下一步我们修改samba的配置文件,位置在/etc/certificates
[global]
ssl = yes
ssl server cert = /etc/certificates/cacert.pem
ssl server key = /etc/certificates/private/cakey.pem
ssl CA certDir = /etc/certificates
保存退出后重启smb服务
# nmbd -D
# smbd -D
Enter PEM pass phrase:
经过上面的设置就可以放心的在Interner上安全的使用samba传输数据了。