sendmail限制用户发送的邮件的大小

之前在一份国赛的试题上看到有一题要求限制sendmail发送邮件的附件大小,但是我翻遍了百度和谷歌,试遍了各种方法,也询问了来学校培训Linux的两位老师及外校一名久负盛名的指导教师,均未能得到有效答案。
记忆犹新的是,当我和其中一位培训老师说,我试遍了各种方法也行不通,想请老师指点的时候,对方直接抛给我一句话:我不知道,但这个题目已经考了好几次了,你在质疑赛题的准确性?自己百度去。。。汗。。。
最后我不得不妥协一步,既然无法限制附件的大小,那我直接限制整封邮件的大小好啦(邮件大小=正文+附件+邮件信息等附加内容的大小总和)。
编辑sendmail的/etc/mail/sendmail.cf配置文件

# vim /etc/mail/sendmail.cf

转到第186行(因软件版本号不同位置可能略有不同,可在vim中搜索关键字来查找),可以看到如下内容(翻译成中文是,每条消息的最大大小):

将# O MaxMessageSize=0选项前的注释去掉,其参数值就是每封邮件的最大值,单位是KB。例如,我想限制用户只能发送2MB大小的邮件则可以将其修改为如下形式:

O MaxMessageSize=2048

保存退出后直接重启sendmail服务就可以,不需要使用m4工具重新生成sendmail.cf文件,因为我们编辑的就是sendmail.cf文件。

# service sendmail restart

最后,尽情测试吧。

浅析邮件服务器原理

上面的架构图中包含两组邮件系统、两个客户端和一个DNS服务器,其中的邮件系统是企业中比较经典的架构形式,下面我将依据此图来简述邮件服务器的工作流程。

名词解释:

  • MUA 接收邮件所使用的邮件客户端,使用IMAP或POP3协议与服务器通信,常见的有:outlook、foxmail;
  • MTA 通过SMTP协议发送、转发邮件,常见的有:sendmail、postfix、qmail;
  • MDA 将MTA接收到的邮件保存到磁盘或指定地方,通常会进行垃圾邮件及病毒扫描;
  • MRA 负责实现IMAP与POP3协议,与MUA进行交互;
  • SMTP 传输发送邮件所使用的标准协议;
  • IMAP 接收邮件使用的标准协议之一;
  • POP3 接收邮件使用的标准协议之一;
  • MailBox 用户邮箱;
  • cyrus-SASL及courier-authlib 提供用户认证相关的支持。
  • SQL 数据库,用于存储用户身份信息

前面的架构图中,MUA想发送邮件,就要将邮件通过SMTP协议送到MTA上,MTA通常会要求用户认证身份(也可不认证),认证通常使用SASL,认证源可以是像上面的架构图中那样使用SQL数据库也可以使用其他方式。MTA收到邮件后会检查邮件目的地址的邮件域,此时会产生两种情况。
情况一,目的邮件域是本服务器:
如果发现是本服务器的邮件域则将邮件送到MDA,由MDA将其投递到用户的邮箱(MailBox)中。最后用户在MUA上使用POP3/IMAP协议链接MRA,MRA通常也会要求用户认证身份,其认证源同MTA一样可以是SQL也可以是其他方式,若认证通过,则允许MUA读取邮件信息。
情况二,目的邮件域非本服务器:
若是邮件域是其他邮件服务器的,则MTA会发送UDP报文向DNS服务器查询邮件域对应的邮件主机,并最终解析出其IP地址,随后MTA会查询本服务器的转发控制策略,若允许转发,则将邮件转发到该域对应的服务器上,最终会重复情况一中MTA收到邮件后的处理方式。

vsftpd配置文件中各种选项的中文解释

