日志轮换/日志管理/VSFTP服务
时间:2015-04-21 19:52 来源:www.it.net.cn 作者:IT网
第一、日志轮换
logrotate 日志轮换的工具
日志存放的地方: /var/log/*
常见的日志文件:
/var/log/messages
/var/log/wtmp
/var/log/btmp
轮换工具的配置文件: /etc/logrotate.conf
/var/log/wtmp { <---需要轮换的日志的据对路径
monthly <---采用每个月轮换一次的设定
minsize 1M <----日志轮换的时候日志文件必须不少于1M,尽管轮换的时间到了,如果文件达不到1M也不去轮换
create 0664 root utmp <----新建的日志文件权限是什么?拥有者是谁,组是谁?
rotate 1
}
size 512k <---尽管轮换的时间还没到,如果日志文件达到512kb,也进行轮换
###########################################################
2、要求对系统的/var/log/btmp日志进行日志轮换的设定要求:
a、轮换的周期为1天
b、轮换的版本数为2,也就是 你最多只能看到btmp btmp.1 btmp.2
c、新日志文件属于root:utmp拥有,权限为660
d、新日志轮换之后,在/var/log/message上记录一条日志记录,标题为“btmp logrotate”,日志内容为“ all rotation successfully”
修改文件 /etc/logrotate.conf
增加
/var/log/btmp
{
daily
create 0660 root utmp
rotate 2
}
修改文件/etc/logrotate.d/syslog
增加
/var/log/btmp
{
sharedscripts
postrotate
logger -t "btmp logrotate" "all rotation successfully! "
endscript
}
############################################################
测试的例子:
/var/log/wtmp {
monthly
size 20k
create 0664 mary utmp
rotate 2
}
修改后,手工触发:
logrotate /etc/logrotate.conf
logrotate -f /etc/logrotate.conf
验证:ll /var/log/wtmp*
vim /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts <---- 执行脚本的开始标志
postrotate <---日志轮换之后需要执行的脚本
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript <---与postrotate一对
}
如果是轮换前执行脚本:
prerotate / endscript
第二、日志管理
syslogd
软件包:sysklogd
配置文件:
/etc/syslog.conf <---syslogd的主配置文件,存放的是syslogd记录日志的规则
/etc/sysconfig/syslog <---保存一些启动的参数
字段的配置格式:设备.日志级别 动作
设备:
auth, <---pam_pwd 产生的日志
authpriv <---包括权限信息、用户登录的一些信息
cron <---负责管理cron,at等日志信息的设备
daemon <---xinetd 产生的日志
kern <---内核产生的日志
lpr <---打印服务产生的日志
mail <---邮件产生日志
mark <---syslogd内部功能,主要产生一个时间chuo
news <---新闻组服务产生的日志
security (same as auth),
syslog <---syslogd本身产生的日志信息
user <---用户程序产生的日志信息
uucp <---文件拷贝服务产生的日志
local0 through local7. <---程序自定义的日志设备
日志级别:
debug <---产生的日志信息是最多一个
info <---一般信息的日志,最常用的
notice <---最具有重要性的普通条件的信息
warning <---预警的信息
warn (same as warning)
err <----阻止某个功能模块或者子系统不能正常工作的信息
error (same as err),
crit <----阻止整个系统或者整个软件不能正常的信息
alert <----需要马上修改的信息
emerg <----内核崩溃等严重错误
panic (same as emerg).
none <---什么也不记录
日志的级别 从上往下级别从低到高涨,级别越低记录的信息越多,
级别底的日志信息包括级别高的信息
#会记录 uucp,news两个设备产生的crit级别,以及包括crit更高级别的信息(alert,emerg)
uucp,news.crit /var/log/spooler
#所以设备产生的info级别的信息,但除了mail,authpriv,cron的所有的记录以外,都记录在messages
*.info;mail.none;authpriv.none;cron.none /var/log/messages
^
# authpriv设备所有级别的日志信息都记录到/var/log/secure
authpriv.* /var/log/secure
# 用户自定义的设备
local7.* /var/log/boot.log
#只包括mail设备产生的info级别的日志,但不包括任何级别的日志都记录到/var/log/mymail.log
mail.=info /var/log/mymail.log
#把kern设备产生的info级别,以及包括info级别以上的级别(notice .... emerg)都记录,但除了err级别的日志
kern.info;kern.!err /var/adm/kernel-info
例子:
vim /etc/ssh/sshd_config
#SyslogFacility AUTHPRIV
SyslogFacility LOCAL6
vim /etc/syslog.conf 《--添加以下一行
local6.* /var/log/mysshd.log
重启两个服务:
service syslog restart
service sshd restart
动作字段:
/filename.log <---常规的日志文件
username <---用户名,例如root,那么日志就会现是在root登录的所有终端,多个用户名用逗号分隔
terminal 《--例如写成 /dev/tty2 <---
@hostname <---主机名字,把日志发送到远程的日志服务器
日志测试命令:
[root@dns ~]# logger -t "test_log" "this is log content! " 《--通常用在shell脚本
[root@dns ~]# cat /var/log/messages
Nov 30 13:07:54 dns test_log: this is log content!
日期 主机名 日志的标题 日志的内容
远程日志服务:
vim /etc/sysconfig/syslog
服务端的配置:
-m 是够开启mark日志信息 ,-m 0 就是关闭这个功能, -m 120 就是每隔120分钟就产生一个时间信息
-r 是否允许接受远程发送过来的日志信息
-x 是否把IP转换成域名,-x不解析IP地址
启用接收远程发送过来的日志:
SYSLOGD_OPTIONS="-r -m 0"
shell> service syslog restart
日志客户端的配置:
vim /etc/syslog.conf
*.* @dns.upl.com 《---把客户端的所有设备(除了mark外)的所有级别的日志都发送到dns.upl.com的远程服务器上
vim /etc/hosts
10.1.1.20 dns.upl.com
service syslog restart
第三、vsftp服务
1、介绍
ftp:文件传输协议
两种模式:
主动模式:默认情况下,ftp开了21端口,用来接受控制命令,服务器会用20端口主动去连接客户端的一个>1024的端口,进行数据传输
被动模式:ftp开放21端口,用来接受控制命令,进行数据传输的时候,客户端会告诉服务器打开一个>1024的端口,然后客户端主动去连接服务器
主动模式的缺点:如果客户端工作在内部网络,ftp服务器就无法直接与客户端进行数据传输
软件包: yum install vsftpd -y
主配置文件: /etc/vsftpd/vsftpd.conf
验证主动模式:
service vsftpd restart
第一终端:
[root@dns vsftpd]# ftp 10.1.1.20
Connected to 10.1.1.20.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (10.1.1.20:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> passive
Passive mode off.
ftp> ls
。。。。。
第二个终端:
[root@dns ~]# netstat -nt | grep :20 | grep TIME_W
tcp 0 0 10.1.1.20:20 10.1.1.20:50783 TIME_WAIT
^证明了服务器用了20端口发送数据
验证被动模式:
第一个终端:
[root@dns vsftpd]# telnet 10.1.1.20 21
Trying 10.1.1.20...
Connected to dns.upl.com (10.1.1.20).
Escape character is '^]'.
220 (vsFTPd 2.0.5)
USER ftp
331 Please specify the password.
PASS
230 Login successful.
PASV
227 Entering Passive Mode (10,1,1,20,204,127)
第二个终端:
[root@dns ~]# nc -p 7889 10.1.1.20 $((204*256+127))
参数说明 : -p 打开本地一个没有使用的>1024的端口用于建立连接
10.1.1.20就是你要与它建立连接的目标机器
$((204*256+127)) 计算出你要连接10.1.1.20的哪个端口
第三个终端:验证服务器的确监听了$((204*256+127))这个端口
[root@dns ~]# netstat -ntl | grep 52351
tcp 0 0 10.1.1.20:52351 0.0.0.0:* LISTEN
第一个终端:
LIST <---发送一个列表指令
150 Here comes the directory listing.
226 Directory send OK.
第二个终端: 看到ftp服务器传过来的列表数据
-rwxr-xr-x 1 0 0 462 Sep 14 08:52 shell_1.txt
-rw-r--r-- 1 0 0 453 Sep 14 08:47 shell_1.txt~
2、配置文件参数的说明:
shell> cat vsftpd.conf | grep -v ^# | grep -v ^$
anonymous_enable=YES <---允许匿名登录
local_enable=YES <---yes就允许本地用户登录
write_enable=YES <---允许本地用户登录之后拥有写的权限
local_umask=022 <---建立文件或者目录的权限掩码
dirmessage_enable=YES <---是否启用目录说明 .message
xferlog_enable=YES <---是否记录上传和下载的日志
connect_from_port_20=YES <---设定ftp工作模式的为主动模式
xferlog_std_format=YES <---日志采用标准格式
listen=YES <---yes ,代表采用stand_alone的形式启动,no就是把监听的任务托管给xinetd的服务
pam_service_name=vsftpd <---是否支持pam模块
userlist_enable=YES <---是否启动用户列表功能
tcp_wrappers=YES <---是否支持tcpwraper
3、配置实例
实例1:实现匿名登录只允许下载
涉及的参数:
anonymous_enable=YES
直接安装软件包,启动vsftpd服务就行了
service vsftpd restart
验证: ftp 10.1.1.20
使用ftp匿名帐号,这个ftp匿名帐号可以在/etc/passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
《---默认匿名登录之后,就已经锁定在/var/ftp目录下
<---注意: /sbin/nologin这个默认shell不允许用户登录系统,包括本地登录,还有远程登录,但允许ftp登录
<---/bin/false <---不能远程登录,本地登录,也不能ftp登录,对匿名帐号不生效
实例2:实现匿名帐号上传的功能
涉及的参数:
anonymous_enable=YES
anon_upload_enable=YES <---允许匿名上传普通文件
anon_mkdir_write_enable=YES <--允许匿名创建文件夹
重启服务,登录验证上传功能,你会发现上传失败!!!
[root@dns vsftpd]# ftp 10.1.1.20
Connected to 10.1.1.20.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (10.1.1.20:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> put /etc/fstab
local: /etc/fstab remote: /etc/fstab
227 Entering Passive Mode (10,1,1,20,40,149)
553 Could not create file. <----上传失败的原因
原因:
1、/var/ftp目录,对于ftp这个帐号没有写的权限
[root@dns pub]# ll -d /var/ftp
drwxr-xr-x 3 root root 4096 09-14 16:53 /var/ftp
假如你把/var/ftp修改权限
chmod 777 /var/ftp 之后,你发现连登录也不行
结论:ftp匿名登录的目录不能具有777的权限,所以需要修改回去755
chmod 755 /var/ftp
解决办法: chmod 777 /var/ftp/pub
在匿名登录的那个目录下创建一个子目录,并给777权限
验证: cd pub
put /etc/vsftpd/vsftpd.conf /pub/vsftpd.conf
150 Ok to send data.
226 File receive OK.
4448 bytes sent in 6.8e-05 seconds (6.4e+04 Kbytes/s) 《---说明成功了
尝试下载刚上传的文件vsftpd.conf,你会发现下载失败. 原因和解决办法看例子3
ftp> get vsftpd.conf
local: vsftpd.conf remote: vsftpd.conf
227 Entering Passive Mode (10,1,1,20,124,248)
550 Failed to open file.
例子3:允许匿名下载刚上传的文件
解决办法1:
接着例子2,多添加一个参数
anon_world_readable_only=NO <---允许匿名下载不是全世界都能读的文件
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
解决办法2:
接着例子2,添加一个参数:
anon_umask=022 ---》 如果是这样些的话,上传文件后,权限自动为644
anon_umask=0222 ——》 444,别忘了前面的那个0
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_umask=022
思考题: man vsftpd.conf 看看哪个参数能够允许匿名帐号删除文件
例子4:实现普通帐号登录 (默认就有这个功能)
local_enable=YES
write_enable=YES
local_umask=022
226 Directory send OK.
ftp> cd /etc/
250 Directory successfully changed.
ftp> get passwd
local: passwd remote: passwd
227 Entering Passive Mode (10,1,1,20,57,131)
150 Opening BINARY mode data connection for passwd (2685 bytes).
226 File send OK.
2685 bytes received in 0.00019 seconds (1.4e+04 Kbytes/s) <--登录之后,可以随便切换工作目录,默认登录之后是用户的家目录
例子5:限制普通用户登录的活动范围,只让他在登录目录下活动
在例子4的基础上,添加一个参数:
chroot_local_user=YES
例子6:禁用某个普通帐号登录ftp
解决方法1:
usermod -s /bin/false tom
[root@dns test]# ftp 10.1.1.20
Connected to 10.1.1.20.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (10.1.1.20:root): tom
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
解决方法2:
确定参数: userlist_enable=YES
把不允许登录的帐号卸载/etc/vsftpd/user_list
每行一个
这里的例子就是在最后一行添加tom
如果我先把原来的user_list变成一个白名单,也就是出现在这个文件里的用户名才允许登录ftp,这时候就需要修改参数:
userlist_deny=NO 《--默认值是YES,YES就代表 user_list是黑名单
例子7:统一普通用户登录之后都在同一个目录
local_root=/ftp
为了让普通帐号能够上传,给予适当的权限 chmod 777 /ftp
如果是想更改匿名用户的默认登录目录:
方法1: usermod -d /ftp ftp
方法2: anon_root=/ftp
例子8:让某些用能够切换到别的工作目录,而别的用户都锁定在登录目录
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list 《--默认文件不存在
vim /etc/vsftpd/chroot_list 《--把允许切换工作目录的帐号名字写在里面,一行一个
tom
service vsftpd restart
ftp 10.1.1.20
ftp> pwd
257 "/ftp"
例子9: 记录上传和下载的具体日志
xferlog_std_format=YES
xferlog_file=/var/log/vsftpd.log
(责任编辑:IT)
| 第一、日志轮换 logrotate 日志轮换的工具 日志存放的地方: /var/log/* 常见的日志文件: /var/log/messages /var/log/wtmp /var/log/btmp 轮换工具的配置文件: /etc/logrotate.conf /var/log/wtmp { <---需要轮换的日志的据对路径 monthly <---采用每个月轮换一次的设定 minsize 1M <----日志轮换的时候日志文件必须不少于1M,尽管轮换的时间到了,如果文件达不到1M也不去轮换 create 0664 root utmp <----新建的日志文件权限是什么?拥有者是谁,组是谁? rotate 1 } size 512k <---尽管轮换的时间还没到,如果日志文件达到512kb,也进行轮换 ########################################################### 2、要求对系统的/var/log/btmp日志进行日志轮换的设定要求: a、轮换的周期为1天 b、轮换的版本数为2,也就是 你最多只能看到btmp btmp.1 btmp.2 c、新日志文件属于root:utmp拥有,权限为660 d、新日志轮换之后,在/var/log/message上记录一条日志记录,标题为“btmp logrotate”,日志内容为“ all rotation successfully” 修改文件 /etc/logrotate.conf 增加 /var/log/btmp { daily create 0660 root utmp rotate 2 } 修改文件/etc/logrotate.d/syslog 增加 /var/log/btmp { sharedscripts postrotate logger -t "btmp logrotate" "all rotation successfully! " endscript } ############################################################ 测试的例子: /var/log/wtmp { monthly size 20k create 0664 mary utmp rotate 2 } 修改后,手工触发: logrotate /etc/logrotate.conf logrotate -f /etc/logrotate.conf 验证:ll /var/log/wtmp* vim /etc/logrotate.d/syslog /var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron { sharedscripts <---- 执行脚本的开始标志 postrotate <---日志轮换之后需要执行的脚本 /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true endscript <---与postrotate一对 } 如果是轮换前执行脚本: prerotate / endscript 第二、日志管理 syslogd 软件包:sysklogd 配置文件: /etc/syslog.conf <---syslogd的主配置文件,存放的是syslogd记录日志的规则 /etc/sysconfig/syslog <---保存一些启动的参数 字段的配置格式:设备.日志级别 动作 设备: auth, <---pam_pwd 产生的日志 authpriv <---包括权限信息、用户登录的一些信息 cron <---负责管理cron,at等日志信息的设备 daemon <---xinetd 产生的日志 kern <---内核产生的日志 lpr <---打印服务产生的日志 mail <---邮件产生日志 mark <---syslogd内部功能,主要产生一个时间chuo news <---新闻组服务产生的日志 security (same as auth), syslog <---syslogd本身产生的日志信息 user <---用户程序产生的日志信息 uucp <---文件拷贝服务产生的日志 local0 through local7. <---程序自定义的日志设备 日志级别: debug <---产生的日志信息是最多一个 info <---一般信息的日志,最常用的 notice <---最具有重要性的普通条件的信息 warning <---预警的信息 warn (same as warning) err <----阻止某个功能模块或者子系统不能正常工作的信息 error (same as err), crit <----阻止整个系统或者整个软件不能正常的信息 alert <----需要马上修改的信息 emerg <----内核崩溃等严重错误 panic (same as emerg). none <---什么也不记录 日志的级别 从上往下级别从低到高涨,级别越低记录的信息越多, 级别底的日志信息包括级别高的信息 #会记录 uucp,news两个设备产生的crit级别,以及包括crit更高级别的信息(alert,emerg) uucp,news.crit /var/log/spooler #所以设备产生的info级别的信息,但除了mail,authpriv,cron的所有的记录以外,都记录在messages *.info;mail.none;authpriv.none;cron.none /var/log/messages ^ # authpriv设备所有级别的日志信息都记录到/var/log/secure authpriv.* /var/log/secure # 用户自定义的设备 local7.* /var/log/boot.log #只包括mail设备产生的info级别的日志,但不包括任何级别的日志都记录到/var/log/mymail.log mail.=info /var/log/mymail.log #把kern设备产生的info级别,以及包括info级别以上的级别(notice .... emerg)都记录,但除了err级别的日志 kern.info;kern.!err /var/adm/kernel-info 例子: vim /etc/ssh/sshd_config #SyslogFacility AUTHPRIV SyslogFacility LOCAL6 vim /etc/syslog.conf 《--添加以下一行 local6.* /var/log/mysshd.log 重启两个服务: service syslog restart service sshd restart 动作字段: /filename.log <---常规的日志文件 username <---用户名,例如root,那么日志就会现是在root登录的所有终端,多个用户名用逗号分隔 terminal 《--例如写成 /dev/tty2 <--- @hostname <---主机名字,把日志发送到远程的日志服务器 日志测试命令: [root@dns ~]# logger -t "test_log" "this is log content! " 《--通常用在shell脚本 [root@dns ~]# cat /var/log/messages Nov 30 13:07:54 dns test_log: this is log content! 日期 主机名 日志的标题 日志的内容 远程日志服务: vim /etc/sysconfig/syslog 服务端的配置: -m 是够开启mark日志信息 ,-m 0 就是关闭这个功能, -m 120 就是每隔120分钟就产生一个时间信息 -r 是否允许接受远程发送过来的日志信息 -x 是否把IP转换成域名,-x不解析IP地址 启用接收远程发送过来的日志: SYSLOGD_OPTIONS="-r -m 0" shell> service syslog restart 日志客户端的配置: vim /etc/syslog.conf *.* @dns.upl.com 《---把客户端的所有设备(除了mark外)的所有级别的日志都发送到dns.upl.com的远程服务器上 vim /etc/hosts 10.1.1.20 dns.upl.com service syslog restart 第三、vsftp服务 1、介绍 ftp:文件传输协议 两种模式: 主动模式:默认情况下,ftp开了21端口,用来接受控制命令,服务器会用20端口主动去连接客户端的一个>1024的端口,进行数据传输 被动模式:ftp开放21端口,用来接受控制命令,进行数据传输的时候,客户端会告诉服务器打开一个>1024的端口,然后客户端主动去连接服务器 主动模式的缺点:如果客户端工作在内部网络,ftp服务器就无法直接与客户端进行数据传输 软件包: yum install vsftpd -y 主配置文件: /etc/vsftpd/vsftpd.conf 验证主动模式: service vsftpd restart 第一终端: [root@dns vsftpd]# ftp 10.1.1.20 Connected to 10.1.1.20. 220 (vsFTPd 2.0.5) 530 Please login with USER and PASS. 530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (10.1.1.20:root): ftp 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> passive Passive mode off. ftp> ls 。。。。。 第二个终端: [root@dns ~]# netstat -nt | grep :20 | grep TIME_W tcp 0 0 10.1.1.20:20 10.1.1.20:50783 TIME_WAIT ^证明了服务器用了20端口发送数据 验证被动模式: 第一个终端: [root@dns vsftpd]# telnet 10.1.1.20 21 Trying 10.1.1.20... Connected to dns.upl.com (10.1.1.20). Escape character is '^]'. 220 (vsFTPd 2.0.5) USER ftp 331 Please specify the password. PASS 230 Login successful. PASV 227 Entering Passive Mode (10,1,1,20,204,127) 第二个终端: [root@dns ~]# nc -p 7889 10.1.1.20 $((204*256+127)) 参数说明 : -p 打开本地一个没有使用的>1024的端口用于建立连接 10.1.1.20就是你要与它建立连接的目标机器 $((204*256+127)) 计算出你要连接10.1.1.20的哪个端口 第三个终端:验证服务器的确监听了$((204*256+127))这个端口 [root@dns ~]# netstat -ntl | grep 52351 tcp 0 0 10.1.1.20:52351 0.0.0.0:* LISTEN 第一个终端: LIST <---发送一个列表指令 150 Here comes the directory listing. 226 Directory send OK. 第二个终端: 看到ftp服务器传过来的列表数据 -rwxr-xr-x 1 0 0 462 Sep 14 08:52 shell_1.txt -rw-r--r-- 1 0 0 453 Sep 14 08:47 shell_1.txt~ 2、配置文件参数的说明: shell> cat vsftpd.conf | grep -v ^# | grep -v ^$ anonymous_enable=YES <---允许匿名登录 local_enable=YES <---yes就允许本地用户登录 write_enable=YES <---允许本地用户登录之后拥有写的权限 local_umask=022 <---建立文件或者目录的权限掩码 dirmessage_enable=YES <---是否启用目录说明 .message xferlog_enable=YES <---是否记录上传和下载的日志 connect_from_port_20=YES <---设定ftp工作模式的为主动模式 xferlog_std_format=YES <---日志采用标准格式 listen=YES <---yes ,代表采用stand_alone的形式启动,no就是把监听的任务托管给xinetd的服务 pam_service_name=vsftpd <---是否支持pam模块 userlist_enable=YES <---是否启动用户列表功能 tcp_wrappers=YES <---是否支持tcpwraper 3、配置实例 实例1:实现匿名登录只允许下载 涉及的参数: anonymous_enable=YES 直接安装软件包,启动vsftpd服务就行了 service vsftpd restart 验证: ftp 10.1.1.20 使用ftp匿名帐号,这个ftp匿名帐号可以在/etc/passwd ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 《---默认匿名登录之后,就已经锁定在/var/ftp目录下 <---注意: /sbin/nologin这个默认shell不允许用户登录系统,包括本地登录,还有远程登录,但允许ftp登录 <---/bin/false <---不能远程登录,本地登录,也不能ftp登录,对匿名帐号不生效 实例2:实现匿名帐号上传的功能 涉及的参数: anonymous_enable=YES anon_upload_enable=YES <---允许匿名上传普通文件 anon_mkdir_write_enable=YES <--允许匿名创建文件夹 重启服务,登录验证上传功能,你会发现上传失败!!! [root@dns vsftpd]# ftp 10.1.1.20 Connected to 10.1.1.20. 220 (vsFTPd 2.0.5) 530 Please login with USER and PASS. 530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (10.1.1.20:root): ftp 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> put /etc/fstab local: /etc/fstab remote: /etc/fstab 227 Entering Passive Mode (10,1,1,20,40,149) 553 Could not create file. <----上传失败的原因 原因: 1、/var/ftp目录,对于ftp这个帐号没有写的权限 [root@dns pub]# ll -d /var/ftp drwxr-xr-x 3 root root 4096 09-14 16:53 /var/ftp 假如你把/var/ftp修改权限 chmod 777 /var/ftp 之后,你发现连登录也不行 结论:ftp匿名登录的目录不能具有777的权限,所以需要修改回去755 chmod 755 /var/ftp 解决办法: chmod 777 /var/ftp/pub 在匿名登录的那个目录下创建一个子目录,并给777权限 验证: cd pub put /etc/vsftpd/vsftpd.conf /pub/vsftpd.conf 150 Ok to send data. 226 File receive OK. 4448 bytes sent in 6.8e-05 seconds (6.4e+04 Kbytes/s) 《---说明成功了 尝试下载刚上传的文件vsftpd.conf,你会发现下载失败. 原因和解决办法看例子3 ftp> get vsftpd.conf local: vsftpd.conf remote: vsftpd.conf 227 Entering Passive Mode (10,1,1,20,124,248) 550 Failed to open file. 例子3:允许匿名下载刚上传的文件 解决办法1: 接着例子2,多添加一个参数 anon_world_readable_only=NO <---允许匿名下载不是全世界都能读的文件 anonymous_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES 解决办法2: 接着例子2,添加一个参数: anon_umask=022 ---》 如果是这样些的话,上传文件后,权限自动为644 anon_umask=0222 ——》 444,别忘了前面的那个0 anonymous_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_umask=022 思考题: man vsftpd.conf 看看哪个参数能够允许匿名帐号删除文件 例子4:实现普通帐号登录 (默认就有这个功能) local_enable=YES write_enable=YES local_umask=022 226 Directory send OK. ftp> cd /etc/ 250 Directory successfully changed. ftp> get passwd local: passwd remote: passwd 227 Entering Passive Mode (10,1,1,20,57,131) 150 Opening BINARY mode data connection for passwd (2685 bytes). 226 File send OK. 2685 bytes received in 0.00019 seconds (1.4e+04 Kbytes/s) <--登录之后,可以随便切换工作目录,默认登录之后是用户的家目录 例子5:限制普通用户登录的活动范围,只让他在登录目录下活动 在例子4的基础上,添加一个参数: chroot_local_user=YES 例子6:禁用某个普通帐号登录ftp 解决方法1: usermod -s /bin/false tom [root@dns test]# ftp 10.1.1.20 Connected to 10.1.1.20. 220 (vsFTPd 2.0.5) 530 Please login with USER and PASS. 530 Please login with USER and PASS. KERBEROS_V4 rejected as an authentication type Name (10.1.1.20:root): tom 331 Please specify the password. Password: 530 Login incorrect. Login failed. 解决方法2: 确定参数: userlist_enable=YES 把不允许登录的帐号卸载/etc/vsftpd/user_list 每行一个 这里的例子就是在最后一行添加tom 如果我先把原来的user_list变成一个白名单,也就是出现在这个文件里的用户名才允许登录ftp,这时候就需要修改参数: userlist_deny=NO 《--默认值是YES,YES就代表 user_list是黑名单 例子7:统一普通用户登录之后都在同一个目录 local_root=/ftp 为了让普通帐号能够上传,给予适当的权限 chmod 777 /ftp 如果是想更改匿名用户的默认登录目录: 方法1: usermod -d /ftp ftp 方法2: anon_root=/ftp 例子8:让某些用能够切换到别的工作目录,而别的用户都锁定在登录目录 chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list 《--默认文件不存在 vim /etc/vsftpd/chroot_list 《--把允许切换工作目录的帐号名字写在里面,一行一个 tom service vsftpd restart ftp 10.1.1.20 ftp> pwd 257 "/ftp" 例子9: 记录上传和下载的具体日志 xferlog_std_format=YES xferlog_file=/var/log/vsftpd.log (责任编辑:IT) |