Linux学习笔记--18(vsftpd、tftp、samba服务传输文件)

文件传输协议

TP是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用20、21号端口,其中端口20(数据端口)用于进行数据传输,端口21(命令端口)用于接收客户端发出的相关FTP命令与参数。FTP服务器普遍不属于内网中,具有容易搭建、方便管理的特点。有些FTP客户端工具还可以支持文件的多点下载及断点续传技术。
FTP服务器是按照FTP协议在互联网上提供文件存储和访问服务的主机,FTP客户端则是向服务器发送连接请求,以建立数据传输链路的主机。
FTP协议工作模式:
主动模式:FTP服务器主动向客户端发起连接请求。
被动模式:FTP服务器等待客户端发起连接请求(FTP默认工作模式)。
防火墙一般是用于过滤外网进入内网的流量,因此需要将FTP的工作模式设置为主动模式,才可以传输数据。下图是FTP协议传输的拓扑图
在这里插入图片描述
vsftpd(very secure ftp demon,非常安全的FTP守护进程)是一款运行在Linux系统上的FTP服务程序。配置yum,然后就可安装vsftpd

# yum install vsftpd

清空防火墙的策略,并保把当前已经被清理的防火墙策略状态保存下来

# iptables -F
# service iptables save

然后再把 FTP 协议添加到 firewalld 服务的允许列表中

# firewall-cmd --permanent --zone=public --add-service=ftp
# firewall-cmd --reload

vsftpd服务程序的主配置文件(/etc/vsftpd/vsftpd.conf)可以用grep -v 反选行,然后将过滤后的参数行通过输出重定向符写回原始的主配置文件中

# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
# grep -v “#” /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
# cat /etc/vsftpd/vsftpd.conf

vsftpd服务程序常用的参数以及作用
在这里插入图片描述

vsftpd服务程序

vsftpd作为更加安全的文件传输的服务程序,允许用户三种认证模式登陆到FTP服务器上。
匿名开发模式:是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器。
本地用户模式:是通过Linux系统本地的账号密码信息进行认证的模式,相较于匿名开发模式更安全,而且配置也简单。但如被黑客破解了,就可以控制服务器。
虚拟用户模式:是这三种模式中最安全的一种认证模式,需要为FTP服务单独建立用户数据库文件,虚拟出口令验证的账号信息,这些账户信息在服务器系统中实际是不存在的,仅供FTP服务认证使用。
ftp是命令行界面方式管理FTP传输服务的客户端工具,先安装ftp客户端工具

# yum install ftp

匿名开发模式

这种模式是最不安全的模式,一般用来访问不重要的公开文件,生产环境中尽量不要存放重要文件。当然,采用防火墙管理工具(如Tcp-wrappers服务程序)将vsftp服务程序允许访问的主机范围设置为企业内网有可提供基本的安全性。
vsftpd服务程序默认开启了匿名开放模式,我们要做的就是匿名用户的上传、下载文件的权限,及匿名用户创建、删除、更名文件的权限。注意,这些权限会带来危险。
可以向匿名用户开放的权限参数及作用:
在这里插入图片描述
在这里插入图片描述
修改完后保存退出并从起vsftpd服务程序。还要加入开机启动项中。

# systemctl restart vsftpd
# systemctl enable vsftpd

在这里插入图片描述
出现错误,排除思路: 防火墙,权限,SELinux安全上下文
在这里插入图片描述
如出现如下错误:
在这里插入图片描述
则,修改

# chmod a-w /var/ftp
配置文件中添加
allow_writeable_chroot=YES

在这里插入图片描述

本地用户模式

本地用户模式使用的权限参数及作用
在这里插入图片描述
配置文件
在这里插入图片描述
重启服务后,连接权限阻止
在这里插入图片描述
(root用户登录被拒绝。因为vsftpd服务程序的目录中存放着用户名单文件ftpusers和user_list,这两个文件里面有某用户名,就限制这个用户登录到FTP服务器上)。
我们把这两个文件里面root给去掉,当然也可以用一个没有普通用户的登录试试。
在这里插入图片描述
在这里插入图片描述
然后用root登录即可看到成功
在这里插入图片描述