参数 说明
listen_address=ip address 指定侦听IP
listen_port=port_value 指定侦听端口,默认21
anonymous_enable=YES 是否允许使用匿名帐户
local_enable=YES 是否允许本地用户登录
nopriv_user=ftp 指定vsftpd服务的运行帐户,不指定时使用ftp
write_enable=YES 是否允许写入
anon_upload_enable=YES 匿名用户是否可上传文件
anon_mkdir_write_enable=YES 匿名用户是否建立目录
dirmessage_enable=YES 进入每个目录是显示欢迎信息,在每个目录下建立.message文件在里面写欢迎信息
xferlog_enable=YES 上传/下载文件时记录日志
connect_from_port_20=YES 是否使用20端口传输数据(是否使用主动模式)
chown_uploads=YES、chown_username=whoever 修改匿名用户上传文件的拥有者
xferlog_file=/var/log/vsftpd.log 日志文件
xferlog_std_format=YES 使用标准文件日志
idle_session_timeout=600 会话超时,客户端连接到ftp但未操作
data_connection_timeout=120 数据传输超时
async_abor_enable=YES 是否允许客户端使用sync等命令
ascii_upload_enable=YES、ascii_download_enable=YES 是否允许上传/下载二进制文件
chroot_local_user=YES 限制所有的本地用户在自家目录
chroot_list_enable=YES、chroot_list_file=/etc/vsftpd/chroot_list 指定不能离开家目录的用户,将用户名一个一行写在/etc/vsftpd/chroot_list文件里,使用此方法时必须chroot_local_user=NO
ls_recurse_enable=YES 是否允许使用ls -R等命令
listen=YES 开启ipv4监听
listen_ipv6=YES 开启ipv6监听
pam_service_name=vsftpd 使用pam模块控制,vsftpd文件在/etc/pam.d目录下
userlist_enable=YES 此选项被激活后,vsftpd将读取userlist_file参数所指定的文件中的用户列表。当列表中的用户登录FTP服务器时,该用户在提示输入密码之前就被禁止了。即该用户名输入后,vsftpd查到该用户名在列表中,vsftpd就直接禁止掉该用户,不会再进行询问密码等后续步聚
userlist_deny=YES 决定禁止还是只允许由userlist_file指定文件中的用户登录FTP服务器。此选项在userlist_enable 选项启动后才生效。YES,默认值,禁止文件中的用户登录,同时也不向这些用户发出输入密码的提示。NO,只允许在文件中的用户登录FTP服务器
tcp_wrappers=YES 是否允许tcp_wrappers管理
local_root=/home/ftp 所有用户的根目录,,对匿名用户无效
anon_max_rate 匿名用户的最大传输速度,单位是Byts/s
local_max_rate 本地用户的最大传输速度,单位是Byts/s
download_enable= YES 是否允许下载

使Linux程序在后台运行,即便SSH断开也不中断进程

有时候需要在Linux服务器上执行一些运算脚本,这些脚本通常要几个小时才能完成计算。而连接服务器的SSH一旦断开,脚本进程就会被系统立即杀死,但我们总不能把SSH一直挂着等待脚本执行结果吧?
这里可以使用nohup命令来防止在SSH中断时进程被杀死,命令格式如下。

# nohup 接命令

例如:

# nohup ping www.baidu.com

之后程序会提示说,命令的输出已经被重定向到nohup.out文件中了。

此时命令依然是运行在前台,可以使用Ctrl+Z组合键将进程挂起。

再使用bg+进程编号来将进程转入后台运行。

# bg 1


需要查看命令的输出怎么办?那自然是查看nohup.out文件的内容啦。

# cat nohup.out

使用匿名用户登录vsftpd服务器时提示:500 OOPS: vsftpd: refusing to run with writable anonymous root

这个错误是由于你为FTP的根目录赋予了777权限,vsftpd的安全机制是不允许这种“不安全”的操作的,解决办法自然是对其稍稍进行一些限制啦。

[root@localhost ~]# chmod 755 /var/ftp

但此文件夹的所有者是root用户的,那如果又想让匿名用户具有上传权限要怎么做?
可以在/var/ftp目录下面再新建一个目录并赋予其777权限。总之,只要/var/ftp这个目录的权限不瞎改,其下面的其他文件或文件夹的权限可以随意~
还有,在/etc/vsftpd/vsftpd.conf配置文件中有一条:

