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文件的名字
{

<---取消禁用

       flags           = IPv4 <---可以不些,或者修改成IPv4

<--- no xinetd收到请求后把启动对应的服务并且把请求交给该服务之后,马上返回,继续监听新的请求。 yes 把请求交给服务之后,等待服务处理完毕退出之后,才会继续监听。

<---以什么样的身份启动对应的服务
        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段不能访问

哪些IP或者IP端才能访问,和no_access互斥,取交集

最大负载,0 为没有限制,可以写具体的数字进行限制,一般单核心3或者3以下

<---最多50个实例进程(一般的服务,都是一个客户端连接就一个实例)

<-- 每个相同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
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

再执行/sbin

rvice yum-updatesd restart

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





转载于:https://blog.51cto.com/douya/1232043