exportfs命令
▲ exportfs 命令实际上是和nfs-utils这个包一起安装的,exportfs这个命令有什么用呢?假如说第一次配置了nfs共享目录,那过段时间,我们需要增加几台机器或者增加某几个目录, 首先需要增改配置文件,更改配置文件之后呢,还需要重启nfs服务,但如果,远程客户端实在nfs或者正在挂载,如果你要先停止nfs,远程客户端将会挂起,那么这种影响还是蛮大的.
例如有三台机器,A,B,C,如果A机器共享了一个目录,那么它B机器上也会在A机器上读写文件,那B机器正在读写的时候,A机器把nfs服务停掉了,停掉之后呢,B机器上还在挂载着共享的目录(nfs服务都停了,那么肯定是不能正常访问的),此时如果B服务器读写非常频繁的话,那它就会导致读写这个文件的进程(比如说nginx或php)就会挂起. 之前有学过ps aux这个命令是查看进程的,有个“d” 这个d就表示这个进程不能中断. 此时如果nfs一停,进程状态就会变成d,一旦变成了d,那么B服务器进程就不正常,这个进程想杀也杀不死,要重启也重启不了,最终导致服务异常,甚至是把机器搞死.很明显nfs服务不能随便重启,如果要重启,需要把B或者C服务器上挂载的目录,先卸载下来.
▲ 例如客户端已经挂载服务端共享的目录,现在需要重启nfs服务,那么就需要先把客服端挂载的共享目录先卸载.但若挂载了十几台机器共享的目录,那么一台一台去卸载十分的麻烦,有种不需要这么麻烦的办法,那就是exportsfs命令
▲exportfs 命令常用选项如下:
● -a 全部挂载或者全部卸载
● -r 重新挂载
● -u卸载某一个目录
● -v 显示共享目录
▲ 使用exportfs -avr 命令,配置文件就会生效.
[root@root-01 ~]# exportfs -avrexporting 192.168.2.0/24:/home/nfstestdir
● 做一个实验,在/etc/exports文件增加一条配置
说明 在服务端
[root@root-01 ~]# vim /etc/exports/home/nfstestdir 192.168.2.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)/tmp/ 192.168.2.180(rw,sync,no_root_squash) --->新增的
● 保存退出/etc/exports文件之后,执行exportfs -avr命令
说明 执行exportfs -avr命令之后,刚/etc/exports文件新增的配置就生效了.
[root@root-01 ~]# exportfs -avrexporting 192.168.2.180:/tmpexporting 192.168.2.0/24:/home/nfstestdir
▲ 挂载服务端共享的/tmp/目录 挂载到/home/目录
说明 在客户端
[root@root-02 ~]# mount -t nfs 192.168.2.179:/tmp/ /home/[root@root-02 ~]# df -h文件系统 容量 已用 可用 已用% 挂载点/dev/sda3 17G 3.4G 14G 20% /devtmpfs 480M 0 480M 0% /devtmpfs 489M 0 489M 0% /dev/shmtmpfs 489M 6.8M 483M 2% /runtmpfs 489M 0 489M 0% /sys/fs/cgroup/dev/sda1 1014M 125M 890M 13% /boottmpfs 98M 0 98M 0% /run/user/0192.168.2.179:/home/nfstestdir 17G 3.5G 14G 21% /mnt192.168.2.179:/tmp 17G 3.5G 14G 21% /home
● 进入home目录,写一个文件
说明 客服端和服务端 dong.txt文件属主和属组都是root,是因为/etc/exports文件配置了"no_root_squash" 不限制root.
[root@root-02 ~]# cd /home/[root@root-02 home]# vim dong.txtaghhhkskasahkghaojgwogjdkhsal[root@root-02 home]# ls -ld dong.txt-rw-r--r--. 1 root root 32 8月 20 09:02 dong.txt
NFS客户端问题
▲ 客户端文件属主属组nobody
关于nfs的小知识点,在centos 6的时候呢,遇到的比较多,这种情况不是每次都有,偶尔会出现,是什么情况呢,首先是针对nfs 4版本会有该问题. 什么问题呢,客服端挂载共享目录后,不管是root用户还是普通用户,创建文件时属主和属组为nobody,创建完之后属主和属组不是root,也不是我们限定的uid和gid 1000, 而是显示成了nobody, 这个问题是nfs 4版本问题,尤其是在centos 6上.
▲要解决这种问题有两种方案:
第一种方案:客户端挂载时加上 -o nfsvers=3 (是指定nfs版本为3 版本)
说明 做法:先执行 mount -t nfs -o nfsvers=3 192.168.2.179:/tmp/ /mnt/
再执行 mount -t nfs -oremount,nfsvers=3 192.168.2.179:/tmp/ /home/
[root@root-02 ~]# umount /home/[root@root-02 ~]# mount -t nfs -o nfsvers=3 192.168.2.179:/tmp/ /home/[root@root-02 ~]# df -h文件系统 容量 已用 可用 已用% 挂载点/dev/sda3 17G 3.4G 14G 20% /devtmpfs 480M 0 480M 0% /devtmpfs 489M 0 489M 0% /dev/shmtmpfs 489M 6.8M 483M 2% /runtmpfs 489M 0 489M 0% /sys/fs/cgroup/dev/sda1 1014M 125M 890M 13% /boottmpfs 98M 0 98M 0% /run/user/0192.168.2.179:/home/nfstestdir 17G 3.5G 14G 21% /mnt192.168.2.179:/tmp/ 17G 3.5G 14G 21% /home[root@root-02 ~]# mount -t nfs -oremount,nfsvers=3 192.168.2.179:/tmp/ /home/
● 第二种方案:是需要编辑/etc/idmapd.conf
把 “#Domain = ” 改为 “Domain = ”(域名随意定义),然后再重启rpcdmapd服务
说明 在cetos 7里面是没有rpcidmapd服务的,重启rpcbind即可.
FTP介绍
▲ 讲完了NFS,再一种和文件共享有关的服务叫作FPT,FPT用在什么场景下呢,之前有讲过 rz 和 sz Windows 和 linux 系统 两者互相传数据,可以使用rz把Windows的文件传到linux上,也可以通过sz把linux上文件传输到Windows上,rz 和 sz 命令有时候会不好用,比如说文件比较大超过了4G, 就没办法使用了. 也有另外一种情况,我们在使用阿里云的机器的时候呢,从一台机器跳到了另外一台机器,那也就说中间有个跳板机,这时候使用rz 或者sz 传输数据的时候,也会出问题,除此之外还有一些其他的解决方案,比如说FPT,FPT就可以让我们在服务器上,linux系统上 搭建一个FPT的服务,那客服端可以安装一个客户端软件,就可以连到服务端,把本地的文件传到服务器上去,也可以把服务器上的文件下载到本地来,这个就FPT服务器.
▲ FTP介绍
● FTP是File Transfer Protocol(文件传输协议,简称文传协议)的英文检查,用于在Internet上控制文件的双向传输.
● FTP的主要作用就是让用户连接一个远程计算机(这些计算机运行着FPT服务器程序),并查看远程计算中的文件,然后把文件从远程计算机复制到本地计算机,或者是把本地计算机的文件传送到远程计算机.
● 小公司用的多,大企业不用FPT,因为不安全
对FTP服务来讲,安全性差了一点,所以大企业基本上是不使用FTP,小公司用得会比较多一些. 比如有一些程序员为了方便把他本地的一些网站程序传到服务器上去,那他可以使用FPT,很方便. 既然说FTP是传文件的,那咱们的网站有些版本更新的时候,需要传输文件到服务器上去,那这个时候很有可能会用到FPT, 但是对于大企业来讲,他们并不是使用FPT去传输文件,而是使用了自动化发布的工具,什么叫自动发布呢?程序员要想发布一个新的版本,比如说我们的网站有一些新的需求,更改了若干个程序,若干个文件,那么可以直接使用FPT传输网站上去,但是这样管理起来不方便,也不规范,也不安全,所以就有GIT,关于GIT铭哥前面有介绍到,这是一个版本管理工具,大企业会使用GIT工具去管理网站程序的版本. 例如某个版本,更改了若干个文件,针对这个版本的更改发布了一个新版本,版本号2.1.2,给新的版本起个名字,然后再针对2.1.2这个版本再去更新,上线,它肯定用的不是FPT,用的是自动化发布平台,它的目的是所涉及到的文件把它传到服务器上去,至于是怎么实现的呢,后续铭哥会介绍.
使用vsftpd搭建ftp服务
▲ 第1步: 在centos系统上自带vsftpd服务,vsftpd服务安装很简单,yum install -y vsftpd即可
[root@root-01 ~]# yum install -y vsftpd
说明:首先vsftpd 服务是可以使用系统级别的用户,例如说创建一个普通用户aming,设置一个密码,这时候可以使用vsftpd启动这个服务,然后用aming这个用户去登录,只不过登录的形式不是ssh,而是ftp,登录之后会进入到aming这个用户的家目录,不过这样不太安全,比毕竟要给这个用户设置密码,设置密码之后,肯定需要让它能够去登录操作系统,所以认为不太安全. 所以想了一个办法,给ftp设置一个虚拟用户,虚拟用户映射成系统里面的一个普通用户,也可以映射多个虚拟用户,即使虚拟用户给了用户名和密码,也是没有办法通过ssh登录我们服务器的这台机器的, 这相对来说就安全了很多.
第2步: 创建一个普通用户
说明 这普通用户的目的是为让虚拟用户来做一个映射的.毕竟要登录这台机器,需要传输数据(去下载,或去网上传),那以为哪个用户去传呢? 所以就需要创建一个用户.
-s选项 是指定这个用户的shell, /sbin/nologin表示不能登录系统,这样做是为了安全.
[root@root-01 ~]# useradd -s /sbin/nologin virftp
第3步:编辑/etc/vsftpd/vsftpd_login (虚拟用户的密码文件)
说明 奇数行为用户名,偶数行为密码
[root@root-01 ~]# vim /etc/vsftpd/vsftpd_logintestuser1aminglinuxuser1anna1006
● 给/etc/vsftpd/vsftpd_login设置权限
[root@root-01 ~]# chmod 600 /etc/vsftpd/vsftpd_login
● 把/etc/vsftpd/vsftpd_login密码文件调成计算机识别的二进制文件.
调二进制文件命令如下:
[root@root-01 ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
第4步: 创建虚拟用户所在的目录
[root@root-01 ~]# mkdir /etc/vsftpd/vsftpd_user_conf
● 进入 /etc/vsftpd/vsftpd_user_conf目录,创建第一个用户的配置文件.
说明 配置文件名需要和用户名保持一致
[root@root-01 ~]# cd /etc/vsftpd/vsftpd_user_conf[root@root-01 vsftpd_user_conf]# vim testuser1local_root=/home/virftp/testuser1 anonymous_enable=NOwrite_enable=YESlocal_umask=022anon_upload_enable=NOanon_mkdir_write_enable=NOidle_session_timeout=600data_connection_timeout=120max_clients=10参数含义:local_root=/home/virftp/testuser1 -->定义虚拟用户的家目录搭建ftp的服务, 从Windows登录到Linux,需要知道去哪个目录下写文件,读文件,所以就需要定义一个目录anonymous_enable=NO --> 是否允许匿名用户write_enable=YES --> 是否允许可写local_umask=022 --> 定义umask值是为了创建新的文件或目录的时候,权限是什么.anon_upload_enable=NO --> 表示匿名用户是否可上传anon_mkdir_write_enable=NO -->是否允许匿名用户可创建目录并且写idle_session_timeout=600 --> 当我们连接ftp之后,传输完数据或者写完数据后,多少秒自动断开.data_connection_timeout=120 --> 数据传输的超出时间max_clients=10 -->最大的客户端是多少
● 创建完虚拟用户的配置文件,现在创建虚拟用户的家目录
说明 因为刚在配置虚拟用配置文件的时候,定义了虚拟用户的家目录,所以需要创建一下
[root@root-01 vsftpd_user_conf]# mkdir /home/virftp/testuser1
● 在/home/virftp/testuser1目录下创建一个文件
[root@root-01 vsftpd_user_conf]# touch /home/virftp/testuser1/aming.txt
● 修改权限
[root@root-01 vsftpd_user_conf]# chown -R virftp:virftp /home/virftp
● 编辑/etc/pam.d/vsftpd 定义密码文件路径
说明 这是用认证的一个文件,登录FTP需要有一个认证的过程,那这认证的过程肯定得告诉它,通过什么样的形式去认证,认证的时候去哪里找密码库,输入用户名,用户名 & 密码对不对,总得要有一个库去比对.
在Centos 6的时候呢,是因为区分版本32位和64位,如果操作系统是32位,在/etc/pam.d/vsftpd 文件写了/lib64/security/pam_userdb.so db,结果显示文件不存在,那么用户名和密码正确也无法认证.在Centos 6的时候呢,是因为区分版本32位和64位,如果操作系统是32位,在/etc/pam.d/vsftpd 文件写了/lib64/security/pam_userdb.so db,结果显示文件不存在,那么用户名和密码正确也无法认证. 所以这个/lib64/security/pam_userdb.so文件必须是存在的.
[root@root-01 vsftpd_user_conf]# vim /etc/pam.d/vsftpd加入这两行(放置最上面)auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_loginaccount sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
第5步:编辑FTP的主配置文件
[root@root-01 vsftpd_user_conf]# vim /etc/vsftpd/vsftpd.confanonymous_enable=YES 更改为 anonymous_enable=No#anon_upload_enable=YES 更改为 anon_upload_enable=NO#anon_mkdir_write_enable=YES 更改为 anon_mkdir_write_enable=NO在最下面增加以下配置:chroot_local_user=YESguest_enable=YESguest_username=virftpvirtual_use_local_privs=YESuser_config_dir=/etc/vsftpd/vsftpd_user_confallow_writeable_chroot=YES配置参数详解:chroot_local_user=YESguest_enable=YES --> 要想guest_username生效,guest_enable得是YES才行.guest_username=virftp --> 虚拟用户肯定需要映射到系统用户,映射到哪个用户,就用guest_username去定义virtual_use_local_privs=YES --> 是为了告诉服务现在使用的虚拟用户user_config_dir=/etc/vsftpd/vsftpd_user_conf --> 定义虚拟用户配置文件所在路径allow_writeable_chroot=YES
第6步:启动vsftpd服务
[root@root-01 vsftpd_user_conf]# systemctl start vsftpd
● ps aux查看vsftpd服务启动是否成功.
[root@root-01 vsftpd_user_conf]# ps aux |grep vsftpdroot 5191 0.0 0.0 50636 556 ? Ss 13:51 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.confroot 5193 0.0 0.0 112660 960 pts/1 S+ 13:57 0:00 grep --color=auto vsftpd
● 查看vsftpd服务监听的端口
说明 vsftpd服务监听的端口是21
[root@root-01 vsftpd_user_conf]# netstat -nlptActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3752/php-fpm: maste 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 4839/rpc.mountd tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1919/nginx: master tcp 0 0 0.0.0.0:40214 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1349/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2592/master tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:42756 0.0.0.0:* LISTEN 4830/rpc.statd tcp6 0 0 :::3306 :::* LISTEN 2554/mysqld tcp6 0 0 :::111 :::* LISTEN 1/systemd tcp6 0 0 :::20048 :::* LISTEN 4839/rpc.mountd tcp6 0 0 :::21 :::* LISTEN 5191/vsftpd tcp6 0 0 :::22 :::* LISTEN 1349/sshd tcp6 0 0 ::1:25 :::* LISTEN 2592/master tcp6 0 0 :::46556 :::* LISTEN 4830/rpc.statd tcp6 0 0 :::59488 :::* LISTEN - tcp6 0 0 :::2049 :::* LISTEN -
▲在Windows上安装FTP的客户端filezilla client ,这是FTP的开源软件. 可以搭建服务,同时也有客服端软件.
▲为了测试,可以在linux上安装lftp
[root@root-01 vsftpd_user_conf]# yum install -y lftp
● 用法
说明 testuser1是用户名;口令是密码
[root@root-01 ~]# lftp testuser1@127.0.0.1口令: lftp testuser1@127.0.0.1:~> ls -rw-r--r-- 1 1002 1002 0 Aug 20 04:29 aming.txtlftp testuser1@127.0.0.1:/>
● lftp 常用的命令有:put get
例如get一个文件,会下载到当前的目录.
lftp testuser1@127.0.0.1:/> get aming.txtget: Access failed: 550 Failed to open file. (aming.txt)
说明 ftp下载文件失败get: Access failed: 550 Failed to open file. (aming.txt)
原因是被SELinux安全访问控制策略限制了.
解决:
[root@root-01 ~]# setsebool -P allow_ftpd_full_access 1
● 重新登录,再get 下载文件就可以了.
[root@root-01 ~]# lftp testuser1@127.0.0.1口令: lftp testuser1@127.0.0.1:~> ls -rw-r--r-- 1 1002 1002 0 Aug 20 04:29 aming.txtlftp testuser1@127.0.0.1:/> get aming.txt[root@root-01 ~]# lsaming.txt anaconda-ks.cfg
▲ xshell 如何实现与lftp一样的功能
第1种方案:
新增一个会话 -- 协议选:SFTP -- 名称:192.168.2.179-01-sftp -- 主机:192.168.2.179 -- 端口默认22 -- 登录 --输入用户名: root -- 输入密码:586898 --- 登录成功
说明 登录成功后,默认是在root下
Connecting to 192.168.2.179:22...Connection established.To escape to local shell, press 'Ctrl+Alt+]'.Your current local directory isC:\Users\Administrator\Documents\NetSarang\Xshell\SessionsType `help' to browse available commnands.sftp:/root>
●一样可以使用ls;mv;cd;get;等命令
sftp:/root> lsdr-xr-x--- 6 root root 4096 Aug 20 14:34 .dr-xr-xr-x 18 root root 4096 Aug 9 11:57 ..-rw-r--r-- 1 root root 18 Dec 29 2013 .bash_logout-rw-r--r-- 1 root root 176 Dec 29 2013 .bash_profile-rw-r--r-- 1 root root 176 Dec 29 2013 .bashrc-rw-r--r-- 1 root root 100 Dec 29 2013 .cshrc-rw-r--r-- 1 root root 129 Dec 29 2013 .tcshrc-rw------- 1 root root 1128 Jul 20 11:10 anaconda-ks.cfgdrwx------ 2 root root 46 Jul 20 15:30 .ssh-rw------- 1 root root 19531 Aug 20 14:46 .bash_historydrwxr----- 3 root root 18 Aug 12 07:35 .pkidrwxr-xr-x 3 root root 18 Aug 20 14:23 .local-rw-r--r-- 1 root root 0 Aug 20 12:29 aming.txt-rw------- 1 root root 1024 Aug 12 06:51 .rnd-rw------- 1 root root 9613 Aug 20 13:50 .viminfodrwxr-xr-x 3 root root 17 Aug 20 14:23 .config
● 在会话属性,SFTP可以指定文件存贮的路径.
说明 比如get一个文件下来,那么可以就指定存放的地方