Chinaunix首页 | 论坛 | 博客
  • 博客访问: 68193
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 15
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-29 12:33
文章分类

全部博文(31)

文章存档

2017年(1)

2015年(1)

2014年(2)

2013年(2)

2011年(1)

2010年(6)

2009年(18)

我的朋友

分类: 网络与安全

2013-12-06 11:12:27


公司研发的软件产品、企业信息的核心数据,当然不希望员工随意散布,但如果太限制员工的网络自由会引起大家的反感。本文向大家介绍一种权宜的方法,允许员工网络自由的同时保护公司的代码和数据。

说明:以下步骤,非特殊说明所有操作都需root用户执行。

第一步:限制服务器端口。

设置防火墙,只公开必须开启服务的端口,如果是开发机。只开启sshd(22)和ftp(20,21)端口。
iptabales配置示例如下:

[root@tp ~]# iptables -P INPUT DROP #默认禁止一切通信传入
[root@tp ~]# iptables -P OUTPUT DROP #默认禁止一切通信传出

允许sshd和ftp服务。

[root@vmleman ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
[root@vmleman ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
[root@vmleman ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
[root@vmleman ~]# iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT
[root@vmleman ~]# iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
[root@vmleman ~]# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

允许loopback(可用于本地访问来做软件测试)

[root@vmleman ~]# iptables -A INPUT -i lo -p all -j ACCEPT
[root@vmleman ~]# iptables -A OUTPUT -o lo -p all -j ACCEPT

第二步:禁用系统sftp功能:

在/etc/ssh/sshd_config里面找到下面一行并将其注释。

#Subsystem      sftp    /usr/libexec/openssh/sftp-server 

至此,用户无法通过sftp传输文件。此配置重启后才生效。

第三步:配置ftp文件传出策略:

任何系统都需要和外界沟通,完全独立的系统没有意义,这一步将实现这个特殊通道,允许特殊文件(如编译后的可执行文件)传出。 以vsftpd(配置文件为:/etc/vsftp/vsftpd.conf)为例,说明ftp服务器访问策略配置。
1)修改vsftpd配置文件如下:

# local_enable=YES  (禁止本地用户用户登入ftp服务器)  
anonymous_enable=YES (允许匿名用户访问,vsftpd默认为允许) 

2)确保匿名用户主目录及其子目录对普通用户没有写权限。
现在匿名用户所在目录(/var/ftp/)任何人都可访问,相当于外部环境,因此不允许一般用户写入,否则数据将会传出。

[rhel5@vmleman ftp]$ ls -ld `find /var/ftp/`
drwxr-xr-x 3 root root 4096 2011-09-08 /var/ftp/
drwxr-xr-x 2 root root 4096 2007-12-13 /var/ftp/pub

CentOS系列默认就是没有写权限的,基本不需要修改。

第四步:编写传出文件检查脚本。

这个脚本主要用来检查传输的文件进行检查。这个脚本设置为只有root有权限执行,其他用户没有任何权限。

[root@vmleman ~]# ls -l /root/bin
总计 8
-rwx------ 1 root root 575 09-04 15:04 chkcp.sh

这里的chkcp.sh是一个示例的shell脚本(你可以使用任何语言,或者是C),检查只允许可执行文件才可以传出来:

#/bin/bash
export LANG=en_US
if [ $# != 2 ]; then
  echo "usage: chkcp.sh  ";
  exit
fi
filetype=`file ${1} `  #得到文件类型
  allow=`echo ${filetype%:.*} |grep "executable.*object module"`  #检查是否为AIX的XCOFF可执行文件
if [ -z "$allow" ]; then
allow=`echo ${filetype%:.*} |grep ELF`  #检查是否为Linux的ELF可执行文件
  if [ -z "$allow" ]; then
    echo deny ${1}  #检查失败直接退出
    exit;
  fi
fi
cp -f ${1} ${2}  #检查通过后实现拷贝传出
if [ "$?" == "0" ]; then
  echo "${1} copyed."
fi 

第五步:设置sudo用户。

由于之前匿名用户主目录(/var/ftp/)对普通用户不可写,所以普通用户不能直接将文件传输。
然而可以利用sudo命令调用第三步的root用户的传出脚本(chkcp.sh),这样就可以将文件拷贝出来,但文件被拷贝出来之前必须经过我们预设脚本的检查,不符合要求的文件不允许传出来。在一定程度上实现了对敏感数据的外泄的防护。规则配置如下:
1)添加sudoers文件的写权限:

[root@vmleman bin]# chmod u+w /etc/sudoers

2)在文件末尾添加如下内容:

User_Alias CHKCPOUT = rhel5, sips
CHKCPOUT       ALL=NOPASSWD: /root/bin/chkcp.sh 

其中rhel5和sips是允许调用chkcp.sh传出文件的用户名列表,你可以自己修改。没有添加的用户不能调用chkcp.sh,所以无法传出任何文件。
3)恢复权限:

[root@vmleman ~]# chmod u-w /etc/sudoers

4)验证结果: 切换到刚刚sudo配置的普通用户(如rhel5)下,运行sudo -l查看权限:

[rhel5@vmleman ~]$ sudo -l
User rhel5 may run the following commands on this host:
(root) NOPASSWD: /root/bin/chkcp.sh

此时我们可以用chkcp.sh来拷贝文件了。

[rhel5@vmleman ~]$ /root/bin/chkcp.sh a.out rhel5.a.out
-bash: /root/bin/chkcp.sh: 权限不够
[rhel5@vmleman ~]$ sudo /root/bin/chkcp.sh a.out rhel5.a.out
a.out copyed.
[rhel5@vmleman ~]$ sudo /root/bin/chkcp.sh a.c rhel5.a.c
deny a.c
[rhel5@vmleman ~]$ ls -l /var/ftp/pub/
总计 24
-rwxr-xr-x 1 root root 9860 09-04 15:30 rhel5.a.out
drwxr-xr-x 2 root root 4096 09-04 14:15 ss

检查发现只有可执行的a.out文件被拷贝出,源代码文件被拒绝。

第六步:配置ftp文件传入策略:

有时候,我们也需要将外部文件传入到服务器上。 这时可以不用做文件类型检查,不过也需要配置一个严密的安全通道。
1)在匿名用户主目录下创建upload目录,属主改为ftp

[root@vmleman ~]# mkdir /var/ftp/upload
[root@vmleman ~]# chown ftp /var/ftp/upload/

2)配置vsftpd.conf,添加匿名用户权限

anon_upload_enable=YES  
anon_mkdir_write_enable=YES  
anon_other_write_enable=YES  
anon_umask=022 

设置umask是为了防止创建其他用户可写的目录,产生安全漏洞。

这样,任何人都可以用ftp将文件放到upload目录下,登入到系统后,再从这个目录下拷贝内容即可。

最后一步:告诉你的员工,在ftp文件传输时使用port模式

到目前为止,基本上可以防止敏感文件的外泄。但是还有一个问题,一般情况下,用户使用SecureCRT或者Putty等其他软件登入服务器,用户可以通过cat命令把文件打印到屏幕,然后复制其中的内容。如果用户将SecureCRT的屏幕缓存设置足够大的话,就可以一次复制很多文件内容。要想解决这个问题,需要用到一个私有的SSH客户端41putty,它可以防止用户大量复制屏幕内容。

关于41putty的使用方法,请参考


原文出自:

阅读(1922) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~