linux教程之RHCE(红帽认证工程师)系列(七)SELinux、ftp、SAMBA

luoyjx · 2014-10-02 21:52 · 1747次阅读

目录

TCP Wrappers

SELinux

FTP

SAMBA

NTP

a)       TCP Wrappers     采用“找到第一个匹配就停止”策略,需要解析/etc/hosts.allow和/etc/hosts.deny二个文件

解析步骤:

1.检查/etc/hosts.allow

2.检查/etc/hosts.deny

3.默认是否允许访问

配置文件格式相同

#ldd $(whereis vsftpd) | grep ‘libwrap.so’  //检查进程是否可以通过tcp wrappsers管理

#vim /etc/hosts.allow

    vsftpd:192.168.0.0/255.255.255.0:spawn /bin/echo date %c %d >> /var/log/tcp_allow

    sshd:192.168.0.0/255.255.255.0,192.168.1.0/255.255.255.0

    in.telnetd:192.168.0.254

#vim /etc/hosts.deny

    vsftpd,sshd:ALL:spawn /bin/echo date %c %d >> /var/log/tcp_deny

    in.telnetd:ALL:spawn /bin/echo date /usr/sbin/safe_finger %h >> /var/log/tcp_deny:twist /bin/echo -e "\nWarning!\n"

控制说明

192.168.0. 192.168.0.0 网段
192.168.0.0/255.255.255.0
ALL 所有(进程或者主机)
LOCAL 名称中不带点的主机
KNOWN 可以解析的主机名
UNKNOWN 无法解析的主机名
PARANOID 正、反向查询不匹配或无法解析
EXCEPT 排除
spawn:特殊扩展
可用特殊扩展字符 含义
%c 客户机信息 (user[@host](/u/host))
%s 服务器信息 (server[@host](/u/host))
%h 客户机主机名 ( 无主机名则使用 IP) 需要 /usr/sbin/safe_finger
%p 服务器进程信息 (PID)
%d 进程名称
%a 客户机 IP
%n 客户机、服务器主机名 ( 不使用 IP)
twist:特殊扩展(适用于telnet、rsync)

以指定的命令执行,执行后立即结束该连接。需在spawn扩展之后使用。

 

b)       SELinux DAC(Discretionary Access Control)

    自主访问控制,使用ACL(访问控制列表)提供访问控制机制。

MAC(Mandatory Access Control)

    强制性读取控制,在MAC架构下,为每个对象设置“安全关系(Security Context)”,用户在访问时必须得到SELinux授权。

RBAC(Role-based Access Control)

    角色基础读取控制,以用户所隶属的角色进行读取权限判断。

MLS(Multi-Level Security)

    多层次安全,以数据内容的敏感性或机密性定义不同等级。以机密等级决定进程对该内容的读取能力。

SELinux(Security-Enhanced Linux)

    美国国家安全局开发,在linux内核中执行,提供MAC能力的子系统。SELinux以“类型强制性(Type Enforcement)”读取控制机制为主,融合RBAC/MLS/MCS"多重类别安全性(Mulit-Category Security)"三种MAC读取控制机制。

SELinux元素

用户(USER)

system_u 系统账号类型
user_u 普通用户类型
root root 用户类型
角色(ROLE)
user_r 其它或不分类的用户角色
staff_r 内部用户角色
secadm_r 安全管理角色
object_r 文件、设备或其它无法分类的对象
类型(TYPE)
unconfined_t 未设置的类型
default_t 默认类型
mnt_t 挂载点类型
boot_t 启动文件类型
bin_t 二进制执行文件类型
sbin_t 系统管理工具类型
device_t 设备文件类型
lib_t 链接库类型
var_t /var 目录文件类型
usr_t /usr 目录类型
etc_t /etc 目录类型
tty_device_t 登录终端类型
su_exec_t 具备 su 功能的脚本类型
shadow_t 密码数据文件类型
home_t 用户家目录类型
httpd_sys_content_t httpd 主页类型
samba_share_t samba 共享文件类型
public_content_t 公共内容类型,如 ftp 、 nfs 等
named_t named 区域文件类型
层级

    安全等级(Security Level),已定义安全等级从s0~s15

