RHCE课程-RH253Linux服务器架设笔记一-VSFTPD的配置(2)

版权声明:原创作品,谢绝转载!否则将追究法律责任。
ftp服务器架设进阶设置
上季我们学习了vsftpd基于匿名用户的下载和上传功能,但是匿名始终是不安全的,所以今天我们就会讲到基于用户的访问和上传
要开启基于用户的访问控制,需要注意两个方面
1、配置文件的修改
2、selinux的修改
 
接着上季我们的配置,现在我们来修改配置文件
vim  /etc/vsftpd/vsftpd.conf 
RHCE课程-RH253Linux服务器架设笔记一-VSFTPD的配置(2)_第1张图片
修改12行,是否允许匿名登陆改成NO
image
注释掉27和31行,意思是不允许匿名用户上传文件和目录
image
OK后,保存退出
第二步,修改selinux了哈
今天我们就不介绍图形界面了,直接使用命令来设置selinux
使用getsebool 找出关于ftp的selinux命令
getsebool -a | grep ftp
image
然后修改selinux,允许用户在家目录写入数据
setsebool -P allow_ftpd_anon_write off
setsebool -P ftp_home_dir .
image
第三步、创建虚拟用户
先创建一个用户,然后修改用户的登陆shell为nologin,让用户不能登陆系统,只能使用ftp之内的服务,然后使用passwd  redhat修改密码 
image
三步完成以后,就可以重新启动vsftpd服务,然后测试
image 
我们先使用win来测试,打开资源管理器
image
现在提示输入用户和密码
image
登陆成功
image 
现在测试能否写入数据,测试成功
image 
现在ftp上去是可以删除的,在什么地方改,让他只能上传,不能删除呢?
image
这个问题不错,我们可以实现
但是如果自己上传了不能删除,那么谁来删除文件呢?
image
难道每次让服务器管理员来帮你删?好吧,我们来实现这个功能
把local umask 修改成222
image
然后保存,重新启动服务器
image
现在我们来测试,建立一个test vsftpd unmask222文件夹
image
我们删除他试试
image 
删除刚才我们建立的目录vsftpd文件夹和UNIXCcode.rar文件试试
image
被成功删除了
image 
image 
就是本地用户上传文件的权限掩码,权限掩码是基础中文件权限的知识,参考 RHCE课程-RH033Linux基础笔记八-文件强制位冒险位、ACL访问控制列表
一般我们都不这样设置,自己的目录自己有完全控制权限是正常,只是在一些公共目录里,我们需要设置强制位和冒险位,让其他用户不能 删除和更改自己的文件
好了,下面我们使用lftp测试 
像上季那样 lftp 192.168.0.188登陆会失败
image 
正确的登陆方法是 lftp [email protected]
image
现在大家使用pwd试试,是不是看见自己在 /home/redhat目录下啊?
image
现在我们cd到/etc 下去试试 ,成功切换
image
现在我们下载系统的passwd 文件试试,下载成功,我们去看看
image
这样系统有多少用户都暴露在我们面前了
image
IE方式redhat登录的ftp界面
image
而且还可以下载shadow密码文件,进行破解。这样是不是很不安全啊,而且黑客还可以去看你服务器的配置文件,和你系统里的一些机密文件
下面我们就要使用chroot功能,修改配置文件,取消94行和96行的注释
意思是,开启chroot_list功能,而且chroot_list文件就在 /etc/vsftpd/目录下面
image
保存退出
chroot list默认是不存在的,需要我们手动建立,把redhat这个用户加到这个文件中,重新启动vsftpd服务
image
现在我们再来测试,现在使用pwd命令就看见自己已经在/下了
image
但是ls 发现这并不是真的/根目录
这里就是用户的家目录,这里没有etc目录,所以切换到etc就会失败
image
还有一点,提醒大家,匿名用户登陆,默认是choot了的
这个就是chroot_list的功能,大家明白了吗?这样就大大提高了我们系统的安全性
OK,下面我们把系统所有用户都加到chroot文件里
如果是很多用户每个都要加入chroot_list吗?可以使用cut命令
cut  -d  :  -f  1  /etc/passwd  >> chroot_list
cut命令是切去某一列,-d是每一列的分隔符,-f 是切取第几列,然后重定向到chroot文件
image
这样所有用户就进去了
我们现在测试的环境是RHEL5.1,防火墙默认是accept,selinux是强制
下面我们测试ftpusers 文件的功能,我们先看看ftpusers这个文件的内容
image
这里面都是些系统用户,ftpusers的功能是,阻止这个文件中的用户登陆
我们把redhat用户加进去,然后重启vsftpd服务
image
现在我们使用redhat登录试试
image
我输入了正确的密码,但是还是登陆失败了
OK,现在我们取消redhat用户的限制,让他可以登陆
image
又可以成功登陆了
image
如果系统有很多用户,不能使用ftp,我们要一个一个添加到这个文件里面,是不是很麻烦啊?
还有,系统添加一个用户也默认有ftp的登陆权限,是不是也不安全?
所以我们要制定更严格的ftp用户策略,我们将通过下面的配置,使只有在user_list文件中的用户才能登录系统
修改配置文件: vim /etc/vsftpd/vsftpd.conf 
文件最后添加两行,修改成我图片中的样子
image 
然后保存退出,重启vsftpd服务
image
使用刚才的用户测试下看能不能登陆,现在redhat不能登录了哈~
image
能登陆就有问题了,应该是不能登陆哈,然后把redhat用户加入到user_list文件中,重新启动服务,这样就可以登陆了
image
可以登陆了哈~
image
大家测试吧,注意检查ftpusers 这个文件里,不能有测试的用户存在,不然对测试结果要出现误导哈~
现在把ftpusers里的root用户删除了,然后加到user_list中
image
root应该都可以登陆的
image
现在就是访问控制了,使用iptables来控制ftp,只允许本地网络使用自己的ftp服务器
我们不测试本地网络,我们测试只允许某个IP地址访问我们的ftp服务器,这样好测试点
iptables -L 查看filter表的内容
由于我们现在不用NAT,我们就先不讲,只学filter,包过滤
image
iptables分两个表:filter和nat
filter表里面有3个链:
INPUT  chain
FORWARD chain
output chain
一般服务器上就用input连,来控制进入服务器的流量和包
下面我们写一个规则:禁止一个IP地址访问
这个IP地址就用你的服务器的IP地址
给INPUT添加一条规则内容
image
匹配源,也就是来自 192.168.0.188这个IP
image 
接着就是匹配的协议和端口,我用的是tcp的21端口,也就是ftp服务器的命令连接端口
image
最后就是匹配这个规则的动作 -j REJECT 拒绝哈~
完整的命令就是这样:
在INPUT连中添加一条规则,匹配来自源为192.168.0.254的tcp包,连接自己的21号端口,匹配了的包就被REJECT,拒绝
iptables -A INPUT -s 192.168.0.188 -p tcp --dport 21 -j REJECT
image
查看,这条规则就写进入了,可以使用iptables -nL 查看,n参数的意思是不解析,这样看更直观,速度更快
大家看看他们的差别
image
修改规则后,保存,切记要保存,不然你的配置重新启动就会丢失
service iptables save
service iptables restart
image
现在我们用被拒绝的IP地址来测试还能不能够访问
image
登录失败了,访问被禁止了
OK,我们删除这条规则
删除INPUT的第五条规则: iptables -D INPUT 5
image
刚才的规则就被删除了,记住:保存
image
再测试
image
成功哈~
下面我们使用tcp_wrapper 来控制vsftpd
解释下tcp_wrapper
tcp_wrapper 就是tcp封装,是运行在介于防火墙和内部服务间的一个模块
只要支持tcp封装的服务,我们都可以使用tcp封装来控制他
那这么查看一个服务是不是支持tcp_wrapper呢?
我给大家介绍两个命令
只有运行这两个命令中其中一个有回显,就证明这个服务支持tcp封装,我们就可以使用tcp封装来控制这个服务的访问
这是第一个命令:
ldd `which vsftpd` | grep libwrap
image
这个是第二个命令:
strings `which vsftpd` | grep host
image
大家运行试试, which vsftpd 是 !旁边那个符号,意思是执行里面的命令取值,不是单引号,单引号的意思是不解释引号里面的内容
怎么使用tcp_wrapper呢,这就需要两个配置文件了
/etc/hosts.deny 
/etc/hosts.allow
要拒绝的IP地址我们写入hosts.deny里面,写进去后保存退出就生效,不需要重启之类的操作
image
这样192.168.0.186就被禁止了
image
tcp_wrapper和iptables,我们会跟着课程慢慢深入的介绍
好了,今天的课程就到这里。谢谢大家
#######################################
本文出自 “ 王乾De技术Blog[爱生活,爱学习]” 博客,谢绝转载!
本文出自 51CTO.COM技术博客