anon_root=/var/ftp

这个选项是用于定义匿名用户的默认文件夹的,此选项的参数必须是和/etc/passwd文件中ftp用户的家目录一致,否则也会出现本文中所述的错误。

CentOS 6下创建和管理软RAID

RAID介绍:
磁盘阵列既本文中所讲的RAID,其具有提高磁盘操作效率及容错的功能。RAID分为硬RAID和软RAID,硬RAID是基于磁盘阵列卡的,而软RAID则是使用软件管理,本文中所述的RAID属于软RAID。
各个RAID类型的简单介绍:

RAID0:至少需要两块磁盘,提高读写性能,没有容错能力。磁盘利用率为:100%
RAID1:至少需要两块硬盘,镜像数据,具有容错能力,读的性能提升,写的性能下降。磁盘利用率为: 50%
RAID4:至少需要三块硬盘,允许一块出错,读写性能提升。磁盘利用率为: (n-1)/n
RAID5:至少需要三块硬盘,允许一块出错,读写性能提升。磁盘利用率为: (n-1)/n
RAID6:至少需要四块硬盘,允许两块出错,读写性能提升。磁盘利用率为:(n-2)/n
RAID10:至少需要四块硬盘,允许不同组内各坏一块盘,读写性能提升。磁盘利用率为:50

环境准备:
本文中使用VirtualBox虚拟机,你也可以使用VMware的虚拟机。虚拟机中安装好CentOS 6.5版本后,添加四块大小为10GB的SCSI硬盘,此处硬盘接口类型可随意。

软件包安装:

# yum install -y mdadm           //mdadm是Linux下的软RAID管理程序。

软RAID创建方法:
查看刚刚添加的硬盘。

# lsblk


若刚才添加的硬盘不显示,则重启系统后再次查看,重启命令如下。

# reboot

下面我将带你创建一个RAID10来了解CentOS 6下软RAID创建和管理的流程。
RAID10是RAID1和RAID0组合在一起的一种形式,兼具两者的优点,在企业中比较常用。制作时先做RAID1再做RAID0,如下图中就是本例中的RAID10的创建方案。结合图片可以很容易理解,RAID10就是两组高可靠的RAID1被使用RAID0组合在一起增加了性能。

具体步骤如下。
一、先为每块硬盘新建一个分区,并将分区类型修改为RAID。此处需注意的是:加入到同一个RAID的不同硬盘上的分区的大小最好相同,否则以容量最小的分区的容量作为同一RAID在所有硬盘上的可用容量,其余空间则浪费掉。
这里只以/dev/sdb为例说明,其余硬盘按照需求参考此步骤操作即可。
使用fdisk工具编辑/dev/sbd硬盘的分区表,本例中为每块硬盘创建1个主分区,每个主分区使用全部硬盘空间。

# fdisk /dev/sdb

fdisk工具的使用方法这里不做详细说明,如需了解可参考此篇文章。

Linux下使用fdisk工具为硬盘分区


查看划分完的分区。

二、将分区类型修改为RAID,默认为Linux。
在fdisk程序中输入t,随后会要求你输入要将分区更改为的类型的代码,并提示可以输入L或list列出所有可选的类型的代码。

注意,如果硬盘中存在多个分区(本例中一块硬盘只有一个分区),那输入t后还会要求你输入要更改分区类型的分区的编号,如下图中,我选择为1号分区更改分区类型。

输入L,查看所有可选类型。

如上图红色箭头标记的,我们要将分区类型修改为Linux raid auto,输入他的代码:fd,而后会弹出一个修改成功的提示。

将所有硬盘的所有分区都按照如上步骤修改其分区类型。
全部修改完后,查看所有磁盘。

# lsblk


上图中,可以看到每块硬盘下都有我们刚刚新建的分区,若你看不到分区也不用着急,可以执行下面的命令后再次查看。

# partprobe     //使系统内核立即读取新的分区表信息

若Shell提示找不到partprobe命令则可以参考此篇文章解决。