分类

    分类(Category)代表隶属的分类,已定义分类从c0~c1023

    层级和分类在trageted或strict安全原则下自动隐藏,只有在mls安全原则下才能显示。

SELinux配置

    通过setup命令进行设置

通过配置文件进行设置

    #vim /etc/selinux/config

        SELINUX=enforcing/permissive/disabled(强制/静默/禁用)

        SELINUXTYPE=trageted/strict/mls(常见网络服务保护/RBAC机制保护/MLS机制保护)

通过命令行进行

    #setenforce 0                       //设置为permissive状态

    #setenforce 1                       //设置为enforcing状态

查看当前SELinux设置状态

    #getenforce

查看、修改文件/目录SELinux标签

    #ls -Z file1

    #ls -Zd /var/www/html

    #chcon -u system_u file1

    #chcon -r object_r file11

    #chcon -t file_t file1

    #chcon --reference -R /var/www/html /redhat    //参照模板设置目标标签

    #restorcon -R /var/www/html                    //恢复文件SELinux标签

查看、修改进程的SELinux布尔值

    布尔值是SELinux预先设定的一组策略,可以控制进程的一些访问行为

    #getsebool -a | grep ftp

    #setsebool -P ftp_home_dir on

c)       FTP服务 FTP主动模式

当FTP服务器工作在主动模式下,客户端使用本地随机高端口(>1024端口)向服务器的21端口发起控制连接,当服务器响应以后,FTP服务器使用20端口向客户端的随机高端口(>1024)传输数据。客户端和服务器会在控制连接中协商数据传输用高端口。

FTP被动模式

    当FTP服务器工作在被动模式下,客户端使用本地随机高端口(>1024端口)向服务器的21端口发起控制连接,当服务器响应后,FTP服务器会通知客户端数据传输用的高端口信息。

    如下所示,服务器返回192.168.0.254,124,218

    表示:服务器IP:192.168.0.254,使用高端口是:124*256+218=31962

![][5]

    注意:Linux客户端命令ftp使用被动模式连接服务器,而Linux客户端命令lftp、windows客户端和[ftp 127.0.01][6](服务器上直接连接自身)都使用主动模式。

安装

#yum -y install vsftpd

配置

#vim /etc/vsftpd/vsftpd.conf

    anon_enable=YES                 //匿名用户登录权

    local_enable=YES                //本地用户登录权

    write_enable=YES                //本地用户上传权

    local_umask=022                 //本地用户上传数据的umask

    anon_umask=077                  //匿名用户上传数据的umask

    anon_upload_enable=NO           //匿名用户上传数据权

    anon_mkdir_write_enable=NO      //匿名用户建立目录权

    idle_session_timeout=300        //命令控制连接超时

    date_connection_timeout=120     //数据连接超时

    content_from_port_20=YES        //在主动模式下,是否启用20端口进行数据传输,如果设置NO,表示禁用主动模式,对windows客户端有效

    listen=YES                      //独立进程启动

    userlist_enable=YES             //是否启用/etc/vsftpd/user_list

    userlist_deny=YES               //拒绝/etc/vsftpd/user_list内用户登录

    max_per_ip=3                    //每ip最大连接数(下载进程)

    local_max_rate=150000           //本地用户下载速率B/s

    anon_max_rate=70000             //匿名用户下载速率B/s

    pasv_enable=YES(NO)             //启动被动连接

    accept_timeout=600              //被动连接连接超时

    connect_timeout=600             //主动连接连接超时

    max_clients=X                   //最大客户端数X

    use_localtime=YES               //使用本地时间

pasv_max_port=20000             //被动模式下数据传输最高端口号

    pasv_min_port=19990             //被动模式下数据传输最低端口号

#service vsftpd start

#chkconfig vsftpd on

#getsebool -a | grep ftp

#setsebool -P ftp_home_dir 1

拒绝指定用户访问ftp服务

#echo ‘kevin’ >> /etc/vsftpd/ftpusers

只允许指定用户访问ftp服务

