目录
一 、exportfs命令
二、NFS客户端问题
三、FTP介绍
四、使用vsftpd搭建ftp
一 、exportfs命令
首次配置完成NFS的共享目录后,如果想要要对共享目录或信任主机进行修改,则需要修改配置文件和重启NFS服务。但此时远程客户端有可能正在挂载并使用NFS的共享目录,重启服务会导致远程客户端被挂起,无法提供服务。所以想重启NFS服务需要先将客户端上挂载的NFS格式的分区或目录卸载。
当有几十台甚至更多的服务器挂载了NFS格式的分区,挂载和卸载会比较困难,此时就会用到exportfs命令。当改变/etc/exports配置文件后,使用exportfs命令挂载不需要重启NFS服务。
exportfs命令
常用选项:
-a 全部挂载或者全部卸载
-r 重新挂载
-u 卸载某一个目录
-v 显示共享目录
- 服务端修改配置文件
[root@minglinux-01 ~] vim /etc/exports
//增加一行
1 /home/nfstestdir 192.168.162.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
2 /tmp 192.168.162.132(rw,sync,no_root_squash)
[root@minglinux-01 ~] exportfs -arv //执行exportfs命令使修改生效
exporting 192.168.162.132:/tmp
exporting 192.168.162.0/24:/home/nfstestdir
- 在客户端查看
[root@minglinux-02 ~] showmount -e 192.168.162.130
Export list for 192.168.162.130:
/home/nfstestdir 192.168.162.0/24
/tmp 192.168.162.132
[root@minglinux-02 ~] mount -t nfs 192.168.162.130:/tmp/ /mnt/
mount.nfs: /mnt is busy or already mounted
[root@minglinux-02 ~] umount -l /mnt/
[root@minglinux-02 ~] mount -t nfs 192.168.162.130:/tmp/ /mnt/
//用mount命令来挂载NFS服务要用-t nfs来指定挂载的类型为nfs
[root@minglinux-02 ~] df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 28G 3.1G 25G 11% /
devtmpfs 901M 0 901M 0% /dev
tmpfs 911M 0 911M 0% /dev/shm
tmpfs 911M 9.6M 902M 2% /run
tmpfs 911M 0 911M 0% /sys/fs/cgroup
/dev/sda1 197M 140M 58M 71% /boot
tmpfs 183M 0 183M 0% /run/user/0
192.168.162.130:/tmp 28G 6.6G 22G 24% /mnt
[root@minglinux-02 ~] ls /mnt/ //该目录即为服务端的tmp目录
ming.sock mysql_all.sql mysql.sock test.com.log vmware-root
mysql2.sql mysqlbak.sql php-fcgi.sock user.sql
[root@minglinux-02 ~] vim /mnt/1.txt //创建一个新文件
[root@minglinux-02 ~] ls -l /mnt/1.txt
-rw-r--r--. 1 root root 8 12月 11 20:04 /mnt/1.txt
- 服务端查看
[root@minglinux-01 ~] ls -l /tmp/
总用量 1980
-rw-r--r-- 1 root root 8 12月 11 20:04 1.txt
srw-rw-rw- 1 root root 0 12月 8 23:03 ming.sock
-rw-r--r-- 1 root root 30853 12月 6 23:31 mysql2.sql
-rw-r--r-- 1 root root 1317840 12月 6 23:29 mysql_all.sql
-rw-r--r-- 1 root root 659126 12月 6 23:17 mysqlbak.sql
srwxrwxrwx 1 mysql mysql 0 12月 8 23:03 mysql.sock
srw-rw-rw- 1 root root 0 12月 8 23:03 php-fcgi.sock
-rw-r--r-- 1 root root 1567 12月 3 23:17 test.com.log
-rw-r--r-- 1 root root 6541 12月 6 23:24 user.sql
drwx------ 2 root root 6 12月 11 17:23 vmware-root
二、NFS客户端问题
问题:客户端挂载共享目录后,不管是root用户还是普通用户,创建新文件时属主、属组为nobody。NFS的4版本有该问题,偶尔会出现。
解决方法:指定nfs的版本为3,客户端和服务端均需要指定。
方案1:客户端挂载时加上 -o nfsvers=3
[root@minglinux-02 ~] mount -t nfs -onfsvers=3 192.168.162.130:/tmp/ /mnt/
[root@minglinux-02 ~] mount -t nfs -oremount,nfsvers=3 192.168.162.130:/tmp/ /mnt/
- 方案2:vim /etc/idmapd.conf
// 把“#Domain = local.domain.edu” 改为 “Domain = xxx.com” (这里的xxx.com,随意定义吧),然后再重启rpcidmapd服务(centos7下重启rpcbind服务)
[root@minglinux-02 ~] vim /etc/idmapd.conf
···
5 #Domain = local.domain.edu
6 Domain = xxx.com
···
[root@minglinux-02 ~] systemctl restart rpcbind
三、FTP介绍
- FTP是File Transfer Protocol(文件传输协议,简称文传协议)的英文简称,用于在Internet上控制文件的双向传输。
- FTP的主要作用就是让用户连接一个远程计算机(这些计算机上运行着-FTP服务器程序),并查看远程计算机中的文件,然后把文件从远程计算机复制到本地计算机,或把本地计算机的文件传送到远程计算机。
- 小公司用的多,大企业不用FTP,因为不安全。Git是一个版本管理工具,许多企业用该工具管理网站程序的版本。
四、使用vsftpd搭建ftp
CentOS或者Red Hat Linux上有自带的FTP软件vsftpd,默认并没有安装,需要用yum安装,安装后不用配置,启动后便可以使用。
- 安装vsftpd
[root@minglinux-01 ~] yum install -y vsftpd
vsftpd默认可以支持使用系统账号体系登录,但这样不太安全。我们可以创建虚拟用户,并将虚拟用户映射为系统中的某个普通用户,但虚拟用户无法用于登录linux系统的。
- 创建虚拟用户
[root@minglinux-01 ~] useradd -s /sbin/nologin virftp
//为了FTP传输文件专门创建的虚拟用户,-s指定用户的shell,/sbin/nologin则该用户无法登录系统
- 建立与虚拟账户相关的文件
[root@minglinux-01 ~] vim /etc/vsftpd/vsftpd_login //更改该文件的权限,提升安全级别
##该文件的奇数行为用户名,偶数行为上一行的用户密码。
1 ming1
2 123456
3 ming2
4 abcdef
[root@minglinux-01 ~] chmod 600 /etc/vsftpd/vsftpd_login
[root@minglinux-01 ~] cat !$
cat /etc/vsftpd/vsftpd_login
ming1
123456
ming2
abcdef
[root@minglinux-01 ~] db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
//将文本形式的密码文件转换为计算机识别的二进制密码文件
[root@minglinux-01 ~] ls -l /etc/vsftpd/
总用量 36
-rw------- 1 root root 125 10月 31 03:45 ftpusers
-rw------- 1 root root 361 10月 31 03:45 user_list
-rw------- 1 root root 5116 10月 31 03:45 vsftpd.conf
-rwxr--r-- 1 root root 338 10月 31 03:45 vsftpd_conf_migrate.sh
-rw------- 1 root root 26 12月 11 23:33 vsftpd_login
-rw-r--r-- 1 root root 12288 12月 11 23:34 vsftpd_login.db
- 建立与虚拟账号相关的目录以及配置文件
[root@minglinux-01 /etc/vsftpd/vsftpd_user_conf] vim ming1
//用户的配置文件是单独存在的,每一个用户都有一个自己的配置文件,文件名和用户名一致
//写入如下内容
1 local_root=/home/virftp/ming1
2 anonymous_enable=NO
3 write_enable=YES
4 local_umask=022
5 anon_upload_enable=NO
6 anon_mkdir_write_enable=NO
7 idle_session_timeout=600
8 data_connection_timeout=120
9 max_clients=10
local_root为ming1账号的家目录,登录系统的虚拟用户会在该目录下读写文件
anonymous_enable用来限制是否允许匿名账号登录(若为NO,表示不
允许匿名账号登录)
write_enable=YES表示可写
local_umask指定umask值
anon_ upload_enable表示是否允许匿名账号上传文件anon_mkdir_write_enable表示是否允许匿名账号可写
idle_session_timeout表示空闲状态下的超时时间
data_connection_timeout表示数据传输超时时间
max_clients表示最大客户端连接数
- 创建虚拟用户家目录
[root@minglinux-01 /etc/vsftpd/vsftpd_user_conf] mkdir /home/virftp/ming1
[root@minglinux-01 /etc/vsftpd/vsftpd_user_conf] cd /home/virftp
[root@minglinux-01 /home/virftp] touch /home/virftp/ming1/ming.txt
[root@minglinux-01 /home/virftp] chown -R virftp:virftp /home/virftp
[root@minglinux-01 /home/virftp] ls -ld
drwx------ 3 virftp virftp 75 12月 11 23:50 .
[root@minglinux-01 /home/virftp] ll
总用量 0
drwxr-xr-x 2 virftp virftp 22 12月 12 00:10 ming1
- 定义密码文件位置
[root@minglinux-01 /home/virftp] vim /etc/pam.d/vsftpd
//该文件为登录ftp时用于认证的文件,记录登录ftp认证时的认证形式和认证时使用的密码库位置等信息
//插入2和3两行内容
1 #%PAM-1.0
2 auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
3 account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
4 session optional pam_keyinit.so force revoke
5 auth required pam_listfile.so item=user sense=deny file=/etc/vsftp d/ftpusers onerr=succeed
6 auth required pam_shells.so
7 auth include password-auth
8 account include password-auth
9 session required pam_loginuid.so
10 session include password-auth
CentOS7为64位系统,所以库文件路径为/lib64/security/pam_userdb.so(32位系统的库文件路径为/lib/security/pam_userdb.so)。
- 修改vsftpd的主配置文件
···
12 anonymous_enable=NO //将anonymous_enable=YES 改为 anonymous_enable=NO
···
29 anon_upload_enable=NO // 将#anon_upload_enable=YES 改为 anon_upload_enable=NO
···
33 anon_mkdir_write_enable=NO // 将#anon_mkdir_write_enable=YES 改为 anon_mkdir_write_enable=NO
···
增加如下内容
130 chroot_local_user=YES
131 guest_enable=YES
132 guest_username=virftp
133 virtual_use_local_privs=YES
134 user_config_dir=/etc/vsftpd/vsftpd_user_conf
135 allow_writeable_chroot=YES
- 启动vsftpd服务
[root@minglinux-01 /home/virftp] systemctl start vsftpd
[root@minglinux-01 /home/virftp] ps aux | grep vsftp
root 4043 0.0 0.0 53260 576 ? Ss 00:30 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 4046 0.0 0.0 112720 984 pts/1 S+ 00:33 0:00 grep --color=auto vsftp
[root@minglinux-01 /home/virftp] netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 1512/rpc.mountd
tcp 0 0 0.0.0.0:56309 0.0.0.0:* LISTEN 1504/rpc.statd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 782/sshd
tcp 0 0 0.0.0.0:34296 0.0.0.0:* LISTEN -
tcp6 0 0 :::2049 :::* LISTEN -
tcp6 0 0 :::36705 :::* LISTEN 1504/rpc.statd
tcp6 0 0 :::3306 :::* LISTEN 1225/mysqld
tcp6 0 0 :::33900 :::* LISTEN -
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::20048 :::* LISTEN 1512/rpc.mountd
tcp6 0 0 :::21 :::* LISTEN 4043/vsftpd
tcp6 0 0 :::22 :::* LISTEN 782/sshd
- 安装linux上的ftp客户端软件lftp
yum install -y lftp
- 测试
[root@minglinux-01 /home/virftp] lftp ming1@127.0.0.1
口令:
lftp ming1@127.0.0.1:~> ls
-rw-r--r-- 1 1014 1014 0 Dec 11 16:10 ming.txt
lftp ming1@127.0.0.1:/> ?
!<shell-command> (commands)
alias [<name> [<value>]] attach [PID]
bookmark [SUBCMD] cache [SUBCMD]
cat [-b] <files> cd <rdir>
chmod [OPTS] mode file... close [-a]
[re]cls [opts] [path/][pattern] debug [<level>|off] [-o <file>]
du [options] <dirs> exit [<code>|bg]
get [OPTS] <rfile> [-o <lfile>] glob [OPTS] <cmd> <args>
help [<cmd>] history -w file|-r file|-c|-l [cnt]
jobs [-v] [<job_no...>] kill all|<job_no>
lcd <ldir> lftp [OPTS] <site>
ln [-s] <file1> <file2> ls [<args>]
mget [OPTS] <files> mirror [OPTS] [remote [local]]
mkdir [-p] <dirs> module name [args]
more <files> mput [OPTS] <files>
mrm <files> mv <file1> <file2>
[re]nlist [<args>] open [OPTS] <site>
pget [OPTS] <rfile> [-o <lfile>] put [OPTS] <lfile> [-o <rfile>]
pwd [-p] queue [OPTS] [<cmd>]
quote <cmd> repeat [OPTS] [delay] [command]
rm [-r] [-f] <files> rmdir [-f] <dirs>
scache [<session_no>] set [OPT] [<var> [<val>]]
site <site-cmd> source <file>
torrent [-O <dir>] <file|URL>... user <user|URL> [<pass>]
wait [<jobno>] zcat <files>
zmore <files>
lftp ming1@127.0.0.1:/> get ming.txt
lftp ming1@127.0.0.1:/> quit
[root@minglinux-01 /home/virftp] ls
ming1 ming.txt
使用lftp成功登录vsftpd,并且ls列出ming1用户家目录下面的ming.txt,其中1014为virftp用户的uid和gid。
输入?后回车可以查看支持的命令。
get命令获取远程服务端的文件,文件下载到当前目录下。
- Windows上用xshell实现与ftp类似的功能
- 使用SFTP实现:
-
新建会话
-
输入用户名和密码连接
-
成功登录
测试get一个文件
sftp:/root> cd /tmp
sftp:/tmp> ls
drwxrwxrwt 8 root root 276 Dec 12 00:35 .
dr-xr-xr-x 19 root root 271 Nov 10 16:09 ..
drwxrwxrwt 2 root root 6 Sep 5 01:18 .font-unix
drwxrwxrwt 2 root root 6 Sep 5 01:18 .XIM-unix
drwxrwxrwt 2 root root 6 Sep 5 01:18 .X11-unix
drwxrwxrwt 2 root root 6 Sep 5 01:18 .Test-unix
drwxrwxrwt 2 root root 6 Sep 5 01:18 .ICE-unix
-rw-r--r-- 1 root root 1567 Dec 3 23:17 test.com.log
-rw-r--r-- 1 root root 659126 Dec 6 23:17 mysqlbak.sql
-rw-r--r-- 1 root root 6541 Dec 6 23:24 user.sql
-rw-r--r-- 1 root root 1317840 Dec 6 23:29 mysql_all.sql
-rw-r--r-- 1 root root 30853 Dec 6 23:31 mysql2.sql
srw-rw-rw- 1 root root 0 Dec 8 23:03 ming.sock
srw-rw-rw- 1 root root 0 Dec 8 23:03 php-fcgi.sock
srwxrwxrwx 1 mysql mysql 0 Dec 8 23:03 mysql.sock
drwx------ 2 root root 6 Dec 11 17:23 vmware-root
-rw-r--r-- 1 root root 8 Dec 11 20:04 1.txt
sftp:/tmp> get php-fcgi.sock //无权限读取该文件
sftp: cannot open /tmp/php-fcgi.sock to read
sftp:/tmp> get user.sql //获取成功
Fetching /tmp/user.sql to user.sql
sftp: received 6.38 KB in 0.01 seconds
- 设置文件存储的路径
-
使用xftp实现:
下载xftp连接即可