上一篇 [零基础学JAVA]Java SE应用部分-32.Java网络编程  下一篇 [零基础学JAVA]Java SE应用部分-33.Java数据库..

类别:Linux/Unix ┆ 技术圈( 1) ┆ 阅读( 3158) ┆ 评论( 16) ┆ 推送到技术圈 ┆ 返回首页  


     相关文章
     文章评论
 
[1楼]        走在右边
2009-03-06 17:32:57
怎么没有人拍砖呢,写的很详细吗,半年年有这好文章,我就不用愁了,嘻嘻

博主回复:
呵呵~~
2009-03-06 20:23:21
  短消息通知评论者

[2楼]        184228805
2009-03-08 01:31:26
我正在学LINUX

就指望博主了

支持下
短消息通知评论者

[3楼]        dgpl_pan
2009-03-08 01:38:29
呵呵,等过个半个月俺的一门考完了,就长住这里了....
短消息通知评论者

[4楼]       [匿名]51CTO游客
2009-03-08 10:35:21
呵呵,写的很好,我 也跟2楼一样,正在学LINUX,希望博主多帮助下。另外博主的 QQ怎么加不了阿。
短消息通知评论者

[5楼]        小松
2009-03-09 09:40:35
好文章,向redking学习!
短消息通知评论者