#echo ‘todd’ >> /etc/vsftpd/user_list

#vim /etc/vsftpd/vsftpd.conf

    userlist_enable=YES

    userlist_deny=NO

#service vsftpd restart

禁止指定用户改变目录

#vim /etc/vsftpd/vsftpd.conf

    chroot_list_enable=YES

    chroot_list_file=/etc/vsftpd/chroot_list

#echo ‘mandy’ >> /etc/vsftpd/chroot_list

#service vsftpd restart

允许匿名用户上传数据

匿名用户家目录是/var/ftp,这个目录绝不能设置777权限

#mkdir /var/ftp/incoming

#chown ftp.ftp /var/ftp/incoming

#chmod 700 /var/ftp/incoming

#vim /etc/vsftpd/vsftpd.conf

    anon_enable=YES

    anon_upload_enable=YES

#service vsftpd restart

#chcon -t public_content_rw_t /var/ftp/incoming     //RHEL6必须改

#setsebool -P allow_ftpd_anon_write 1               //RHEL6必须改

使用TCP Wrappers限制用户访问地址

#ldd $(whereis vsftpd) | grep ‘libwrap.so

#vim /etc/hosts.allow

    vsftpd:192.168.0.0/255.255.255.0

#vim /etc/hosts.deny

    vsftpd:192.168.1.0/255.255.255.0

FTP代码表

110 重新启动标记应答

120 服务在多久时间内ready

125 数据链路埠开启,准备传送

150 文件状态正常,开启数据连接端口

200 命令执行成功

202 命令执行失败

211 系统状态或是系统求助响应

212 目录的状态

213 文件的状态

214 求助的讯息

215 名称系统类型

220 新的联机服务ready

221 服务的控制连接埠关闭,可以注销

225 数据连结开启,但无传输动作

226 关闭数据连接端口,请求的文件操作成功

227 进入passive mode

230 使用者登入

250 请求的文件操作完成

257 显示目前的路径名称

331 用户名称正确,需要密码

332 登入时需要账号信息

350 请求的操作需要进一部的命令

421 无法提供服务,关闭控制连结

425 无法开启数据链路

426 关闭联机,终止传输

450 请求的操作未执行

451 命令终止:有本地的错误

452 未执行命令:磁盘空间不足

500 格式错误,无法识别命令

501 参数语法错误

502 命令执行失败

503 命令顺序错误

504 命令所接的参数不正确

530 未登入

532 储存文件需要账户登入

550 未执行请求的操作

551 请求的命令终止,类型未知

552 请求的文件终止,储存位溢出

553 未执行请求的的命令,名称不正确

 

d)       SAMBA服务 在windows系统间共享数据的协议叫CIFS(Common Internet File System),CIFS最基本的应用就是网上邻居(Windows Server 2008以后改称网络位置)。而在UNIX/Linux系统间共享数据的协议叫NFS(Network File System)。这二种不同的协议间是互不通讯的。在1991年,Andrew Tridgwell利用软件逆向工程破解了NFS和CIFS的数据包结构,基于找到的数据包结构开发出了SAMBA(Server Message Block服务信息块),从而实现了在windows和linux之间的文件共享。SAMBA协议工作时,需要NETBIOS(Network Basic INPUT/OUTPUT System)支持,而windows的CIFS也需要NETBIOS支持。NETBIOS协议是不能跨网络通讯的,要跨网络通讯必须使用NETBIOS over TCP/IP。SAMBA协议使用UDP137/138、TCP139/445端口进行通讯,其中udp137/138是netBIOS协议使用,tcp139供smb使用,而tcp445供CIFS使用。

安装

#yum -y install samba

配置

#vim /etc/samba/smb.conf

    [global]                                //全局设置

        workgroup = mygroup

        service string = sabma server %v

        ;netbios name = MYSERVER

        ;log file = /var/log/samba/%m.log   //以客户端netbios名作日志名

        ;max log size = 50

        security = user                     //{share/user/server/domain/ads}

    [homes]                                 //用户家目录共享

        comment = Home Directory

        browseable = no                     //该共享隐藏

        writable = yes                      //共享权限允许任何人写入

        valid users = %S                    //%S任何可登录用户

