其中,ftp是工作在应用层的服务,与内核无关(也即可以跨平台实现),可在Linux和Linux之间、Linux和windows之间、UNIX和Linux之间实现文件共享等;nfs是工作在内核空间的,不能跨平台,且主要应用在Linux与Linux之间和Linux和UNIX之间的文件共享;samba也是工作在应用层,可以跨平台实现文件共享。以Centos 6.6为例:
ftp(File Transfer Protocol) | nfs(Netword file system) | samba(Service Message Block) | |
软件包 | vsftpd.2.2.2-13.el6_6.1.x86_64 | nfs-utils-lib-1.1.5-9.el6.x86_64 rpb-bind-0.2.0-11.el6.x86_64在Centos5.x系列上是portmap包 | 服务器端samba-3.6.23-14.el6_6.x86_64.rpm 客户端samba-client-3.6.23-14.el6_6.x86_64 |
端口 | 默认监听在 TCP 21号端口是C/S架构,客户端程序为ftp | NFS:tcp的2048和2049端口等 | tcp的139和445端口,udp的137和138端口 |
配置文件 | 用户认证配置文件:/etc/pam.d/vsftpd 配置文件目录:/etc/vsftpd 系统用户通过ftp访问的资源位置:用户自己的家目录 虚拟用户通过ftp访问的资源位置:给虚拟用户指定的映射成系统用户的家目录 | 主配置文件/etc/nfsmount.conf 要挂载一个文件系统,需要编辑/etc/exprots文件 | 服务脚本为: /etc/rc.d/init.d/nmb /etc/rc.d/init.d/smb 主配置文件为: /etc/samba/smb.conf 主要分为两段: 全局设定 特定共享的设定 私有家目录 打印机共享 自定义共享 |
配置文件格式 | character=value | /etc/exports文件格式 directory client(options) client(options) | smb.conf配置文件格式,可以通过man smb.conf查看到详细信息 name = value |
选项 | 匿名用户的配置: anonymous_enable=YES 允许匿名用户访问ftp anon_upload_enable=YES 允许匿名用户上传文件 anon_mkdir_write_enable=YES 允许匿名用户创建目录的 anon_other_write_enable=YES 允许匿名用户的写权限 系统用户的配置: local_enable=YES 允许本地用户访问ftp write_enable=YES 允许本地用户写权限 local_umask=022 允许本地用户上传文件后,文件默认权限 chroot_local_user=YES 禁锢所有的ftp本地用户于其家目录:(也即本地用户不能切换到其他目录下去操作) 日志: xferlog_enable=YES 开启ftp的上传和下载日志 xferlog_std_format=YES 传输日志使用标准格式 xferlog_file=/var/log/xferlog 指定日志文件存放的位置 chown_uploads=YES 改变上传文件的属主 chown_username=whoever 指定文件的属主 pam_service_name=vsftpd vsftpd使用pam完成用户认证,其用到的pam配置文件 /etc/pam.d/vsftpd userlist_enable=YES 启用控制用户登录的列表文件 userlist_deny=YES|NO 黑名单 为YES 不允许登录 白名单 为NO 允许登录 默认文件为/etc/vsftpd/user_list 连接限制: max_clients:最大并发连接数; max_per_ip:每个ip可同时发起的并发请求数; 传输速率: anon_max_rate: 匿名用户的最大传输速率,单位是“字节/秒” local_max_rate:本地用户的最大传输速率 | /etc/exports文件中options secure:是缺省选项,他使用了1024以下的tcp/ip端口实现NFS的连接;指定insecure可以禁用这个选项。 rw:这个选项允许NFS客户机进行读/写访问,默认是只读的 async:这个选项可以改进性能,但是如果没有完全关闭NFS守护进程就重新启动了NFS服务器,也可能会造成数据丢失,默认。 no_wdelay:这个选项关系写延时,如果设置了async,那么nfs就会忽略这个选项。 nohide:如果将一个目录挂载到另外一个目录之上,那么原来的目录通常就被隐藏起来或看起来像空的一样。要禁用此行为,需启用hide选项。 no_auth_nlm这个选项也可以作为insecure_locks 指定,它告诉NFS守护进程不要对加锁请求进行认证。如果关心安全性问题,就要避免使用这个选项。缺省选项是 auth_nlm 或 secure_locks。 mp (mountpoint=path): 通过显式地声明这个选项,NFS 要求挂载所导出的目录。 用户映射 用户映射的选项包括: | server string = Samba Server Version %v 使用samba client登录时,显示出的注释信息; interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 用于指定监听的接口和地址 hosts allow = 127. 192.168.12. 192.168.13. 白名单 Example 1: allow all IPs in 150.203.*.*; except one log file = /var/log/samba/log.%m %m是指访问samba服务的客户端ip或主机名 max log size = 50 日志文件达到50k会自动实现轮转的 任何主机访问samba时,要提供用户名和密码来访问 security = user passdb backend = tdbsam 自定义共享: [shared_name]共享名 path = /path/to/share_direcroty 共享路径(至少要有此项) comment = Comment String 说明信息 guest ok = {yes|no} 是否允许来宾账号访问和后面一项是同样的意思 public = {yes|no} writable = {yes|no}对共享目录是否有写权限 read only = {yes|no}只读权限 write list = +GROUP_NAME 写用户列表 Example: write list = admin, root, @staff |
命令 | (客户端命令,需要安装ftp包) #ftp tfp_ip #help 可以查看到所用可用的命令 | rpcinfo:报告RPC信息 rpcinfo -p 查看NFS服务器端共享的文件系统: showmount -e NFSSERVER_IP 挂载nfs文件系统 mount -t nfs server:/path/to/sharedfs /path/to/mount_point exportfs:维护exprots文件导出的文件系统表的专用工具; exportfs -ar:重新导出所有的文件系统,及连接的不会被打断 exportfs -au:关闭导出的所有文件系统 exportfs -u fs:关闭指定的导出的文件系统; | smbpasswd: -a sys_user: 添加系统用户为samba用户 -d :禁用 -e :启用 -x :删除 测试配置文件是否有语法错误,以及显示最终生效的配置; testparm 挂载samba共享目录 mount.cifs //samba_in/shared_name /path/to/dest -o username=xxxx |
ftp有两种连接方式:命令连接、数据连接
命令连接:文件管理类命令,始终在线的连接
数据连接:数据传输,按需创建及关闭的连接
其中创建数据连接的方式有2中:
主动:由服务器创建连接
命令连接:
Client用随机端口请求连接ftp服务器tcp的21号端口
数据连接:
Server用tcp的20号去主动连接客户端随机端口加1的端口,如被占用了,则客户端端口再加1,直到没用为止,进行数据传输
被动:由客户端创建连接
命令连接:
Client用随机端口请求连接ftp服务器tcp的21号端口
数据连接:
客户端用随机端口加1和ftp服务器端的一个随机端口(在客户端命令连接时,会通知FTP服务器端所用的随机端口),连接后即可进行数据传输
安装vsftpd #yum install -y vsftpd
查看vsftpd安装后生成了哪些文件 #rpm -ql vsftpd
启动vsftpd #service vsftpd start
查看tcp的21号端口是否启用 #ss -tnl | grep 21
查看用户信息的工具finger,需要安装后才可以使用
[root@localhost ~]# finger ftp
Login: ftp Name: FTP User
Directory: /var/ftp Shell: /sbin/nologin
Never logged in.
No mail.
No Plan.
家目录下有一个pub目录
[root@localhost ~]# ls /var/ftp/
pub
在远程主机上连接ftp(192.168.20.197)服务器
[root@hostpc ~]# ftp 192.168.20.197
Connected to 192.168.20.197 (192.168.20.197).
220 (vsFTPd 2.2.2)
Name (192.168.20.197:root): ftp 使用ftp用户登录
331 Please specify the password.
Password: 没有密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,20,197,248,55).
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 Oct 17 23:54 pub
226 Directory send OK.
ftp> pwd 查看当前目录,以/var/ftp为根目录
257 "/"
ftp> help 查看有哪些可使用的命令,注意这里要使用命令能正常执行,需要设置好配置文件中对应的选项
Commands may be abbreviated. Commands are:
! debug mdir sendport site
$ dir mget put size
account disconnect mkdir pwd status
append exit mls quit struct
ascii form mode quote system
bell get modtime recv sunique
binary glob mput reget tenex
bye hash newer rstatus tick
case help nmap rhelp trace
cd idle nlist rename type
cdup p_w_picpath ntrans reset user
chmod lcd open restart umask
close ls prompt rmdir verbose
cr macdef passive runique ?
delete mdelete proxy send
在windows客户端进行访问FTP服务器
NFS实现的效果对本地系统接口的调用却被映射到网络上的另一个主机被称为远程过程调用
RPC: 远程过程调用,函数调用(远程主机上的函数)
一部分功能由本地程序完成:本地内核表现NFS模块来工作
另一部分功能由远程主机上的函数完成
RPC(Remote Procedure Call)
安装nfs
#yum install -y nfs-utils 默认会安装rpcbind
查看安装了的文件#rpm -ql nfs-utils
[root@localhost ~]# rpcinfo -p 可以查看到启动了多个服务,监听了好几个端口,端口是半随机的,每次启动端口都可能不同
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100011 1 udp 875 rquotad
100011 2 udp 875 rquotad
100011 1 tcp 875 rquotad
100011 2 tcp 875 rquotad
100005 1 udp 54509 mountd
100005 1 tcp 52012 mountd
100005 2 udp 50125 mountd
100005 2 tcp 60822 mountd
100005 3 udp 37394 mountd
100005 3 tcp 60612 mountd
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 2 tcp 2049 nfs_acl
100227 3 tcp 2049 nfs_acl
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 2 udp 2049 nfs_acl
100227 3 udp 2049 nfs_acl
100021 1 udp 45102 nlockmgr
100021 3 udp 45102 nlockmgr
100021 4 udp 45102 nlockmgr
100021 1 tcp 35198 nlockmgr
100021 3 tcp 35198 nlockmgr
100021 4 tcp 35198 nlockmgr
编辑/etc/exports文件,添加如下信息:
/data 192.168.20.0/24(rw)
/www 192.168.20.161(ro) 192.168.20.166(rw)
创建目录
[root@localhost ~]# mkdir /{www,data}
[root@localhost ~]# exportfs -ar 重新导出所有的文件系统
查看NFS服务器端共享的文件系统
[root@localhost ~]# showmount -e 192.168.20.197
Export list for 192.168.20.197:
/data 192.168.20.0/24
/www 192.168.20.166,192.168.20.161
在192.168.20.166挂载到NFS上
[root@server ~]# mount -t nfs 192.168.20.197:/www /mnt
mount: wrong fs type, bad option, bad superblock on 192.168.20.197:/www,
missing codepage or helper program, or other error
(for several filesystems (e.g. nfs, cifs) you might
need a /sbin/mount.<type> helper program)
In some cases useful info is found in syslog - try
dmesg | tail or so
提示出错,这里发现用命令补全时,mount.没有mount.nfs,查看一下mount.nfs依赖的软件包
[root@server ~]# yum provides "*mount.nfs"
Loaded plugins: fastestmirror, security
Repository 'epel' is missing name in configuration, using id
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.163.com
base | 3.7 kB 00:00
epel | 4.4 kB 00:00
extras | 3.4 kB 00:00
updates | 3.4 kB 00:00
base/filelists_db | 6.1 MB 00:01
epel/filelists_db | 9.1 MB 00:02
extras/filelists_db | 31 kB 00:00
updates/filelists_db | 1.6 MB 00:00
1:nfs-utils-1.2.3-54.el6.x86_64 : NFS utilities and supporting clients and daemons for the kernel NFS server
Repo : base
Matched from:
Other : mount.nfs = 1:1.2.3-54.el6
Other : umount.nfs = 1:1.2.3-54.el6
Filename : /sbin/mount.nfs
Filename : /sbin/umount.nfs
[root@server ~]# yum install -y nfs-utils 安装好nfs-utils
[root@server ~]# mount. 命令不全已经有.nfs了
mount.nfs mount.nfs4 mount.tmpfs
[root@server ~]# mount.nfs 192.168.20.197:/www /mnt 挂载到本地/mnt目录下
[root@server ~]# mount -l 查看挂载情况
/dev/mapper/vg_lvm-lv1 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/mapper/vg_lvm-lv2 on /var type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
192.168.20.197:/www on /mnt type nfs (rw,vers=4,addr=192.168.20.197,clientaddr=192.168.20.166) 挂载好了
创建文件
[root@server ~]# echo "Hello,The NFS client 192.168.20.166" > /mnt/hello
-bash: /mnt/hello: Permission denied 没有权限,因为管理员默认是root_squash,要在此目录下创建文件需要在服务器端的/etc/exports文件中/www 192.168.20.161(ro) 192.168.20.166(rw,no_root_squash) 添加no_root_squash即可,再重新载入导出的文件系统exportfs -rv,创建文件就可以成功,但是时间会比较长
用普通用户来挂载使用nfs
客户端
创建普通用户opera,给其密码,查看其id
[root@server mnt]# useradd opera
[root@server mnt]# passwd opera
Changing password for user opera.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
[root@server ~]# id opera
uid=500(opera) gid=500(opera) groups=500(opera)
[opera@server mnt]$ ls -l
total 0
-rw-rw-r-- 1 opera opera 0 Mar 8 06:02 hello
[opera@server mnt]$ touch vnm
[opera@server mnt]$ ls -l
total 0
-rw-rw-r-- 1 opera opera 0 Mar 8 06:02 hello
-rw-rw-r-- 1 opera opera 0 Mar 8 06:06 vnm 属组和属主都是opera
服务器端
创建同样的用户,并且给定其对/www目录有写权限
[root@localhost ~]# useradd -u 500 opera
[root@localhost ~]# id opera
uid=500(opera) gid=500(opera) groups=500(opera)
[root@localhost ~]# setfacl -m u:opera:rwx /www
[root@localhost ~]# su - opera
[opera@localhost ~]$ touch /www/hello
[opera@localhost ~]$ ls /www/
hello 创建成功了
[opera@localhost ~]$ ls /www/ -l
total 0
-rw-rw-r--. 1 opera opera 0 Mar 8 06:02 hello 属组和属主是opera
再创建一个用户id为505的用户
[root@localhost ~]# useradd -u 505 fedora
[root@localhost ~]# setfacl -m u:fedora:rwx /www
[root@localhost ~]# cd /www/
[root@localhost www]# su - fedora
[fedora@localhost ~]$ touch /www/opo
[fedora@localhost ~]$ ls /www/ -l
total 0
-rw-rw-r--. 1 opera opera 0 Mar 8 06:02 hello
-rw-rw-r--. 1 fedora fedora 0 Mar 8 06:10 opo 属主和属组是fedora
-rw-rw-r--. 1 opera opera 0 Mar 8 06:06 vnm
客户端也创建一个用户id为505的用户,但用户名不同
[root@server ~]# useradd -u 505 index
[root@server ~]# su - index
[index@server ~]$ cd /mnt/
[index@server mnt]$ ls -l
total 0
-rw-rw-r-- 1 opera opera 0 Mar 8 06:02 hello
-rw-rw-r-- 1 nobody nobody 0 Mar 8 06:10 opo
-rw-rw-r-- 1 opera opera 0 Mar 8 06:06 vnm
[index@server mnt]$ mkdir pnp
[index@server mnt]$ ls -l
total 4
-rw-rw-r-- 1 opera opera 0 Mar 8 06:02 hello
-rw-rw-r-- 1 nobody nobody 0 Mar 8 06:10 opo
drwxrwxr-x 2 nobody nobody 4096 Mar 8 06:12 pnp 因为用户名不同,这里创建的用户属主和属组都是nobody用户
-rw-rw-r-- 1 opera opera 0 Mar 8 06:06 vnm
nfs认证用户是通过id号来识别用户的
实现开机自动挂载可在/etc/fstab文件中添加
serverip:/path/to/exported_fs /mount_point nfs defaults,_netdev 0 0
Samba服务器包括两个后台应用程序: Smbd 和 Nmbd。Smbd
是Samba的核心, 主要负责建立 Linux Samba服务器与Samba客户机之间的对话, 验证用户身份并提供对文件和打印系统的访问;
Nmbd主要负责对外发布Linux
Samba服务器可以提供的NetBIOS名称和浏览服务,使Windows用户可以在“网上邻居”中浏览Linux
Samba服务器中共享的资源。另外Samba还包括一些管理工具, 如 smb-client, smbmount, testparm,
Smbpasswd 等程序。
以Linux作为samba服务器,windows作为客户端
服务器端安装samba
#yum install -y samba
服务脚本为
#/etc/rc.d/init.d/nmb
#/etc/rc.d/init.d/smb
主配置文件
/etc/samba/smb.conf
共享目录需要自行创建
samba用户:都是系统用户,在/etc/passwd下用户,密码samba服务自有密码文件
启动samba服务
#service nmb start
#service smb start
查看监听的端口
#ss -tunlp
smbpasswd:
-a sys_user: 添加系统用户为samba用户
-d :禁用
-e :启用
-x :删除
[root@localhost ~]# useradd smbuser1
[root@localhost ~]# smbpasswd -a smbuser1
New SMB password:
Retype new SMB password:
Added user smbuser1.
第一次登录时,会提示你输入用户名和密码,把刚才创建的用户登录进去即可看到如下
在配置文件中添加一组自定义配置/etc/samba/smb.conf如下:
[share]
comment = My Shared Testing.
path = /share/samba
guest ok = yes
writable = yes
测试语法看是否有误
[root@localhost ~]# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[printers]"
Processing section "[share]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
[global]
workgroup = MYGROUP
server string = Samba Server Version %v
log file = /var/log/samba/log.%m
max log size = 50
idmap config * : backend = tdb
cups options = raw
[homes]
comment = Home Directories
read only = No
browseable = No
[printers]
comment = All Printers
path = /var/spool/samba
printable = Yes
print ok = Yes
browseable = No
[share]
comment = My Shared Testing.
path = /share/samba
read only = No
guest ok = Yes
创建共享目录
[root@localhost ~]# mkdir /share/samba -pv
mkdir: created directory `/share'
mkdir: created directory `/share/samba'
安装samba客户端软件samba-client,在客户端上进行访问
[root@hostpc ~]# yum install -y samba-client
连接到samba服务器
[root@hostpc ~]# smbclient //192.168.20.197/share -U smbuser1
Enter smbuser1's password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 3.6.23-14.el6_6]
smb: \> ls
. D 0 Sun Mar 8 09:12:33 2015
.. D 0 Sun Mar 8 09:12:33 2015
40317 blocks of size 262144. 30810 blocks available
smb: \> help 查看有哪些命令可以使用
? allinfo altname archive blocksize
cancel case_sensitive cd chmod chown
close del dir du echo
exit get getfacl geteas hardlink
help history iosize lcd link
lock lowercase ls l mask
md mget mkdir more mput
newer open posix posix_encrypt posix_open
posix_mkdir posix_rmdir posix_unlink print prompt
put pwd q queue quit
readlink rd recurse reget rename
reput rm rmdir showacls setea
setmode stat symlink tar tarmode
timeout translate unlock volume vuid
wdel logon listconnect showconnect ..
!
smb: \> lcd /etc 切换到本地/etc/目录下
smb: \> put issue 上传文件
NT_STATUS_ACCESS_DENIED opening remote file \issue 访问被拒绝
所有的共享权限最终结果取决于文件系统权限加共享权限的交集
在服务器端提供给smbuser1对/share/samba目录写权限
[root@localhost ~]# ls -ld /share/
drwxr-xr-x. 3 root root 4096 Mar 8 09:12 /share/
[root@localhost ~]# setfacl -m u:smbuser1:rwx /share/samba/
此时再上传文件
smb: \> put issue
putting file issue as \issue (6.6 kb/s) (average 6.6 kb/s)
smb: \> ls
. D 0 Sun Mar 8 09:20:42 2015
.. D 0 Sun Mar 8 09:12:33 2015
issue A 47 Sun Mar 8 09:20:42 2015
40317 blocks of size 262144. 30810 blocks available 发现文件了,上传成功
文件共享服务到此就结束,有什么问题可以大家来一起讨论,谢谢