虚拟用户模式

相对前两个模式安全性有了提升,配置也就复杂些。
第一步:创建用于进行FTP认证的用户数据库文件,其中奇数行为账户名,偶数行为密码。

# cd /etc/vsftpd/
# vim vuser.list
zhangsan
redhat
lisi
redhat

上面的明文信息不安全也不符合vsftpd服务程序直接加载的格式,需要用db_load命令用哈希算法将原始明文信息文件转换成数据库文件,并且降低数据库文件的权限,然后把原始的明文信息文件删除。

# db_load -T -t hash -f vuser.list vuser.db
# file vuser.db
# chmod 600 vuser.db
# rm -f vuser.list

第二步:创建vsftpd服务程序用于存储文件的根目录及虚拟用户映射的系统本地用户。
FTP服务用于存储文件的根目录指的是,当虚拟用户登录后访问的默认位置。
前面建的用户比如,张三是个虚拟用户,如果建了文件会出现文件权限错误,所以张三映射到本地用户,这样本地用户的家目录为虚拟用户做了个映射。
添加本地用户,家目录为/var目录中,不允许登录FTP服务器

# useradd -d /var/ftproot -s /sbin/nologin vuser
# ls -ld /var/ftproot/
# chmod -Rf 755 /var/ftproot/

第三步:建立用于支持虚拟用户的PAM文件。
PAM(可插拔认证模块)是一种认证机制,通过一些动态链接库和统一的API把系统提供的服务与认证方式分开,是系统管理员可以根据需求灵活调整服务程序的不同认证方式。
PAM采取的分层设计(应用程序层、应用接口层、鉴别模块层)
在这里插入图片描述
新建一个用于虚拟用户认证的PAM文件vsftpd.vu,其中PAM文件内的”db=”参数为使用db_load命令生成的账号密码数据库文件的路径,但不用谢数据库文件的后缀

# vim /etc/pam.d/vsftpd.vu
auth     required    pam_userdb.so db=/etc/vsftpd/vuser
account  required    pam_userdb.so db=/etc/vsftpd/vuser

第四步:在vsftpd服务程序的主配置文件中通过pam_service_name 参数将PAM认证文件的名称修改为vsftpd.vu。当应用程序需要PAM认证是,需要在应用程序中定义负责认证的PAM配置文件,实现所需的认证功能。
默认的参数pam_service_name=vsftpd,表示登录FTP服务器时是根据/etc/pam.d/vsftpd文件进行安全认证的。
把vsftpd主配置文件中原有的PAM认证文件vsftpd修改为新建的vsftpd.vu即可。
利用PAM文件进行认证时使用的参数及作用
在这里插入图片描述
修改配置文件
在这里插入图片描述
第五步:为虚拟用户设置不同的权限。
如,张三上传、创建、修改、查看、删除文件,李四查看文件。
只需新建一个目录,分别建两个文件zhangsan和lisi。zhangsan设置写入允许的相关权限即可(使用匿名用户的参数)

# mkdir /etc/vsftpd/vusers_dir/
# cd /etc/vsftpd/vusers_dir/
# touch lisi
# vim zhangsan 
anon_upload__enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

再次修改vsftpd配置文件,添加user_config_dir参数来定义两个虚拟用户不同权限的配置文件所存放路径,重启服务并加入开机启动中
在这里插入图片描述
第六步:设置SELinux域允许策略,然后用虚拟用户模式登陆FTP服务器。

# getsebool -a | grep ftp
# setsebool -P  ftpd_full_access=on

分别用zhangsan 和 lisi进行验证
在这里插入图片描述
最后总结一下在使用不同的方式登录文件传输服务器后,默认所在的位置:
在这里插入图片描述

TFTP简单文件传输协议

