linux网络文件共享服务的实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux网络文件共享服务的实现相关的知识,希望对你有一定的参考价值。
LINUX网络文件共享服务
linux网络文件共享服务的实现:
应用层:ftp
内核:nfs (Sun)
跨平台:samba
一.vsftp实现文件共享
1, 概念:
vsftpd :very secure FTP daemon,高安全性的 FTP 服务器。
ftp: File Transfer Protocol文件传输协议;属于应用层协议,使用TCP端口: 21/tcp。
FTP会话时包含了两个通道,一个叫控制通道,一个叫数据通道。
控制通道:控制通道是和FTP服务器进行沟通的通道,连接FTP,发送文件管理类命令,始终在线的连接。
数据通道:数据通道是和FTP服务器进行文件传输或者列表的通道。
FTP协议中,控制连接均由客户端发起,而数据连接有两种工作方式:PORT方式和PASV方式
PORT模式(主动方式)
FTP 客户端首先和FTPServer的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。
PASV模式(被动方式)
在建立控制通道的时候和PORT模式类似,当客户端通过这个通道发送PASV 命令的时候,FTP server打开一个随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server 将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接传送数据。
如果从C/S模型这个角度来说,PORT对于服务器来说是OUTBOUND,而PASV模式对于服务器是INBOUND,这一点请特别注意,尤其是在使用防火墙的企业里,这一点非常关键,如果设置错了,那么客户将无法连接。
响应码:
1xx: 信息
2xx: 成功类的状态码
3xx: 提示需进一步提供补充类信息的状态码
4xx: 客户端错误
5xx: 服务端错误
2, 安装配置:
CentOS6.7: 上安装vsftpd
用户认证配置文件:/etc/pam.d/vsftpd
服务脚本:/etc/rc.d/init.d/vsftpd
配置文件目录:/etc/vsftpd
主配置文件:vsftpd.conf
注意:此配置文件中所有配置,每行配置的行首都不能有空格
匿名用户(映射为ftp用户)共享资源位置:/var/ftp
系统用户通过ftp访问的资源的位置:用户自己的家目录
虚拟用户通过ftp访问的资源的位置:给虚拟用户指定的映射成为的系统用户的家目录
安装命令:yum install vsftpd
启动服务:service vsftpd start
查看检验:ss –tnlp 查看21端口是否监听
登录验证:
配置文件:/etc/vsftpd/vsftpd.conf详解:
匿名用户的配置:
anonymous_enable=YES :是否允许匿名用户
anon_upload_enable=YES :是否可以上传
anon_mkdir_write_enable=YES:是否可以创建目录
anon_ohter_write_enable=YES:是否可以删除文件和目录
系统用户的配置:
local_enable=YES:本地用户是否可用
write_enable=YES:本地用户是否有写权限
禁锢所有的ftp本地用户于其家目录中:不可随便切换到其他用户目录
chroot_local_user=YES
禁锢文件中指定的ftp本地用户于其家目录中:只锁定部分指定用户
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
日志:
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/xferlog
改变上传文件的属主:
chown_uploads=YES
chown_username=whoever
登录欢迎信息:
ftpd_banner=welcome to blash ftp servece.
vsftpd使用pam完成用户认证,其用到的pam配置文件:
pam_service_name=vsftpd
vim ftpusers :在这里的编辑的用户都无法登陆FTP
通过在pam.d中定义的vsftp文件控制的
是否启用控制用户登录的列表文件
userlist_enable=YES :是否启动控制用户登录列表文件
userlist_deny=YES|NO :是否拒绝文件中列出的用户,yes表示列表文件是黑名单,no表示列表文件是白名单
默认需手动指定文件为/etc/vsftpd/user_list;如果userlist_deny=YES,则拒绝此文件中的用户登录,如果userlist_deny=NO则只有在此文件中的用户才可以登录,没有定义的都不能登陆
连接限制:
max_clients: 最大并发连接数;
max_per_ip: 每个IP可同时发起的并发请求数;
传输速率:
anon_max_rate: 匿名用户的最大传输速率, 单位是“字节/秒”;
local_max_rate: 本地用户的最大传输速率, 单位是“字节/秒”;
实例:在/var/ftp/下新建一个目录,让系统用户有写入权限:
/etc/目录下的vsftpd/ftpusers和vsftpd/user-list两个文件与主配置文件中的"userlist_enable"和"userlist_deny"选项有着密切联系。两个文件中,每个用户名需占用一行。
以下是默认情况下ftpusers文件的内容:
以下是默认情况下user_list文件的内容:
比较两个文件的内容,会发现它们实际上是一样的。在使用两个文件时的区别在于,当userlist_enable为YES时,如果一个用户名在"vsftpd/user_list"文件中,而同时"userlist_deny"选项为"YES",则该用户在试图登录FTP服务器时,将不能够登录,甚至连输入密码的提示信息都没有,直接被FTP服务器拒绝。
而如果一个用户名在"vsftpd/ftpusers"文件中,同时"userlist_deny"选项为"YES",则该用户在试图登录FTP服务器时,将能看到输入密码的提示,但即使正确输入密码仍然不能登录FTP服务器。
userlist_deny选项和user_list文件一起能够有效地阻止"root"、"apache"和"www"等系统用户登录FTP服务器,从而保证了FTP服务器的分级安全性。
vsftpd服务器使用虚拟用户登录控制:
所有的虚拟用户会被统一映射为一个指定的系统账号,访问的共享位置即为此系统账号的家目录;
各虚拟用户可被赋予不同的访问权限;通过匿名用户的权限控制参数进行指定;
拟用户账号的存储方式:
文件:编辑文件
奇数行为用户名
偶数行为密码
此文件需要被编码为hash格式;
关系型数据库中的表中:
即时查询数据库完成用户认证;
mysql库, pam要依赖于pam_mysql
实例:mysql存储vsftpd虚拟用户:
a, 安装所需要程序
yum -yinstall mysql-server mysql-develpam_mysql
b, 创建虚拟用户账号, 准备数据库及相关表
首先请确保mysql服务已经正常启动。而后,按需要建立存储虚拟用户的数据库即可,这里将其创建为vsftpd数据库。
mysql>create database vsftpd;
mysql>grant select on vsftpd.* to [email protected] identified by‘www.magedu.com‘; :
mysql>grant select on vsftpd.* to [email protected] identified by ‘www.magedu.com‘;
mysql> flush privileges;
mysql> use vsftpd;
CREATETABLE users(
-> id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> name VARCHAR(50) BINARY NOT NULL,
-> passwordCHAR(48) BINARY NOT NULL );
添加测试的虚拟用户:
根据需要添加所需要的用户,需要说明的是,这里将其密码为了安全起见应该使用PASSWORD函数加密后存储。
mysql>insert into users(name,password) values(‘magedu1‘,password(‘magedu‘));
mysql> insert into users(name,password)values(‘magedu2‘,password(‘magedu‘));
c, 配置vsftpd
建立pam认证所需文件
#vim/etc/pam.d/vsftpd.mysql
添加如下两行:
1:认证账号密码是否匹配,2,审查是否在有效期限内
authrequired /lib64/security/pam_mysql.so user=vsftpd passwd=www.magedu.comhost=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwordcrypt=2
account required /lib64/security/pam_mysql.so user=vsftpdpasswd=www.magedu.com host=localhost db=vsftpd table=users usercolumn=namepasswdcolumn=password crypt=2
修改vsftpd的配置文件,使其适应mysql认证
建立虚拟用户映射的系统用户及对应的目录
#useradd -s /sbin/nologin -d /var/ftproot vuser
# chmodgo+rx /var/ftproot
请确保/etc/vsftpd.conf中已经启用了以下选项
anonymous_enable=NO
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES
而后添加以下选项
guest_enable=YES
guest_username=vuser :来宾账号都映射为vuser账号
并确保pam_service_name选项的值如下所示
pam_service_name=vsftpd.mysql
d,启动vsftpd服务
查看端口开启情况
# netstat-tnlp |grep :21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 23286/vsftpd
使用虚拟用户登录,验正配置结果,以下为本机的命令方式测试,你也可以在其它Win Box上用IE或者FTP客户端工具登录验正
# ftplocalhost
#service vsftpd start
# chkconfig vsftpd on
e, 配置虚拟用户具有不同的访问权限
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。
1、配置vsftpd为虚拟用户使用配置文件目录
# vimvsftpd.conf
添加如下选项,,vusers_config是目录
user_config_dir=/etc/vsftpd/vusers_config
2、创建所需要目录,并为虚拟用户提供配置文件
为每个用户创建一个和目录同名的文件
# mkdir/etc/vsftpd/vusers_config/
# cd/etc/vsftpd/vusers_config/
# touchtom jerry
3、配置虚拟用户的访问权限
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让tom用户具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/tom文件,在里面添加如下选项即可。
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}
cd/etc/vsftpd/vusers_config
vim tom
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
vimjerry
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
以上完成vsftpd实现文件共享以及用户管理。
二,NFS实现文件共享管理:
NFS:network filesystem 网络文件系统;
实现Linux系统之间的文件共享(Linux与Windows中间文件共享采用SAMBA服务),其为C/S架构,仅是一种文件系统,本身没有传输功能,基于RPC协议实现达到两个Linux系统之间的文件目录共享,其端口为:2049/tcp, 2049/udp
安装配置:
先安装rpcbind: yum install rpcbind
启动服务: systemctl startrpcbind.service
安装NFS: yum install nfs-utils –y
启动服务: systemctl start nfs.service
建立共享目录:mkdir –pv /shared/nfs
修改配置文件并重启服务后查看共享:
vim /etc/exports
/shared/nfs 192.168.1.33(rw) 192.168.1.13(ro)
exportfs命令:维护exports文件导出的文件系统表的专用工具:不用重启NFS服务就可用导出或关闭文件系统
export -ar: 重新导出所有的文件系统
export -au: 关闭导出的所有文件系统
export -u FS: 关闭指定的导出的文件系统
开机自动挂载nfs:
/etc/fstab
SERVER:/PATH/TO/EXPORTED_FS/mount_point nfs defaults,_netdev(表明网络设备,开机时不会强制挂载) 0 0
补充材料:
/etc/exports 文件中的项的格式相当简单。要共享一个文件系统,只需要编辑 /etc/exports 并使用下面的格式给出这个文件系统(和选项)即可:
directory (or file system)要导出的文件系统 客户端一client1(option1用户, option2权限)client2(option1, option2)
常用客户端(选项)
有几个常用的选项可以对 NFS 实现进行定制。这些选项包括:
secure: 这个选项是缺省选项,它使用了 1024 以下的 TCP/IP 端口实现 NFS 的连接。指定insecure 可以禁用这个选项。
rw: 这个选项允许 NFS 客户机进行读/写访问。缺省选项是只读的。
async: 这个选项可以改进性能,但是如果没有完全关闭NFS 守护进程就重新启动了 NFS 服务器,这也可能会造成数据丢失。
no_wdelay: 这个选项关闭写延时。如果设置了 async,那么 NFS 就会忽略这个选项。
nohide: 如果将一个目录挂载到另外一个目录之上,那么原来的目录通常就被隐藏起来或看起来像空的一样。要禁用这种行为,需启用 hide 选项。
no_subtree_check: 这个选项关闭子树检查,子树检查会执行一些不想忽略的安全性检查。缺省选项是启用子树检查。
no_auth_nlm: 这个选项也可以作为insecure_locks 指定,它告诉 NFS 守护进程不要对加锁请求进行认证。如果关心安全性问题,就要避免使用这个选项。缺省选项是 auth_nlm 或 secure_locks。
mp (mountpoint=path): 通过显式地声明这个选项,NFS 要求挂载所导出的目录。
fsid=num: 这个选项通常都在 NFS 故障恢复的情况中使用。如果希望实现 NFS 的故障恢复,请参考 NFS 文档。
用户映射
通过 NFS 中的用户映射,可以将伪或实际用户和组的标识赋给一个正在对 NFS 卷进行操作的用户。这个 NFS 用户具有映射所允许的用户和组的许可权限。对 NFS 卷使用一个通用的用户/组可以提供一定的安全性和灵活性,而不会带来很多管理负荷。
在使用 NFS 挂载的文件系统上的文件时,用户的访问通常都会受到限制,这就是说用户都是以匿名用户的身份来对文件进行访问的,这些用户缺省情况下对这些文件只有只读权限。这种行为对于 root 用户来说尤其重要。然而,实际上的确存在这种情况:希望用户以 root 用户或所定义的其他用户的身份访问远程文件系统上的文件。NFS 允许指定访问远程文件的用户——通过用户标识号(UID)和组标识号(GID),可以禁用正常的 squash 行为。
用户映射的选项包括:
root_squash: 这个选项不允许 root 用户访问挂载上来的 NFS卷。
no_root_squash: 这个选项允许 root 用户访问挂载上来的 NFS卷。
all_squash: 这个选项对于公共访问的 NFS 卷来说非常有用,它会限制所有的 UID 和 GID,只使用匿名用户。缺省设置是 no_all_squash。
anonuid 和 anongid: 这两个选项将匿名 UID 和 GID 修改成特定用户和组帐号。
客户端挂载时可以使用的特殊选项:
Client
Mounting remote directories
Before mounting remote directories 2daemons should be be started first:
rpcbind
rpc.statd
rsize 的值是从服务器读取的字节数。wsize 是写入到服务器的字节数。默认都是1024,如果使用比较高的值,如8192,可以提高传输速度。
The timeo value is the amount of time, intenths of a second, to wait before resending a transmission after an RPCtimeout. After the first timeout, the timeout value is doubled for each retryfor a maximum of 60 seconds or until a major timeout occurs. If connecting to aslow server or over a busy network, better performance can be achieved byincreasing this timeout value.
The intr option allows signals to interruptthe file operation if a major timeout occurs for a hard-mounted share.
三,samba安装配置:
实现的是Linux和Windows间资源互通的问题:在Linux下架设Samba服务器,在Windows下来访问。
smb: Service Message Block
CIFS:Common Internet File System
使用端口: 137/udp,138/udp, 139/tcp, 445/tcp
安装配置:
安装命令: yuminstall samba samba-client -y
服务启动:service nmbstart;service smb start
服务脚本:
/etc/rc.d/init.d/nmb
/etc/rc.d/init.d/smb
主配置文件:
/etc/samba/smb.conf
修改配置文件:将工作组修改为和windows一样WORKGROUP,定义测试共享环境,然后重启服务
vim smb.conf
vorkgroup=WORKGROUP
service nmb restart ; service smb restart
使用smbpasswd命令将系统用户smbuser1加入samba用户:
smbpasswd:
-a Sys_User: 添加系统用户为samba用户
-d :禁用
-e: 启用
-x: 删除
在另一台centos主机上验证:
在windows主机中验证:
samba客户端挂载:
注意:需安装samba-client和cifs-utils程序;否则无法挂载:
1,设置SMB共享目录:
vi /etc/samba/smb.conf ,在最后加入想要共享的文件夹:
[share]
path = /shared
available = yes
browsealbe = yes
public = yes
writable = yes
2, 设置SMB用户:
samba的帐户设置有点特别,它使用的是系统的帐户,但是要把账户映射到samba的帐户数据库,而且要设置samba密码才能使用如果该账户只用于samba访问,可以不设置系统密码,而只为账户设置samba的密码
//我使用已有的用户,设置smb用户密码后始终不能成功从远程访问,所以新建了一个系统用户
useradd smbtest
passwd 654321
//设置smb用户的密码
smbpasswd -asmbtest;//增加SMB用户,同时会提示设置密码
smbpasswd –x smbtest;//删除SMB用户
2,在另一台linux主机上执行如下命令挂载:
mount -t cifs -ousername=smbtest,password=654321 //192.168.1.19/shared /mont
注意:/mont目录需在本地先创建好。
3,设置自动挂载:
//192.168.1.19/shared /mont cifs defaults,_netdev,username=smbtest,password=654321,rw 0 0
samba图形化界面管理:
安装:yum installsamba-swat –y
修改配置文件:
vim /etc/xinetd.d/swat
启动服务:service xinetdstart
在浏览器中输入对应的服务器IP和端口,登录管理:
本文出自 “前进的轨迹” 博客,转载请与作者联系!
以上是关于linux网络文件共享服务的实现的主要内容,如果未能解决你的问题,请参考以下文章