%S 任何可登录用户
%m 客户端的 NETBIOS 名称
%M 客户端的 FQDN 名称
%L SAMBA 主机的 NETBIOS 名称
%H 用户的默认目录
%U 目前登录用户的用户名
%g 目前登录用户隶属的群组
%h SAMBA 主机的 FQDN 名称
%I 客户端的 IP
%T 目前的日期和时间
    [printers]

        comment = All Prints

        path = /var/spool/samba             //打印队列

        browseable = no

        guest ok = yes

        writable = no

        printable = yes

    [sharefile]                             //用户自定义共享

        comment = Samba Share Test          //共享说明

        path = /sharefile                   //共享目录路径

        browseable = no/yes                 //是否隐藏共享(no:隐藏)

        writeable = no/yes                  //共享权限是否任何人可写(no:不允许)

        ;write list = kevin, @student       //共享权限可写列表(@表示一个组)

        ;hosts allow = 192.168.0.0/24 192.168.2.0/24  //允许访问地址

        ;hosts deny = 192.168.1.0/24                  //拒绝访问地址

    #mkdir /sharefile

    #chown kevin.student /sharefile

    #chmod 1770 /sharefile

    #testparm

#service smb start

    #chkconfig smb on

    #getsebool -a | grep sabma

    #setsebool -P samba_enable_home_dirs 1

    #chcon -R samba_share_t /sharefile

    #smbpasswd -a kevin                             //添加samba用户

        smbpasswd -x kevin                          //删除samba用户

        smbpasswd -e kevin                          //启用samba用户

        smbpasswd -d kevin                          //禁用samba用户

        smbpasswd kevin                             //修改samba用户密码

    测试samba

    #smbclient -L //192.168.0.X -N                  //使用匿名账号查看共享信息

#smbclient -L //192.168.0.X -U kevin            //查看samba共享信息

    #smbclient //192.168.0.X/sharefile -U kevin     //访问samba共享

    #mount //192.168.0.X/sharefile /mnt -o username kevin   //挂载samba共享

批量添加samba用户

#vim /etc/samba/smb.conf

    #注释如下行

    ; passdb backend = tdbsam

#vim /usr/bin/mksmbpasswd.sh                    //将脚本改成如下格式

   

![][7]

#vim /bin/addsmbusers.sh

    #!/bin/bash

    #将普通用户添加到samba文件中

    awk -F ':' '$3>=500 && $3<65534 {print $i}' /etc/passwd | mksmbpasswd.sh > /etc/samba/smbpasswd

    #将指定gid的用户添加到samba文件中

    #awk -F ':' '$4==500 {print $i}' /etc/passwd | mksmbpasswd.sh > /etc/samba/smbpasswd

    for name in $(cat -d: -f1 /etc/samba/smbpasswd)

    do

        echo -e 'redhat\nredhat' | smbpasswd -s $name &> /dev/null

done

客户端自动挂载samba共享

#vim /etc/fstab

    //192.168.0.X/share   /mnt  cifs    defaults,user=kevin%123 0 0

user=kevin%123(samba用户名%密码)

#mount -a

![][8]

 

e)       NTP(网络时间服务) NTP(Network Time Protocol,网络时间协议)是用来使计算机系统时间与NTP服务器或时钟源(如石英钟、GPS等)同步化的一种协议,它可以提供高精度的网络时间校正。通常与标准时间的偏差在局域网上可小于1毫秒,在广域网上可小于几十毫秒。

NTP只是一个协议,执行NTP需要专门的服务器和客户端软件。NTP服务器(也称网络时间服务器)可提供网络校时服务,当客户端发出请求,它就将自己的时间或标准时间源的时间发送给客户端;而NTP客户端是用来将客户端主机的时钟精确地同步到NTP服务器时钟。

NTP要提供准确时间,首先要有准确而可靠的时间源,这一时间应该是全球标准时间(UTC)。NTP可以通过原子钟、天文台、卫星和Internet等多种方式来获得UTC。在获得了准确的时钟源后,要将时间按NTP服务器的层次等级传播。

