2019独角兽企业重金招聘Python工程师标准>>>
14.4 exportfs命令
exportfs命令用来管理当前NFS共享的文件系统列表。
- 常用选项
- -a 全部挂载或者全部卸载
- -r 重新挂载
- -u 卸载某一个目录
- -v 显示共享目录
- 以下操作在服务端上 -vim /etc/exports //增加
/tmp/ 192.168.133.0/24(rw,sync,no_root_squash)
- exportfs -arv //不用重启nfs服务,配置文件就会生效
- 以下操作在客户端
- mkdir /aminglinux
- mount -t nfs -onolock 192.168.133.130:/tmp /aminglinux
- touch /aminglinux/test.txt
- ls -l !$
- -oremount,nfsvers=3
exportfs命令
- exportfs命令和nfs-utils这个包一起安装的
- 例子:
- 假设在第一次配置nfs的共享目录,之后需要新增、更改某些机器或共享的目录;
- 首先需要更改配置文件,然后重启NFS服务,但如果远程客户端正在使用NFS服务,正在挂载着,如果你需要先停止nfs服务,那远程的客户端就会挂起,就会很大的影响,造成服务异常,进程异常,有很大可能导致系统坏掉
- nfs服务不能随便重启,要重启,就需要先去服务器上,把挂载的目录卸载下来
- 在卸载目录的时候,若是在当前目录下去卸载会提示umount.nfs4: /mnt: device is busy
- 方法一:退出该目录后,再去卸载
- 方法二:在目录下卸载的时候,加 -l 选项,表示 lazy 懒惰的意思
- 在卸载目录后,在重启nfs服务
- 在卸载目录的时候,若是在当前目录下去卸载会提示umount.nfs4: /mnt: device is busy
- 若是挂载了很多台机器,那么每台机器都需要去卸载,就会很麻烦,降低了工作效率
- 方法:使用exportfs命令,重新加载下
- exportfs命令
- -a 全部挂载或者全部卸载
- -r 重新挂载
- -u 卸载某一个目录
- -v 显示共享目录
- 在B机器客户端,卸载目录
[root@localhost 01 ~]# umount /mnt/
[root@localhost 01 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 18G 6.5G 12G 37% /
devtmpfs 483M 0 483M 0% /dev
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 493M 6.7M 486M 2% /run
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/sda1 197M 109M 88M 56% /boot
tmpfs 99M 0 99M 0% /run/user/0
[root@hf-01 ~]#
- 然后在A机器服务端,使用exportfs -arv命令
- exportfs -arv命令,重新使配置文件生效
[root@localhost ~]# exportfs -arv
exporting 192.168.202.0/24:/home/nfstestdir
[root@localhost ~]#
- 验证,在A机器上的/etc/exports配置文件中,在增加一行,把 /tmp 目录单独共享给192.168.202.131 这个IP
[root@localhost ~]# vim /etc/exports
在配置文件中加入
/tmp 192.168.202.131(rw,sync,no_root_squash)
结果如下
/home/nfstestdir 192.168.202.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
/tmp 192.168.202.131(rw,sync,no_root_squash)
保存退出
- 然后在A机器服务端执行exportfs -arv命令
[root@localhost ~]# exportfs -arv
exporting 192.168.202.131:/tmp
exporting 192.168.202.0/24:/home/nfstestdir
[root@localhost ~]#
- 在B机器客户端showmount -e看是否生效——>并没有重启nfs服务,就已经生效
[root@localhost 01 ~]# showmount -e 192.168.202.130
Export list for 192.168.202.130:
/home/nfstestdir 192.168.202.0/24
/tmp 192.168.202.131
[root@localhost 01 ~]#
- 在B机器客户端挂载,将 tmp目录 挂载到 mnt 目录下
[root@localhost 01 ~]# mount -t nfs 192.168.202.130:/tmp/ /mnt/
[root@localhost 01 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 18G 6.5G 12G 37% /
devtmpfs 483M 0 483M 0% /dev
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 493M 6.7M 486M 2% /run
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/sda1 197M 109M 88M 56% /boot
tmpfs 99M 0 99M 0% /run/user/0
192.168.202.130:/tmp 18G 3.2G 15G 18% /mnt
[root@localhost 01 ~]#
- 现在在B机器客户端,查看到的/mnt/目录就是192.168.202.130IP下的tmp目录
[root@localhost 01 ~]# ls /mnt/
hanfeng.sock mysql.sock php-fcgi.sock test.com.log
[root@localhost 01 ~]#
- 再到A机器上查看tmp目录,会看到两个目录下的文件内容会一样的
[root@localhost ~]# ls /tmp/
hanfeng.sock mysql.sock php-fcgi.sock test.com.log
[root@localhost ~]#
- 这时在B机器客户端的mnt目录下创建文件,并查看目录下的文件,能看到新建的1212.txt文件的属主和属组都是root
[root@localhost 01 ~]# vim /mnt/1212.txt
[root@localhost 01 ~]# ls -l /mnt/
总用量 8
-rw-r--r-- 1 root root 12 1月 17 2018 1212.txt
srw-rw-rw- 1 root root 0 1月 17 2018 hanfeng.sock
srwxrwxrwx 1 mysql mysql 0 1月 17 2018 mysql.sock
srw-rw-rw- 1 root root 0 1月 17 2018 php-fcgi.sock
-rw-r--r-- 1 root root 2383 1月 8 19:41 test.com.log
[root@hf-01 ~]#
- 这时再到A机器服务端查看tmp目录,会看到1212.txt文件的属主和属组也是root
[root@localhost ~]# ls -l /tmp/
总用量 8
-rw-r--r--. 1 root root 12 1月 17 21:53 1212.txt
srw-rw-rw-. 1 root root 0 1月 17 18:44 hanfeng.sock
srwxrwxrwx. 1 mysql mysql 0 1月 17 18:44 mysql.sock
srw-rw-rw-. 1 root root 0 1月 17 18:44 php-fcgi.sock
-rw-r--r--. 1 root root 2383 1月 8 19:41 test.com.log
[root@hanfeng ~]#
- 这就是因为在A机器服务端的配置文件中,使用了no_root_squash ,所以root用户不受约束,在B机器上到挂载点下,到共享目录下,就可以像在本地磁盘使用root用户一样,是不受限制的(通常情况下,不限制root用户的比较多)
下面是一些NFS共享的常用参数:
ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
async NFS在写入数据前可以相应请求
secure NFS通过1024以下的安全TCP/IP端口发送
insecure NFS通过1024以上的端口发送
wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
hide 在NFS共享目录中不共享其子目录
no_hide 共享NFS目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squash root用户具有根目录的完全管理访问权限
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID
常用组合: exportfs -arv
服务端更改配置文件后,不重启服务,直接执行该命令就可以使更改后的配置文件生效。
注意: 在重启nfs服务之前需要先将所有挂载点卸载,否则将发生程序错误,严重者会拖垮系统。
以上操作均在服务端进行!!!
14.5 NFS客户端问题
针对NFS4版本在centos6中应用存在如下问题:
客户端挂载共享目录后,不管是root用户还是普通用户,创建新文件时属主、数组为nobody。
解决方法:
- 方法1:在客户端进行挂载时加上选项-o nfsvers=3
[root@localhost ~]# monunt -t nfs -o nfsvers=3 192.168.8.130:/tmp/ /mnt/
如果目录已经挂载,而又不想卸载,执行如下命令:
[root@localhost ~]# monunt -t nfs -o remount,nfsvers=3 192.168.8.130:/tmp/ /mnt/
- 方法2:客户端和服务端都需要
[root@localhost ~]# vim /etc/idmapd.conf
把该配置文件中的“Domain = local.domain.com”改为“Domain = xxx.com”(此处xxx.com自定义),然后重启rpcidmapd服务(在centos7中直接重启rpcbind服务)。
15.1 FTP介绍
FTP概述
FTP是文件传输协议(File Transfer Protocal)的简写,主要完成与远程计算机的文件传输。
FTP采用客户/服务器模式,客户机与服务器之间利用TCP建立连接,客户可以从服务器上下载文件,也可以把本地文件上传至服务器。
FTP服务器有匿名的和授权的两种。匿名的FTP服务器向公众开放,用户可以用“ftp”或“anonymous”为帐号,用电子邮箱地址为密码登录服务器;授权的FTP服务器必须用授权的账户名和密码才能登录服务器。通常匿名的用户权限较低,只能下载文件,不能上传文件。
客户机访问FTP服务器通常有两种方法:用FTP命令访问和用FTP客户端软件访问。
(rz和sz: 传文件)
rz:window-->linux
sz:linux-->window 文件超过4GB则不管用)
15.2/15.3 使用vsftpd搭建ftp
一、安装并启动FTP服务
1.查询是否系统已经自带了vsftpd :rpm -q vsftpd
2.使用 yum 安装vsftpd:yum -y install vsftpd (或者使用rpm安装vsftpd:rpm -ivh vsftpd-3.0.2-22.el7.x86_64)
3.启动vsftpd服务:service vsftpd start (设置开机启动:systemctl enable vsftpd.service)
检查vsftpd是否开启:ps -e|grep vsftpd 或者 查看21端口是否被监听,netstat -an | grep 21
可以使用netstat -ntpl | grep vsftpd命令查看到系统现在监听的vsftpd的端口为 21
4.开启防火墙
放开21端口:firewall-cmd --zone=public --add-port=21/tcp --permanent
永久开放 ftp 服務:firewall-cmd --add-service=ftp --permanent (关闭ftp服务:firewall-cmd --remove-service=ftp --permanent)
在不改变状态的条件下重新加载防火墙:firewall-cmd --reload
5、创建一个普通用户,作用是作为虚拟用户的一个映射,能让其登录使用FTP
useradd -s /sbin/nologin virftp (-s指定用户的shell,shell为/sbin/nologin这样这个用户不能登陆系统)
6、编辑虚拟用户的密码文件:(新文件)
vim /etc/vsftpd/vsftpd_login //内容如下,奇数行为用户名,偶数行为密码,多个用户就写多行
修改完做权限设置:chmod 600 /etc/vsftpd/vsftpd_login
7、将文本的密码文件装换成二进制的密码文件(生成对应的库文件)
(db_load -T -t hash -f)
db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
8、创建虚拟用户的目录和配置文件:
(1)创建虚拟用户的目录
mkdir /etc/vsftpd/vsftpd_user_conf
(2)进入到虚拟用户的目录:
cd /etc/vsftpd/vsftpd_user_conf
(3)创建虚拟用户的配置文件(文件名应该与我们设定的虚拟用户名一致)
vim testuser1 //配置文件testuser1加入如下内容
local_root=/home/virftp/testuser1 //为虚拟用户testuser1的家目录(读取文件所在处)
anonymous_enable=NO // 是否允许匿名用户
write_enable=YES //是否可行
local_umask=022 //umask的值
anon_upload_enable=NO //是否允许匿名用户上传文件
anon_mkdir_write_enable=NO //是否允许匿名用户可写、创建用户
idle_session_timeout=600 //连接空闲超时时间,超时就重新登录
data_connection_timeout=120 //传输文件超时时间
max_clients=10 //最大客户端数
9.创建虚拟用户testuser1的家目录:
mkdir /home/virftp/testuser1
创建一个文件(测试可以看到)
touch /home/virftp/testuser1/cansheng.txt
10.修改/home/virftp/的主和组:
chown -R virftp:virftp /home/virftp
11.修改认证的文件/etc/pam.d/vsftpd:
vim /etc/pam.d/vsftpd 添加下列内容
//在最前面加上
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
(密码文件,centos7为64位系统,所以库文件路径为/lib64/security/pam_userdb.so,32位系统为:/lib/security/pam_userdb.so 这个文件一定要存在且写对,不然虚拟用户登录ftp服务时会认证失败)
12.修改全局配置文件/etc/vsftpd/vsftpd.conf
再增加如下内容
chroot_local_user=YES
guest_enable=YES //是否允许虚拟用户映射
guest_username=virftp //这个就是虚拟用户映射到的系统用户virftp
virtual_use_local_privs=YES //
user_config_dir=/etc/vsftpd/vsftpd_user_conf //创建的虚拟用户的目录
allow_writeable_chroot=YES
13.启动服务:
systemctl start vsftpd
测试:
(1)可以在window下安装一个客户端软件:filezilla client
(2)在linux下测试,下载lftp :yum install -y lftp
使用lftp:
lftp testuser1@127.0.0.1 虚拟用户登录
在用虚拟用户登录了一个ftp。
1.下载命令,get
get cansheng.txt (把虚拟用户下的文件cansheng.txt下载到服务器当前目录下)
2.上传命令:put
window下测试,下载filezilla client,登录后也是进行拖拉就行。
在xshell上实现同样的功能,上传、下载:
链接后登录
使用下载命令后,
get cansheng.txt
保存路径为在C:\Users\kenson\Documents\NetSarang\Xshell\Sessions\
xshell时的安装路径
可能用到的命令:
systemctl start firewalld 启动防火墙服务
firewall-cmd --add-service=ftp 暂时开放ftp服务
firewall-cmd --add-service=ftp --permanent永久开放ftp服務
firewall-cmd --remove-service=ftp --permanent永久关闭ftp服務
systemctl restart firewalld 重启firewalld服务
firewall-cmd --reload 重载配置文件
firewall-cmd --query-service ftp查看服务的启动状态
firewall-cmd --list-all 显示防火墙应用列表
firewall-cmd --add-port=8001/tcp 添加自定义的开放端口
iptables -L -n | grep 21 查看设定是否生效
firewall-cmd --state 检测防火墙状态
二、配置 FTP 权限
1、了解 VSFTP 配置
vsftpd 的配置目录为 /etc/vsftpd,包含下列的配置文件:
vsftpd.conf 为主要配置文件
ftpusers 配置禁止访问 FTP 服务器的用户列表
user_list 配置用户访问控制------这里的用户默认情况(即在/etc/vsftpd/vsftpd.conf中设置了userlist_deny=YES)下也不能访问FTP服务器
2、阻止匿名访问和切换根目录
匿名访问和切换根目录都会给服务器带来安全风险,我们把这两个功能关闭。编辑 /etc/vsftpd/vsftpd.conf,找到下面两处配置并修改:
# 禁用匿名用户 YES 改为NO anonymous_enable=NO
# 禁止切换根目录 删除# chroot_local_user=YES
编辑完成后保存配置,重新启动 FTP 服务 service vsftpd restart
其它配置项说明:
anonymous_enable=YES #允许匿名登陆
local_enable=YES #启动home目录
write_enable=YES #ftp写的权限
local_umask=022
dirmessage_enable=YES #连接打印的消息
connect_from_port_20=YES #20端口
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=300
accept_timeout=60
connect_timeout=60
ascii_upload_enable=YES #上传
ascii_download_enable=YES #下载
chroot_local_user=NO #是否限制用户在主目录活动
chroot_list_enable=YES #启动限制用户的列表
chroot_list_file=/etc/vsftpd/chroot_list #每行一个用户名
allow_writeable_chroot=YES #允许写
listen=NO
listen_ipv6=YES
pasv_min_port=50000 允许ftp工具访问的端口起止端口
pasv_max_port=60000
pam_service_name=vsftpd #配置虚拟用户需要的
userlist_enable=NO #配置yes之后,user_list的用户不能访问ftp
tcp_wrappers=YES
chroot_list 文件需要自己建,内容一行一个用户名字
anon_root=/data/ftp/public #修改匿名用户的访问路径
3 创建 FTP 用户
新建一个不能登录系统用户. 只用来登录ftp服务 ,这里如果没设置用户目录。默认是在home下:
useradd ftpuser -s /sbin/nologin
为ftpuser用户设置密码:passwd ftpuser
可能用到:
设置用户的主目录:usermod -d /data/ftp ftpuser
彻底删除用户:#userdel -rf Fuser //强制删除用户及相关目录文件
变更用户属性:#usermod -s /sbin/nologinftpuser (/bin/bash:可以登录shell,/bin/false:禁止登录shell )
查看当前服务:#netstat -lntp
三、访问FTP
通过 FTP 客户端工具访问
FTP 客户端工具众多,下面推荐两个常用的:
WinSCP- Windows 下的 FTP 和 SFTP 连接客户端
FileZilla - 跨平台的 FTP 客户端,支持 Windows 和 Mac
本人测试时使用的是Xftp
打开Xftp软件,新建一个会话,输入对应的信息,点击确定(查看ip地址:ip addr)
选中我们新建的会话,点击连接
连接成功后就可以使用Xftp上传文件了
四、要使用Xshell连接,则需要安装openssh-service
查看是否安装ssh安装包,CentOS是被访问者,所以需要安装ssh-server安装包(如果没任何输出显示表示没有安装 openssh-server,可以通过输入
yum install openssh-serve进行安装),查看命令为:rpm -qa | grep ssh,如下图所示,已经安装:找到/etc/ssh目录下的sshd_config文件,修改一些参数。去掉端口和监听地址的注释;然后允许远程登录;再开启使用用户名密码作为连接验证
开启sshd服务,service sshd start
检查sshd是否开启,ps -e|grep sshd
或者查看22端口是否被监听,netstat -an | grep 22
使用Xshell进行连接,打开Xshell软件,新建一个会话,输入对应的信息,点击确定(查看ip地址:ip addr)
选中我们新建的会话,点击连接
连接成功后就可以使用Xshell执行命令了
参考文章:
http://www.linuxidc.com/Linux/2017-08/146085.htm
http://www.linuxidc.com/Linux/2017-11/148518.htm
https://jingyan.baidu.com/article/adc81513944addf723bf73af.html
http://blog.csdn.net/u013410747/article/details/60964943
NFS参考链接:
nfs安装:https://my.oschina.net/u/1458120/blog/205484
NFS的安装和配置:https://my.oschina.net/shyl/blog/484825
Linux NFS服务器的安装与配置:http://www.cnblogs.com/mchina/archive/2013/01/03/2840040.html
https://my.oschina.net/direnjie/blog/542030
NFS搭建:https://my.oschina.net/weisky/blog/720748
NFS的使用:https://my.oschina.net/xishuixixia/blog/77745
centos nfs服务器简单配置:https://my.oschina.net/u/195896/blog/335317
Linux下通过NFS将远程磁盘mount到本地:https://www.linuxidc.com/Linux/2016-04/130504.htm
NFS配置及开机自动挂载:https://www.cnblogs.com/heruiguo/p/7998260.html
Linux下配置nfs并远程挂载:https://www.cnblogs.com/freeweb/p/6593861.html