[6楼]        bell324
2009-03-09 15:47:58
今天我下班 之前 必须 看完啊

要不 我就不回家了啊

setenforce 0 这个命令是什么意思啊 麻烦楼主解释啊

博主回复:
setenforce 1 设置SELinux 成为enforcing模式
setenforce 0 设置SELinux 成为permissive模式
重启后失效
如果要永久关闭,可以修改/etc/sysconfig/selinux文件:
SELINUX=enforcing改为SELINUX=disabled
在disabled模式下,SELinux内核机制是完全关闭了的,只有系统启动时策略载入前系统才会处于disabled模式,这个模式和permissive模式有所不同,permissive模式有SELinux内核特征操作,但不会拒绝任何访问,只是进行审核,在disabled模式下,SELinux将不会有任何动作,只有在极端环境下才使用这个模式,例如,当策略错误阻止你登陆系统时,即使在permissive模式下也有可能发生这种事情,或我们不想使用SELinux时。
2009-03-09 19:49:55
  短消息通知评论者

[7楼]        hanling
2009-03-10 15:10:10
不错啊,我今天才看到这个。牛啊。
看好了,不错,两个vsftpd加起来,讲的很深,而且很清楚。
牛。
短消息通知评论者

[8楼]        panghu1986
2009-03-13 22:23:51
收藏了,不错,讲的很详细,!
短消息通知评论者