CentOS 6找不到partprobe命令的解决方法


三、使用mdadm工具创建并管理软RAID
使用mdadm工具将/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde这四块硬盘组建成RAID10。

# mdadm -C /dev/md10 -a yes -l 10 -n 4 /dev/sd{b,c,d,e}1    //不要看命令好长就觉得头晕,可以结合下面的命令参数解释来试着理解这条命令中每一部分的含义。

执行后,返回信息提示已经成功创建。

在组建RAID时若弹出以下提示是警告你:软RAID不能用作启动盘,是否还继续创建软RAID,输入“y”确认即可。

若出现下图这种提示是因为磁盘之前做过一次RAID,也输入y确认。

以下是mdadm工具各个参数的详细说明:

-A 装配模式    //暂时没搞懂是怎么用的,如果你知道的话欢迎留言。
-C 创建模式
创建模式专用选项:
-n 用于创建RAID设备的个数
-x 热备磁盘的个数
-l 指定RAID级别
-a 参数值:yes(自动为创建的RAID设备创建设备文件)
-c 指定块的大小,默认为512KB
-F FOLLOW 监控
-S 停止RAID
-D 显示阵列详细信息
例如:
# mdadm -C /dev/md10 -a yes -l 10 -n 4 /dev/sd{b,c,d,e}1    //此条命令就是本文中创建RAID10的命令,现在可以结合参数的帮助文档来理解啦!
管理模式命令:
-f 将一块硬盘标记为损坏
-r 移除设备
-a 添加新设备
例如:
# mdadm /dev/md0 -a /dev/sdb1     //这里将/dev/sdb1这块硬盘从RAID10中移除。

需要注意的是,使用mdadm工具组建完软RAID后要将其写入到RAID配置文件中,否则系统重启后RAID设备的名称会变为默认的md127,而非之前指定的md10。

# mdadm -Ds > /etc/mdadm.conf

查看刚刚创建的RAID10的信息。

# mdadm -D /dev/md10


四、为RAID设备指定文件系统。
这里我将其格式化为ext4文件系统。

# mkfs.ext4 /dev/md10

五、挂载磁盘

# mount /dev/md10 /mnt

也可以将其写入到/etc/fstab文件中,使其开自动挂载。

# vim /etc/fstab


 

CentOS 6找不到partprobe命令的解决方法

今天在做CentOS 6下的软RAID时需要使用到partprobe命令使系统内核立即读取新分区,但悲催的是,最小化安装版的CentOS 6是没有这一命令的,百度搜了半天也没搜到解决办法,后来我索性查看了下我网站服务器的CentOS7上有没有这一命令,咦,我狗屎运就是好,还真查到了,赶紧查看了下这个命令属于哪一软件包。

[root@localhost ~]# rpm -qf /sbin/partprobe    //此命令是在可以使用partprobe命令的Linux服务器上执行的,不要傻傻地在自己的系统上试~
parted-3.1-28.el7.x86_64

唔,原来,想使用partprobe命令就要安装parted这个软件包呀!
那就安装呗。

yum install -y parted     //在你的系统上安装这个软件包就可以用partprobe命令啦!

大功告成后就会发现partprobe命令已经可以使用啦!

Linux下使用SSH客户端连接Linux服务器提示:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!的解决方法。

问题描述:
Linux下使用SSH客户端连接Linux服务器的时候抛出类似如下错误。

产生原因:
这是因为之前连接过一台与当前连接的Linux服务器使用相同IP但公钥不同的Linux服务器。系统中已经存储了此服务器的公钥,故再次连接时发现公钥变更,ssh客户端主动拒绝了连接。
解决方法:
清空~/.ssh/known_hosts文件,此文件中存放SSH客户端曾经连接的服务器的公钥信息。
echo “”> ~/.ssh/known_hosts
再次连接Linux服务器,SSH客户端会重新询问是否要接受服务器的公钥。

Apache配置HTTPS访问

介绍:

