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


}




====================================================================




google了一下找到Another app is currently holding the yum lock 解决办法!

yum install nginx时出现Another app is currently holding the yum lock 的解决办法:

先执行rm -f ar/run/yum.pid

再执行/sbinrvice yum-updatesd restart

执行成功之后就可以执行你要的操作了