[9楼]        awaking
2009-04-05 16:48:34
受益了,感谢楼主分享:)
短消息通知评论者

[10楼]        tianqiuji
2009-04-09 07:48:20
呵呵,收藏了,讲的很详细。,学习了。
短消息通知评论者

[11楼]        bell324
2009-04-27 16:39:11
我看了 好多遍了
短消息通知评论者

[12楼]        请教
2009-07-11 16:39:47
恩,不错,很详细
今天我坐了下ftp,我把匿名禁用,并加了一条chroot_local_user=YES,然后我把用户放进/etc/vsftpd/user_list里面,效果出来了,用windows可以访问,但后面我把ftpd_banner改了一下,没保存就退出了,但用windows就访问不了了!!说没权限,怎么回事啊??
短消息通知评论者

[13楼]       [匿名]51CTO游客
2009-11-12 13:16:52
i think guest ftp is better and saftty

configuration:
vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vftp
virtual_use_privs=YES
:x
useradd -s /sbin/nologin vftp
id vftp


vim /etc/vsftpd/users.txt
tom
123
job
123
:x
rpm -qa | grep db4-utils
db_load -T -t hash -f /etc/vsftpd/users.txt users.db

vim /etc/pam.d/vsftpd
注释所有pam模块手动添加如下pam
auth required pam_userdb.so db=/etc/vsftpd/users
account required pam_userdb.so db=/etc/vsftpd/users
:x

/etc/init.d/vsftpd restart

win xp clietnt :
cmd ----ftp
open 192.168.3.1
tom
123
user job
123

and i think the filezilla soft is a better ftp soft than lftp


短消息通知评论者

[14楼]       [匿名]51CTO游客
2009-11-12 13:21:29
there are three modes in vsftpd
anonymous(ftp) mode
local_user mode
virtual_user mode (guest_user mode)

and i think the last mode is the best and safety

and i think pasv is a good mode
vim /etc/vstpd/vsftpd.conf
local_max_rate=50000
anon_max_rate-10000
max_clients=100
max_per_ip=10
pasv_min_port=65400
pasv_max_port=65500

iptables -t filter -A INPUT -p tcp --dport 65400:65500 -j ACCEPT
iptables-save >/etc/sysconfig/iptables
/etc/init.d/iptables restart
iptables -t filter -Lnvz
短消息通知评论者

[15楼]       [匿名]51CTO游客
2009-11-12 13:26:29
the server soft on linux is always collisions with the linux's kernel's DAC mode
it is very boring
and if you know this key poiont --i think it is sample to setup every servives such as samba vsftpd and so on
短消息通知评论者

[16楼]       [匿名]51CTO游客
2009-11-23 23:05:06
yum install vsftpd
cd /etc/vsftpd/vsfptd.conf
pasv_min_port=65510
pasv_max_port=65530
local_max_rate=40000
anon_max_rate=10000
max_clients=100
max_per_ip=10
guest_enable=yes
guest_username=redhat
useradd redhat
echo password | passwd --stdin redhat
vim /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/users
account required pam_userdb.so db=/etc/vsftpd/users

rpm -qa |grep db4-utils
vim users.txt
tom
123
job
123
db_load -T -t hash -f /etc/vsftpd/users.txt users.db
chmod 644 users.db
chmod o+x /home/redhat

/etc/init.d/vsftpd restart
chkconfig --level 235 vsftpd on
ldd $(which vsftpd) | grep libwrap
vim /etc/hosts.deny
ALL:ALL
vim /etc/hosts.allow
vsftpd:192.168.3.0/255.255.255

iptables -t filter -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -t filter -A INPUT -p tcp --sport 21 -m state --state established,related -j ACCEPT
iptables -t filter -A INPUT -p tcp -m multiport 65510:65530   --dport -j ACCEPT

你可能感兴趣的:(linux,职场,vsftpd,休闲,rhce)