HTTPS协议是加密后的HTTP协议,浏览器和服务器间的通信被加密传输,有效的防止了网页劫持并保护了用户的数据安全。HTTPS加密会使用到SSL证书,本例中使用OpenSSL这个开源软件来生成SSL证书做测试用。网站正式上线后需去专门的CA机构申请SSL证书,自己生成的证书是不被浏览器信任的。

安装软件:

[root@localhost ~]# yum install -y openssl       //安装OpenSSL软件包用于生成SSL证书,此软件包通常已随系统默认安装。
[root@localhost ~]# yum install -y httpd         //安装Apache。
[root@localhost ~]# yum install -y mod_ssl       //安装Apache的SSL加密模块。

生成证书:

使用OpenSSL在/etc/httpd/ssl目录下生成一个自签名证书(存储位置随意)。

[root@localhost ~]# mkdir /etc/httpd/ssl       //创建SSL存储文件夹
[root@localhost ~]# openssl req -newkey rsa:2048 -nodes -keyout /etc/httpd/ssl/ssl.key -x509 -days 365 -out /etc/httpd/ssl/ssl.crt       //生成SSL证书文件

随后程序会依次要求输入所在的国家、地区、城市等等的信息,因为我们是做测试用的,这里全部直接回车即可。但是在下图中红色箭头所指的位置上要填上启用HTTPS的站点的域名,否则客户端浏览器可能会因为签名域名和站点实际域名不同而断开链接。

查看刚刚生成的证书。

[root@localhost ~]# ls /etc/httpd/ssl/

其中,.crt文件是证书文件,.key文件是私钥文件。

Apache配置部分:

配置Apache的ssl.com子配置文件,此配置文件必须是安装过mod_ssl模块才会有。

[root@localhost ~]# vim /etc/httpd/conf.d/ssl.conf

我看到网上很多教程说,在修改/etc/httpd/conf.d/ssl.conf子配置文件前还要在/etc/httpd/conf/httpd.conf主配置文件中引入mod_ssl模块。这里特殊说明一下,在CentOS 6.5下/etc/httpd/conf.d/ssl.conf子配置文件中就已经引入了mod_ssl模块,不需要再另外引入,另外,此配置文件中也默认开启了对443端口(HTTP使用80端口传输,HTTPS使用443端口传输)的监听。

本例中修改成如下图所示,“*”代表监听所有IP地址,虚拟主机所使用的域名必须使用DNS服务器解析到Apache服务器的IP上。

在105行和112行找到下图中的选项,将这辆个选项的参数修改为证书文件及私钥文件的存储位置。

创建网站首页文件。

[root@localhost ~]# echo 'hello,world!' > /var/www/html/index.html

如果在启用HTTPS访问的同时还要禁止HTTP访问可以做如下修改。

编辑Apache主配置文件。

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf

方法1:暴力修改法。

转到第136行左右位置将监听80端口的选项直接禁用掉,这将会影响主配置文件中所有的虚拟主机。

修改后如图。

方法2:将需要禁用HTTP访问的虚拟主机配置信息删掉即可,如下图就是一个监听80端口(HTTP使用80端口)的虚拟主机配置信息。

最后,保存配置文件,并在保证防火墙及selinux均已关闭的情况下重启Apache。

[root@localhost ~]# service httpd restart

测试:

此时,通过HTTP协议已无法访问网站。

HTTPS协议正常访问网站,但浏览器会提示证书错误,因为是自签证书所以并不会被浏览器所信任,此处可不予理会。

samba中实现共享中所有创建的文件都属于指定用户的功能

方法很简单,但很实用。
在需要指定的共享中加入。

force user = 要指定的用户

例如,要求老师得能在“孙锡源”这个学生的共享文件夹中创建文件,但老师创建的文件所有者是老师本人,孙锡源没权限修改及删除文件。那么就可以加一行“force user = sxy”,让老师创建的文件的所有者也是孙锡源本人,这样孙锡源就可以操作文件了。

记录一个Linux下使用usermod修改用户家目录后产生的奇怪问题