简单文件传输协议(Trivial File Transfer Protocol,TFTP)是一种基于UDP协议在客户端和服务器之间进行简单文件传输的协议。占用的端口号为69,不需要客户端的权限认证,也就减少了无谓的系统和网络带宽消耗,因此在传输琐碎(trivial)不大的文件时,效率更高。
第一步:安装

# yum install tftp-server tftp xinetd

第二步:在RHEL 8系统中,tftp所对应的配置文件默认不存在,需要用户根据示例文件(/usr/share/doc/xinetd/sample.conf)自行创建。在xinetd服务程序中开启,把默认的禁用disable参数改为no。
修改后,重启服务并加入开机启动中,考虑有些系统的防火墙可能默认没允许UDP协议的69端口,还要手动将端口号加入到防火墙的允许策略中。
在这里插入图片描述

# systemctl restart tftp
# systemctl enable tftp
# systemctl restart xinetd
# systemctl enable xinetd
# firewall-cmd --permanent --add-port=69/udp
# firewall-cmd --reload

第三步:验证。TFTP根目录为/var/lib/tftpboot。可用刚tftp命令尝试访问其中的文件。
tftp命令中可用的参数以及作用
在这里插入图片描述
在这里插入图片描述

Samba文件共享服务

SMD(Server Message Block)服务器消息协议,旨在解决局域网内的文件或打印机等资源共享问题。
先要安装Samba服务程序

# yum install samba

由于Samba服务程序主配置文件,注释信息太多,所以改名,然后进行cat 读取,再用grep -v 参数 方向选择,分别去掉所有以井号和分号开头的注释信息行,对于剩余的空白行可以用^$参数来表示并进行反选过滤,最后把过滤后的可有参数信息通过重定向覆盖吸入到原始文件名称中。

# vim /etc/samba/smb.conf 
# systemctl restart smb
# systemctl enable smb

最后需要的就剩下
在这里插入图片描述

Samba服务程序中的参数及作用

行数参数作用
1# See smb.conf.example for a more detailed config file or注释信息
2# read the smb.conf manpage.
3# Run ‘testparm’ to verify the config is correct after
4# you modified it.
5[global]全局参数
6workgroup = SAMBA工作组名称
7
8security = user安全验证的方式,总共有4种
9
10passdb backend = tdbsam定义用户后台的类型,总共有3种
11
12printing = cups打印服务协议
13printcap name = cups打印服务名称
14load printers = yes是否加载打印机
15cups options = raw打印机的选项
16
17[homes]共享名称
18comment = Home Directories描述信息
19valid users = %S, %D%w%S可用账户
20browseable = No指定共享信息是否在“网上邻居”中可见
21read only = No是否只读
22inherit acls = Yes是否继承访问控制列表
23
24[printers]共享名称
25comment = All Printers描述信息
26path = /var/tmp共享路径
27printable = Yes是否可打印
28create mask = 0600文件权限
29browseable = No指定共享信息是否在“网上邻居”中可见
30
31[print$]共享名称
32comment = Printer Drivers描述信息
33path = /var/lib/samba/drivers共享路径
34write list = @printadmin root可写入文件的用户列表
35force group = @printadmin用户组列表
36create mask = 0664文件权限
37directory mask = 0775目录权限
security参数代表用户登录Samba服务时采用的验证方式。总共有4种可用参数。
share:代表主机无须验证密码。这相当于vsftpd服务的匿名公开访问模式,比较方便,但安全性很差。
user:代表登录Samba服务时需要使用账号密码进行验证,通过后才能获取到文件。这是默认的验证方式,最为常用。
domain:代表通过域控制器进行身份验证,用来限制用户的来源域。
server:代表使用独立主机验证来访用户提供的密码。这相当于集中管理账号,并不常用。

在5、6版本中替换成了用smbpasswd命令来设置独立的Samba服务账号和密码。
到了RHEL 7/8版本将传统的验证方式换成使用tdbsam数据库进行验证。这是一个专门用于保存Samba服务账号密码的数据库,用户需要用pdbedit命令进行独立的添加操作。

配置共享资源

