本文索引:shell
在nfs运行后的一段时间内,若是须要添加共享目录,这时须要修改exports文件,并重启服务使之生效。然而此时可能有客户端已经挂载了共享目录,而且正在执行读写操做。这时咱们就不能直接关闭服务器上的nfs服务,这样极易致使客户端上的读写nfs共享目录内文件的进程挂起,致使进程状态不正常,既没法删除也没法重启,严重时将致使客户端宕机。直接重启nfs服务的前提是将挂载了共享目录的客户机卸载目录,在客户端不少的状况下,这种方法就变得十分繁琐。vim
nfs-utils包内自带了一个exportfs命令,能够在不关闭nfs服务的状况下生效修改后的exports文件。centos
例如在服务器进行以下修改安全
[root@server ~]# vim /etc/exports /home/nfstestdir 192.168.65.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000) # 添加以下代码 /tmp 192.168.65.134(rw,sync,no_root_squash)
此时客户端上查看的共享目录信息未变服务器
[root@client ~]# showmount -e 192.168.65.133 Export list for 192.168.65.133: /home/nfstestdir 192.168.65.0/24
执行exportfs目录后从新查看session
[root@server ~]# exportfs -arv exporting 192.168.65.134:/tmp exporting 192.168.65.0/24:/home/nfstestdir # 客户端信息更新 [root@client ~]# showmount -e 192.168.65.133 Export list for 192.168.65.133: /home/nfstestdir 192.168.65.0/24 /tmp 192.168.65.134
测试配置是否生效tcp
[root@client ~]# mount -t nfs 192.168.65.133:/tmp /mnt [root@client ~]# vim /mnt/11.txt # no_root_squash参数生效 [root@client ~]# ls -l /mnt/11.txt -rw-r--r--. 1 root root 11 1月 10 20:00 /mnt/11.txt [root@server ~]# ls -l /tmp/11.txt -rw-r--r--. 1 root root 11 1月 10 20:00 /tmp/11.txt
在centos6版本中,NFSv4偶尔会出现一个问题:客户端在挂载共享目录后,即使是在服务端设定好no_root_squash参数后,不管是root用户还普通用户,在建立新文件时,文件的属主和属组都为nobody。测试
解决上述问题的方法:ui
-o nfsvers=3
,即指定nfs版本为3,不去使用v4版本。# 方法1:先umount,后mount [root@client ~]# umount /mnt [root@client ~]# mount -t nfs -o nfsvers=3 192.168.65.133:/tmp /mnt # 使用-o remount命令(前提已经挂载) [root@client~]# mount -t nfs -oremount,nfsvers=3 192.168.65.133:/tmp /mnt
# 客户端、服务器都须要进行配置 [root@localhost ~]# vim /etc/idmapd.conf /Domain定义到该行 在下一行添加 Domain = xxx.com //域名能够随意,客户端、服务器对应便可 # 完成后在服务器上重启rpcbind服务 [root@localhost ~]# systemctl restart rpcbind
FTP是File Transfer Protocol
文件传输协议)的英文简称,用于在Internet上控制文件的双向传输。debug
ftp的主要做用就是让用户链接一个远程计算机(运行ftp访问的服务器),并查看远程计算机中的文件,而后把文件从远程计算机复制到本地计算机,或把本机计算机的文件传输到远程计算机。
出于安全性的考虑,ftp在小公司用的比较多。大企业几乎不怎么使用,而是使用专门的自动化发布平台,相对而言更加安全。
centos上的ftp软件包 vsftpd
vsftpd能够由系统级别的用户去登陆ftp,登陆后用户会进入其家目录下。因为这些ftp用户(系统级别用户)设置密码后,能够登陆到系统,极易产生一些安全问题。咱们能够经过给FTP服务设置一个虚拟的用户,并映射为系统内的普通用户,这些虚拟用户就没法直接登陆服务器,安全性就比较好。
[root@localhost ~]# yum install -y vsftpd
# 建立用户指定shell为/sbin/nologin,不让用户登陆系统 [root@localhost ~]# useradd -s /sbin/nologin virftp
# 密码文件格式:奇数行为用户名,偶数行为密码 [root@localhost ~]# vim /etc/vsftpd/vsftpd_login test 1 # 修改权限,只有属主有读写权限 [root@localhost ~]# chmod 600 /etc/vsftpd/vsftpd_login
# 文本型的密码文件不被识别,须要转换为计算机可识别的二进制文件 [root@localhost ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db [root@localhost ~]# ls -l /etc/vsftpd/vsftpd_login* -rw-r--r--. 1 root root 7 1月 11 18:31 /etc/vsftpd/vsftpd_login -rw-r--r--. 1 root root 12288 1月 11 18:37 /etc/vsftpd/vsftpd_login.db
# 存储配置文件的目录须要直接建立,目录名自定义 [root@localhost ~]# mkdir /etc/vsftpd/vsftpd_user_conf [root@localhost ~]# cd /etc/vsftpd/vsftpd_user_conf # 配置文件的文件名须要跟密码文件内的用户名对应 # 好比我在/etc/vsftpd/vsftpd_login下定义的用户时test,这里配置文件就是test [root@localhost vsftpd_user_conf]# vim test // 输入如下代码 // 定义虚拟用户的家目录,用户在该目录读写文件 local_root=/home/virftp/test // 不容许匿名用户 anonymous_enable=NO // 容许写 write_enable=YES // 虚拟用户建立新文件、目录的umask值 local_umask=022 // 不容许匿名用户上传 anon_upload_enable=NO // 不容许匿名用户建立目录并写文件 anon_mkdir_write_enable=NO // 空闲用户时间,超过自动断开链接 idle_session_timeout=600 // 数据传输的超时时间 data_connection_timeout=120 // 最大链接的客户端数 max_clients=10
[root@localhost vsftpd_user_conf]# mkdir /home/virftp/test [root@localhost vsftpd_user_conf]# touch /home/virftp/test/1.txt # 修改目录的权限,防止因权限致使的没法读写问题 [root@localhost vsftpd_user_conf]# chown -R virftp:virftp /home/virftp/
# /etc/pam.d/vsftpd 用来认证的文件,登陆ftp时,经过该文件比对用户及密码十分准确 [root@localhost vsftpd_user_conf]# vim /etc/pam.d/vsftpd #%PAM-1.0 # 在开头添加下面两行代码 auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
对于/etc/pam.d/vsftpd内添加的代码说明:/lib64/security/pam_userdb.so是64位系统内的库文件路径,在centos6版本内还有32位的系统,这时须要修改成/lib/security/pam_userdb.so。
[root@localhost vsftpd_user_conf]# vim /etc/vsftpd/vsftpd.conf anonymous_enable=NO //原为:anonymous_enable=YES anon_upload_enable=NO //原为:#anon_upload_enable=YES anon_mkdir_write_enable=NO //原为:#anon_mkdir_write_enable=YES #再添加以下代码 chroot_local_user=YES guest_enable=YES guest_username=virftp // 指定虚拟用户 virtual_use_local_privs=YES //表示如今使用了虚拟用户 user_config_dir=/etc/vsftpd/vsftpd_user_conf //定义虚拟配置文件所在目录 allow_writeable_chroot=YES
[root@localhost vsftpd_user_conf]# systemctl start vsftpd # 服务已启动 [root@localhost vsftpd_user_conf]# ps aux| grep vsftp root 2486 0.0 0.0 53216 580 ? Ss 19:17 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf root 2488 0.0 0.0 112680 976 pts/0 S+ 19:19 0:00 grep --color=auto vsftp # 21端口已开 [root@localhost vsftpd_user_conf]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name ... tcp6 0 0 :::21 :::* LISTEN 2486/vsftpd ...
启动时报错“Job for vsftpd.service failed because the control process exited with error code.”,其缘由是配置文件vsftpd.conf内参数写错,因此遇到启动不了能够查看配置参数是否正确。
Windows上推荐使用filezilla,为了测试的方便,在测试机安装lftp软件便可。
[root@localhost vsftpd_user_conf]# yum install -y lftp
# 登陆ftp服务器:用户名@127.0.0.1,输入密码 [root@localhost vsftpd_user_conf]# lftp test@127.0.0.1 口令: # 成功登陆 # ls查看当前目录下的文件 lftp test@127.0.0.1:~> ls -rw-r--r-- 1 1002 1002 0 Jan 11 10:47 1.txt # ?查看可操做的命令 lftp test@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> # get命令从ftp服务器上下载文件到本机 lftp test@127.0.0.1:/> get 1.txt lftp test@127.0.0.1:/> quit # get命令下载的文件默认在登陆前的用户所在目录 [root@localhost vsftpd_user_conf]# ls 1.txt test