问题描述:
学校机房的samba服务器中本来所有用户都是存放在/home目录下的,但是我在为用户统一修改权限时发现这样极不方便。因为老师和学生的权限肯定是不同的,但他们又都在同一个目录下,修改起来很麻烦。
我的解决办法是:在/home目录下新建一个teacher目录用来存放教师的用户家目录,再新建一个student用来存放学生的用户家目录,这样下次修改权限时就可以直接用通配符来分别为教师和学生修改了。
既然有了想法,就开始实施吧。
我选择使用usermod命令一个一个的辛苦的为每个用户修改家目录,而不是简单粗暴地修改/etc/passwd文件。
以下以“sxy”这个用户来做演示,注:此时我的工作目录在/home下,且/home/teacher与/home/student目录已创建。

usermod -md student/sxy sxy

修改后,查看/home下已经没有sxy这目录了,此目录已被迁移至/home/student下。
然而, 重点来了!!!!
虽然成功的迁移了目录,但是我用windows登陆samba服务器的时候点sxy这个共享目录竟然提示我“找不到路径”???注:此处的sxy共享是使用[homes]配置的。
排错过程:
我的第一步:怀疑,是不是因为samba的用户数据库中记录的还是旧的文件路径,要将用户重新加入数据库才能解决问题?
结果:用户重新加入samba数据库后问题依旧。
第二步:怀疑,是不是samba的[homes]字段必须使用默认的家目录路径,也是就是存放在/home下,不能自定义家目录?
结果:新建了一个系统用户“test”,创建用户时指定其家目录为/home/student/test并将其加入samba用户数据库中后,发现其家目录的共享可正常访问。
第三步:陷入沉思~~~随后怀疑,是不是因为usermod命令修改用户家目录改的不够彻底(比如说,某些系统配置文件中的用户家目录的路径还是以前的)。
结果:删除一个samba家目录共享无法访问的用户“lzl”,并在重新建立时使用相同的用户名,且指定家目录为/home/student/lzl同时加入到samba用户数据库中后samba的家目录共享又可以正常访问了。
第四步:感觉上,第三步中貌似找到了问题的原因。就在我准备一个个删除并重建用户时突然一个想法冒出来,我是不是可以切换到一个之前修改过家目录的“问题用户”上,来看看其家目录到底变没变。
结果:使用su – sxy命令尝试切换到“sxy”这个用户上时抛出错误:

第五步:我注意到,第四步的报错中的路径是相对路径而不是绝对路径,马上查看/etc/passwd文件,发现,所有的“问题用户”的家目录都是相对路径而正常用户都是绝对路径。
问题用户:

正常用户:

至此,问题的原因彻底搞清楚了,那就是因为我在使用usermod修改家目录时使用的是相对路径。
解决办法:使用usermod命令重新修改为绝对路径,或直接改/etc/passwd文件。

samba配置文件中的常用变量

先简单解释下什么是samba配置文件中的变量。

上图中,所有以“%”开头的字母都是变量(已用红色箭头指出)。各个变量代表的值已在下方标注。

%S = 当前服务名(如果有的话)  
%P = 当前服务的根目录(如果有的话)  
%u = 当前服务的用户名(如果有的话)  
%g = 当前用户说在的主工作组  
%U = 当前对话的用户名  
%G = 当前对话的用户的主工作组  
%H = 当前服务的用户的Home目录  
%v = Samba服务的版本号。  
%h = 运行Samba服务机器的主机名  
%m = 客户机的NETBIOS名称  
%L = 服务器的NETBIOS名称  
%M = 客户机的主机名  
%N = NIS服务器名  
%p = NIS服务的Home目录  
%R = 说采用的协议等级(值可以是CORE, COREPLUS, LANMAN1, LANMAN2,NT1)  
%d = 当前服务进程的ID  
%a = 客户机的结构(只能识别几项:Samba,WfWg,WinNT,Win95)  
%I = 客户机的IP  
%T = 当前日期和时间

以上内容摘录自:http://blog.csdn.net/xkq_lyx/article/details/12905863
 