全局配置参数用于设置整体的资源共享环境,对里面的每一个独立的共享资源都有效。区域配置参数则用于设置单独的共享资源,且仅对改资源有效。
用于设置Samba服务程序的参数以及作用
在这里插入图片描述
第一步:创建用于访问共享资源的账号信息。Samba默认使用的是用户口令认证模式(user)。
这种认证模式可以确保仅让密码且授信的用户访问共享资源。不过需要先建账户信息数据库之后才可用口令认证模式。另外数据库要求账户必须在当前系统中已经存在,否则日后创建文件时将导致文件权限属性混乱。
pdbedit用于管理SMB数据库账户信息,格式为“pdbedit [选项] 账户”。
用于pdbedit命令的参数及作用
在这里插入图片描述

# id linuxprobe
# pdbedit -a -u linuxprobe

第二步:创建用于共享资源的文件目录。要考虑权限及SELinux安全上下文的限制。

# mkdir /home/database
# chown -Rf linuxprobe:linuxprobe /home/database
# semanage fcontext -a -t samba_share_t /home/database
# restorecon -Rv /home/database

第三步: 设置SELinux服务与策略,允许通过Samba服务程序访问普通用户家目录。

# getsebool -a | grep samba
# setsebool -P samba_enable_home_dirs on

第四步:在Samba主配置文件中,按照格式写入共享信息。
在这里插入图片描述
第五步:Samba服务重启并清空iptables防火墙。

# systemctl restart smb
# systemctl enable smb
# iptables -F
# service iptables save
# firewall-cmd --permanent --add-service=samba
# firewall-cmd --reload

第六步:可以使用“systemctl status smb”命令查看服务器是否启动了Samba服务。如果想进一步查看Samba服务都共享了哪些目录,则可以使用smbclient命令来查看共享详情;-U参数指定了用户名称(用哪位用户挂载了Samba服务,就用哪位用户的身份进行查看);-L参数列出了共享清单。

smbclient -U linuxprobe -L 192.168.153.10

Windows访问文件共享服务

无论Samba共享服务是部署windows系统上还是部署在linux上,通过windows系统进行访问是,其步骤和方法一样。
例如:Windows访问linux上Samba服务
在运行中直接录入\192.168.153.10,如果linux上的iptables关了。就可以登录共享界面了,注意:假如你的登录的账号和系统账号一样,但是Samba的密码不一定是你登录系统用户的密码。两者密码可以不一致,Samba有独自的账号和密码。
进入之后可以创建、修改、删除、更名等操作。
因windows缓存问题,如果再次登录不行可以尝试重启Windows客户端

![在这里插入图片描述](https://img-blog.csdnimg.cn/4031cd3e2dfa43ffa345f3505680596f.p
在这里插入图片描述

Linux挂载共享

在客户端安装支持文件共享服务的软件包(cifs-utils)

# yum install cifs-utils

在Linux客户端创建一个用于挂载Samba服务共享资源的目录。mount命令中的-t参数用于指定协议类型,-o参数用于指定用户名和密码,最后追加上服务器IP地址、共享名称和本地挂载目录即可。
服务器IP地址后面的共享名称指的是配置文件中[database]的值,而不是服务器本地挂载的目录名称。

# mkdir /database
# mount -t cifs -o username=linuxprobe,password=redhat //192.168.10.10/database /database
# df -h

在这里插入图片描述
如不想每次都输入用户密码,在客户端按照Samba服务的用户名、密码、共享域的顺序将相关信息写入到一个认证文件中。为了安全把这个认证文件的权限改为仅root管理员才能够读写:

# vim auth.smb
username=linuxprobe
password=redhat
domain=SAMBA
# chmod 600 auth.smb

在客户端上创建一个用于挂载Samba服务共享资源的目录,并把挂载信息写入到/etc/fstab中,确保共享挂载信息在服务器重启后依然生效。

# mkdir /database
# vim /etc/fstab
//192.168.10.10/database /database cifs credentials=/root/auth.smb,_netdev 0 0
# mount -a (可能包含权限问题,需要授权chmod )
# df -h

照片

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值