Samba服务
软件
samba-client客户端
samba服务端
samba-common公共包
例子1: 实现匿名资源的共享
常见工作安全级别: user,share
user 资源可以定义为匿名模式或者带有用户验证模式,默认的级别
share只能定义匿名的资源(如果定义了带有用户验证的资源,windows客户端无法访问)
# vim /etc/samba/smb.conf
[global]<---定义全局选项,控制samba服务本身的运行行为
workgroup = MYGROUP
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
security = user<---定义安全级别,默认,不用改
passdb backend = tdbsam
load printers = yes
cups options = raw
[homes]<----默认的用来把用户的家目录共享出去
comment = Home Directories
browseable = no
writable = yes
[printers]<---- 共享打印机
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
[share] <---定义一个资源,名字为“share”
comment = This is for testing, public resource!
path = /share/weeken_03 <---把本机的指定目录共享出去
browseable = yes <---共享是否可见
guest ok = yes <---匿名是否可以访问
writable = no <---- 资源不可写
重启服务
# service smb restart
客户端测试:
1、查看指定机器是否有可见的共享资源
# smbclient -L //10.1.1.21 <-- -L 列出资源
Enter root's password: <--- 不输入密码,也没有明确提供用户名,所以就匿名都登录
Anonymous login successful
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.5.10-125.el6]
Sharename Type Comment
--------- ---- -------
share Disk This is for testing, public resource!
IPC$ IPC IPC Service (Samba Server Version 3.5.10-125.el6)
Anonymous login successful
2、访问。必须地址后紧跟共享的名字
方法1:
# smbclient //10.1.1.21/share
Enter root's password:
Anonymous login successful
方法2:
# mount -t cifs //10.1.1.21/share /mnt -o guest
例子2: 用户访问自己的家目录
1、配置文件
无需任何配置,默认配置文件就有
[homes]<----默认的用来把用户的家目录共享出去
comment = Home Directories
browseable = no <---只有使用自己的用户名登录之后才能列出
writable = yes<---可写
2、建立用户
用户必须是系统存在的用户,因为用户登录之后,samba进程的任何操作都是使用该用户的身份
但用户的密码必须是和系统帐号对应的密码独立的,需要转为用户建立一套samba专用的密码
# id tom
uid=514(tom) gid=514(tom) 组=514(tom)
# smbpasswd -a tom <--- 把tom用户添加到samba的用户列表中
New SMB password:
Retype new SMB password:
Added user tom.
# service smb restart
# smbclient -L //10.1.1.21 -U tom
Enter tom's password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.5.10-125.el6]
Sharename Type Comment
--------- ---- -------
IPC$ IPC IPC Service (Samba Server Version 3.5.10-125.el6)
tom Disk Home Directories 《---对应的家目录资源
# smbclient //10.1.1.21/tom -U tom
Enter tom's password:
smb: \> put /etc/fstab /fstab
例子3:添加自定义的可写需要验证的资源
要求: 只允许某些用户访问,某些用户可写,某些用户只读
只允许某些网络访问
用户不能删除别人的文件
[resouce]
comment = restrict resource
path = /share/pub
browseable = yes
valid users = tom,mary,bean 《--只允许某些用户访问 ,不在列表中的用户不能访问
《--- invalid users
write list = mary,bean 《---可写,其他默认就只读
hosts allow = 10.1.1. EXCEPT 10.1.1.88 <--- 10.1.1.0/24可以访问,但这个网段中10.1.1.88不能访问,其余网络也不能访问
建立共享对应的目录
# mkdir /share/pub
保证用户对该目录有对应的权限(系统层面的权限控制)
tom 可读
mary,bean 可读可写
# groupadd sambawrite
# gpasswd -a mary sambawrite
# gpasswd -a bean sambawrite
# id tom
uid=514(tom) gid=514(tom) 组=514(tom)
# id mary
uid=510(mary) gid=510(mary) 组=510(mary),612(sambawrite)
# id bean
uid=515(bean) gid=515(bean) 组=515(bean),612(sambawrite)
# chown -R root:sambawrite /share/pub
# chmod 775 /share/pub
# chmod o+t !$
把用户添加到samba用户列表中(tom已经添加了)
# smbpasswd -a mary
# smbpasswd -a bean
# service smb restart
测试
# smbclient //10.1.1.21/resouce -U bean
smb: \> put /etc/fstab /beanfile
# smbclient //10.1.1.21/resouce -U tom
smb: \> put /etc/fstab /tomfile
NT_STATUS_ACCESS_DENIED opening remote file \/tomfile
===================================================================
xinetd
超级守护进程服务
可以托管很多服务,替代很多服务的监听工作,如果有请求进来就把启动对应的服务,把请求交给他们.超级守护进程还能提供额外访问日志记录和额外访问控制
托管给超级守护进程之前:
vsftpd : 21 <---- client
# lsof -i:21
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vsftpd 1788 root 3u IPv4 13964 0t0 TCP *:ftp (LISTEN)
sshd : 22
# lsof -i:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1769 root 3u IPv4 13883 0t0 TCP *:ssh (LISTEN)
sshd 1769 root 4u IPv6 13889 0t0 TCP *:ssh (LISTEN)
托管给超级守护进程之后:
# lsof -i:21
xinetd.....TCP:21(LISTEN)
# lsof -i:22
xinetd.....TCP:22(LISTEN)
例子1: 把vsftpd托管给xinetd服务进行监听
1、取消vsftpd默认独自监听的工作模式,修改成可以交给xinetd托管的工作模式
(不同的服务不同的配置方法)
# service vsftpd stop
# vim /etc/vsftpd/vsftpd.conf
listen=NO
pam_service_name=vsftpd <---默认是这样的,确定没有改变
不需要启动,也没法启动,因为它已经交给了xinetd来按需启动
# chkconfig vsftpd off
2、设定xinetd托管vsftpd服务
# yum install xinetd -y
主配置文件/etc/xinetd.conf
子配置文件所在目录/etc/xinetd.d/
# cp /etc/xinetd.d/rsync /etc/xinetd.d/vsftpd <--- vsftpd为配置文件的名字,随意名字
# vim /etc/xinetd.d/vsftpd
service ftp <---- ftp是协议的名字,一定要和该服务使用的协议的端口对应在/etc/services文件的名字
{
disable = no<---取消禁用
flags = IPv4 <---可以不些,或者修改成IPv4
socket_type = stream <--- tcp:stream , upd:dgram
wait = no<--- no xinetd收到请求后把启动对应的服务并且把请求交给该服务之后,马上返回,继续监听新的请求。 yes 把请求交给服务之后,等待服务处理完毕退出之后,才会继续监听。
user = root<---以什么样的身份启动对应的服务
server = /usr/sbin/vsftpd
log_on_failure += USERID
}
# service xinetd start
# lsof -i:21 -n
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
xinetd 6871 root 5u IPv4 63869 0t0 TCP *:ftp (LISTEN)
测试:
# ftp 10.1.1.21
例子2: 把sshd服务托管给xinetd
1、把原来的sshd服务关闭,确定sshd服务本身是否有针对xinetd(inetd)的选项
# service sshd stop
# chkconfig sshd off
通过man sshd_config 和 man sshd ,确定之后 sshd 的 -i参数和inetd相关
2、建立对应的xinetd配置文件
# vim /etc/xinetd.d/sshd
service ssh
{
disable = no
flags = IPv4
socket_type = stream
wait = no
user = root
server = /usr/sbin/sshd
server_args = -i <--- 通过man sshd得来的
log_on_failure += USERID
}
# service xinetd restart
# lsof -i:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
xinetd 7379 root 5u IPv4 69958 0t0 TCP *:ssh (LISTEN)
例子3: 在例子2的基础上,添加访问控制
no_access = 61.12.2.3 172.16.2.0 哪些IP或者IP段不能访问
only_from =哪些IP或者IP端才能访问,和no_access互斥,取交集
max_load = 0最大负载,0 为没有限制,可以写具体的数字进行限制,一般单核心3或者3以下
cps = 50 10 <--每秒最多50个并发连接,超过之后,停止接受新请求10秒
instances = 50<---最多50个实例进程(一般的服务,都是一个客户端连接就一个实例)
per_source = 10<-- 每个相同IP最多建立10个连接
sshd:
只允许10.1.1.0网段连接服务器,然后10.1.1.21不能登录。
每秒并发不能超过30,超过就停止服务5秒
整个服务器最多并发30
单个IP只能最多并发登录3个连接
only_from = 10.1.1.0
no_access = 10.1.1.21
cps = 30 5
instances = 30
per_source = 3
如果该登录被xinetd的访问控制拒绝,都会出现类似的报错
# ssh 10.1.1.21
ssh_exchange_identification: Connection closed by remote host
===========================================================================
tcpwraper 服务,简单的tcp防火墙
保护本机部分支持tcpwraper的程序的网络连接
# ldd /usr/sbin/vsftpd | grep wrap
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007fc500b19000) 有显示,说明支持
# ldd /usr/sbin/sshd | grep wrap
libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f4006858000)
配置文件所有支持保护的服务共同使用的:
/etc/hosts.deny <---- 设定拒绝哪些IP,IP段访问被保护的服务
/etc/hosts.allow <---- 设定允许哪些IP,IP段访问被保护的服务
tcpwrap访问控制的规则匹配:
首先查看allow里是否有匹配的规则,如果有,就按照allow去执行,不管deny有没有相应的规则。
如果allow没有找到匹配的规则,而在deny找到匹配的规则,那么就按照deny的规则去生效。
如果allow和deny都没有找到匹配,最终就放行(允许)
规则语法:
受保护的进程名字: 受影响的IP或者IP端(空格分隔)
例子: 只允许10.1.1.0/24访问sshd服务
实现前: 确定xinetd的规则没有冲突
方法1:
# vim /etc/hosts.allow
sshd: 10.1.1.0/255.255.255.0
# vim /etc/hosts.deny
sshd: ALL
方法2:
# vim /etc/hosts.allow
不许要添加
# vim /etc/hosts.deny
sshd: ALL EXCEPT 10.1.1.0/255.255.255.0
例子: 只允许10.1.1.0/24访问sshd服务,但10.1.1.21不能访问
方法1:
# vim /etc/hosts.allow
sshd: 10.1.1.0/24 EXCEPT 10.1.1.21
# vim /etc/hosts.deny
sshd: ALL
方法2:
# vim /etc/hosts.allow
不许要添加
# vim /etc/hosts.deny
sshd: ALL EXCEPT 10.1.1.0/255.255.255.0 EXCEPT 10.1.1.21
例子3: 如果有触发规则的行为发生,就执行某些命令
实现: 如果有被tcpwrap拒绝登录本机的sshd的话,发送邮件给管理员
# vim /etc/hosts.allow
sshd: 10.1.1.0/24 EXCEPT 10.1.1.21
# vim /etc/hosts.deny
sshd: ALL : spawn (echo "%d - deny from %h" | mail -s "alert" root) &
====================================================================
练习:
1、只允许私有IP段访问本机的sshd服务,如果发现违背规则的记录日志/var/log/sshd.log并且发送邮件到root
2、不允许root登录本机的sshd服务
3、单个IP最多只能登录2个会话。
4、只能在工作时间 08:00 ~ 18:00 登录本机的sshd服务。
10.0.0.0/8
172.16.0.0 - 172.31.255.255
192.168.0.0
条件1、
# vim /etc/hosts.allow
sshd: 10.0.0.0/255.0.0.0 172.16.0.0/255.240.0.0 192.168.0.0/255.255.0.0
# vim /etc/hosts.deny
sshd: ALL : spawn (echo "%d - deny from %h" | mail -s "alert" root;echo "deny from %h" >>/var/log/sshd.log) &
条件2、
# vim /etc/ssh/sshd_config
PermitRootLogin no
条件3、条件4
service ssh
{
disable = no
flags = IPv4
socket_type = stream
wait = no
user = root
server = /usr/sbin/sshd
server_args = -i
log_on_failure += USERID
per_source = 2
access_times = 08:00-18:00
}
====================================================================