网络时钟服务的工作原理

当NTP服务器获得了标准时间源的时间后,NTP客户端又是如何与NTP服务器进行时间同步的呢?通常情况下,时间同步是按以下步骤进行的。

① NTP客户端向NTP服务器发出一个时间请求包(UDP包),其中包含了该包离开客户端时的时间戳。

② 当服务器接收到该包时,填入包到达时的时间戳、包离开时的时间戳等信息,然后立即把包返回给客户端。

③ 客户端在接收到响应包时再填入包返回时的时间戳,然后利用这些时间参数计算出两个关键参数,即包往返的延迟、客户端与服务器之间的时钟偏移。

④ 客户端使用时钟偏移来调整本地时钟,以使其时间与服务器时间一致。

NTP服务器配置

    NTP服务器在RHEL5.1的服务器中配置,需要DNS反向解析支持,也就是说,需要NTP服务器同时是DNS服务器。在RHEL5.4及以后的操作系统中,可以没有DNS服务,使用hosts文件亦可。

#vim /etc/ntp.conf

restrict default nomodify notrap noquery

restrict 192.168.0.253      //允许192.168.0.253不受限访问和调整时间

restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap

                            //允许192.168.0.0/24访问

ignore:禁止所有的NTP请求包进入。

nomodify:禁止其他计算机更改本机NTP服务的设置,但可以通过本NTP服务器进行网络校时。

notrust:禁止所有未通过认证的NTP包进入。

noquery:禁止其他计算机查询本机NTP服务的状态。

notrap:禁止trap事件的远程时间登录

server 0.rhel.pool.ntp.org  //与redhat的时钟服务器同步

server 1.rhel.pool.ntp.org

server 2.rhel.pool.ntp.org

server 127.127.1.0          //保留内部时钟源

fudge  127.127.1.0 stratum 10

peer 192.168.0.253          //同级别的时钟服务器

#vim /etc/sysconfig/ntpd

    SYNC_HWCLOCK=yes            //同时修正本地BIOS时钟

#service ntpd restart

#ntpstat                        //查看本服务器和上级时钟服务器的同步情况

NTP客户端配置

NTP客户端需要能DNS反向解析NTP服务器,不然NTP客户端无法正常启动。

#vim /etc/sysconfig/ntpd

    SYNC_HCLOCK=yes             //同时修正本地BIOS时钟

#ntpdate                        //刷新客户端时钟

#ntpq -p                        //查看与时钟服务器的同步情况

remote           refid    st  t  when poll reach   delay  offset  jitter

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

server1.example LOCAL(0)  11  u  370  1024  377    2.602  2372135 1515905

remote:表示上层NTP服务器的IP地址或域名,前面带有符号“+”,则表示该上层NTP服务器是本机的NTP服务器当前同步用的时间源;“*”表示该上层NTP服务器是本机的NTP服务器当前同步用的候选时间源。

refid:表示该上层NTP服务器同步用的时间源,如GPS(全球卫星定位服务)、ACTS(计算机自动化报时服务)等。

st:表示该上层NTP服务器的层号,若为16,则表示本机的NTP服务器无法与该上层NTP服务器进行同步。

t:类型。u代表上级时钟服务器,l代表本地时钟服务器

when:几秒前做过同步

poll:下次同步在几秒后

reach:已经向上级NTP服务器要求更新的次数

delay:表示与该上层NTP服务器之间联系所花费的时间,单位为毫秒。

offset:表示本机的NTP服务器与该上层NTP服务器之间的时间偏移,单位为毫秒。

jitter:与BIOS的时间差,单位为毫秒

[5]: file://C:/Users/ADMINI~1/AppData/Local/Temp/msohtml1/01/clip_image004.jpg [6]: ftp://ftp%20127.0.01/ [7]: file://C:/Users/ADMINI~1/AppData/Local/Temp/msohtml1/01/clip_image006.jpg [8]: file://C:/Users/ADMINI~1/AppData/Local/Temp/msohtml1/01/clip_image008.gif

暂无评论

登录后可以进行评论。没有账号?马上注册