Linux下为普通用户开启sudo命令

介绍 :
Linux下,root用户的权限非常大,root的密码自然不能轻易的告诉别人,但如果又必须使用root权限,那要怎么办呢?这里就要使用“sudo”这个命令了。这个命令是系统管理员允许普通用户以root权限执行几个或全部命令的工具。
为普通用户开启sudo命令的方法:
默认情况下,普通用户是无权使用sudo命令的,需要管理员为其开启使用命令的权限。
下图中,红箭头所指的就是普通用户使用sudo来执行命令后抛出的错误。

为普通用户启用sudo命令:
编辑sudo的配置文件。

vim /etc/sudoers

在第105和108行左右的位置可以看到如下图中红框框起来的内容,这两处就是为某用户开启sudo命令的配置模板。二处的区别在于,使用105行的配置模板配置后用户使用sudo命令需要输入用户本身的密码,而108行处的模板则不需要输入密码,二者可以同时配置。

例如,下图中,为user1、user2、user3、user4这四个系统用户开启了sudo命令,其中user1和user2在使用sudo命令时需要输入密码,而user3和user4则不需要。

此时再分别使用user1、user2、user3、user4这四个用户的身份测试sudo命令的执行情况即可。

CentOS 6下搭建TFTP服务器

介绍:
TFTP是非常“简陋”的文件传输协议,基于UDP协议传输,日常生活中很少会用到,但做嵌入式开发及网络设备运维时经常会用到这种简易的文件传输方式。
软件安装:
服务器端:

[root@localhost ~]# yum install tftp-server

配置文件介绍

[root@localhost ~]# /etc/xinetd.d/tftp                      //TFTP服务主配置文件

服务配置:
tftp这种“简陋”的服务,配置起来也是相当的容易。
编辑主配置文件。

[root@localhost ~]# vim /etc/xinetd.d/tftp

下图红框中,“server_args”选项是配置TFTP根目录及操作权限的,“disable”选项用以配置是否启用TFTP服务。通常情况下只需要配置这两个选项即可。

这里,我指定TFTP的根目录为/tmp/tftp,且具有可写入的权限,并启用TFTP服务。

注意,上图中“server_args”选项的参数后面多了个“-c”,这个“-c”代表可写入,默认是只读。
保存配置文件后记得要创建TFTP的根目录。

[root@localhost ~]# mkdir /tmp/tftp

还要给TFTP根目录777的权限,这里不用去想权限给大了会不会不安全,没意义,TFTP这种“简陋”的协议本身就是不安全的(基于UDP,不支持加密,任何人都可以连接)。

[root@localhost ~]# chmod 777 /tmp/tftp

最后,在保证selinux及防火墙均已关闭的情况下重启TFTP服务器。

[root@localhost ~]# service xinetd restart

服务测试:
这里客户端使用CentOS 6.5系统做测试,当然你也可以使用Windows系统做测试。
先在服务器端的TFTP根目录中新建一个文件,用以测试下载。

[root@localhost ~]# touch /tmp/tftp/testget

在客户端机器安装TFTP客户端软件。

[root@localhost ~]# yum install -y tftp

创建一个文件用以测试上传。

[root@localhost ~]# touch testput

连接TFTP服务器,本例中服务器IP地址为192.168.1.20。

[root@localhost ~]# tftp 192.168.1.20

会弹出“tftp>”提示符,在其后输入TFTP命令。
主要的TFTP命令其实就三个:

get 接文件名              //将当前目录下的文件上传至TFTP服务器
put 接文件名              //从TFTP服务器下载文件到当前目录
q                        //退出TFTP客户端工具

这里,我连接上TFTP服务器后,先将客户机家目录下的testput上传到了服务器上,又将服务器上的testget下载到客户机,最后退出了TFTP客户端工具。

查看客户机家目录是否有testget文件。

查看服务器的TFTP根目录上是否有testput文件。

如都有,则配置成功,否则就需要回过头检查下是不是哪一步出了岔子。