码迷,mamicode.com
首页 > 其他好文 > 详细

nfs和ftp服务的搭建

时间:2015-05-26 16:22:02      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:nfs ftp

一. NFS

NFS全称是network file system

 NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。 

举例:

假如有三台机器A, B, C,它们需要访问同一个目录,目录中都是图片,传统的做法是把这些图片分别放到A, B, C. 但是使用NFS只需要放到A上,然后A共享给B和C即可。访问的时候,B和C是通过网络的方式去访问A上的那个目录的。 


1.服务端安装、配置NFS

[root@webserver ~]#  yum install -y nfs-utils   //同时会安装依赖的包rpcbind

[root@webserver ~]# vi /etc/exports

  /home/ 192.168.1.0/24(rw,sync,all_squash,anonuid=501,anongid=501) 

共分为三部分,第一部分就是本地要共享出去的目录,第二部分为允许访问的主机(可以是一个IP也可以是一个IP段)第三部分就是小括号里面的,为一些权限选项。它表示:共享的目录为/home,信任的主机为192.168.1.0/24这个网段,权限为读写,同步,限定所有使用者,并且限定的uid和gid都为501。

[root@webserver ~]# /etc/init.d/rpcbind start; /etc/init.d/nfs start
启动 NFS 服务:                                                 [确定]
启动 NFS mountd:                                           [确定]
启动 NFS 守护进程:                                          [确定]
正在启动 RPC idmapd:                                   [确定]


2. 客户端上挂载NFS

[root@hpf-linux ~]#  yum install -y nfs-utils  //客户端同样安装  

[root@hpf-linux ~]# showmount -e 192.168.1.222   //查看服务器端都共享了哪些目录 
Export list for 192.168.1.222:
/home 192.168.1.0/24

[root@hpf-linux ~]# mount -t nfs 192.168.1.222:/home/ /mnt/
[root@hpf-linux ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda5              13G  2.4G  9.7G  20% /
tmpfs                 504M     0  504M   0% /dev/shm
/dev/sda1             190M   24M  157M  13% /boot
/dev/sda2             4.7G  9.9M  4.5G   1% /home
192.168.1.222:/home/  4.7G  9.8M  4.5G   1% /mnt


搭建好环境后做以下实验:

[root@webserver ~]# ls /home/
cangls  lost+found  mysql  peng  virftp

[root@hpf-linux ~]# ls /mnt/
cangls  lost+found  mysql  peng  virftp

[root@hpf-linux mnt]# mkdir movies
mkdir: 无法创建目录"movies": 权限不够

[root@webserver home]# mkdir movies

[root@webserver home]# chmod 777 movies/

[root@hpf-linux movies]# touch cangls
[root@hpf-linux movies]# ls -l     //挂载时默认的nfsvers=4,会导致未知的错误,为避免出现错误故需从新挂载
总用量 0
-rw-r--r-- 1 nobody nobody 0 5月  26 2015 cangls

[root@hpf-linux ~]# umount /mnt/

[root@hpf-linux ~]# mount -t nfs  -onolock,nfsvers=3 192.168.1.222:/home/ /mnt/     //在客户端上挂载服务端的nfs

[root@hpf-linux movies]# ls -l     //设置的权限为501,但在服务端uid为501的组为php-fpm
总用量 0
-rw-r--r-- 1 php-fpm php-fpm 0 5月  26 2015 cangls

[root@hpf-linux movies]# id php-fpm
uid=501(php-fpm) gid=501(php-fpm) 组=501(php-fpm)

[root@webserver movies]# ll
总用量 0
-rw-r--r-- 1 peng peng 0 5月  26 16:24 cangls
[root@webserver movies]# id peng
uid=501(peng) gid=501(peng) 组=501(peng)

[root@webserver movies]# cat /etc/exports 
 /home/ 192.168.1.0/24(rw,sync,no_root_squash) 

[root@webserver movies]# exportfs -arv
exporting 192.168.1.0/24:/home

[root@hpf-linux movies]# mount -t nfs  -oremount,nolock,nfsvers=3 192.168.1.222:/home/ /mnt/

[root@hpf-linux movies]# touch longls
[root@hpf-linux movies]# ll
总用量 0
-rw-r--r-- 1 php-fpm php-fpm 0 5月  26 2015 cangls
-rw-r--r-- 1 root    root    0 5月  26 2015 longls

[root@hpf-linux mnt]# chmod 755 movies/
[root@hpf-linux mnt]# ll
总用量 32
drwx------ 2 root    root    16384 5月  25 00:41 lost+found
drwxr-xr-x 2 root    root     4096 5月  26 2015 movies
drwx------ 3 mysql   mysql    4096 5月  25 04:37 mysql
drwx------ 3 php-fpm php-fpm  4096 5月  25 23:27 peng
drwx------ 4     502     502  4096 5月  26 00:30 virftp


3. exportfs 命令的使用

-a :全部挂载或者卸载;

-r :重新挂载;

-u :卸载某一个目录;

-v :显示共享的目录

 改变/etc/exports配置文件后,不用重启nfs服务直接用这个exportfs即可

exportfs -arv  使生效

 在使用nfs时,常用一个选项就是 -o nolock  

我们还可以把要挂载的nfs目录写到client上的/etc/fstab文件中  192.168.1.222:/tmp/ /test nfs nolock 0 0  然后 mount -a


4. NFS配置的一些选项说明

rw :读写;

ro :只读;

sync :同步模式,内存中数据时时写入磁盘;

async :不同步,把内存中数据定期写入磁盘中;

no_root_squash :加上这个选项后,root用户就会对共享的目录拥有至高的权限控制,就像是对本机的目录操作一样。不安全,不建议使用;

root_squash:和上面的选项对应,root用户对共享目录的权限不高,只有普通用户的权限,即限制了root;

all_squash:不管使用NFS的用户是谁,他的身份都会被限定成为一个指定的普通用户身份;

anonuid/anongid :要和root_squash 以及all_squash一同使用,用于指定使用NFS的用户限定后的uid和gid,前提是本机的/etc/passwd中存在这个uid和gid。



二、ftp

    FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为 “文传协议” 用于Internet上的控制文件的双向传输。

FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)查看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。

 在CentOS或者RedHat Linux上有自带的ftp软件叫做vsftpd。


1.使用pure-ftpd搭建FTP服务

[root@webserver movies]#  yum install -y epel-release

[root@webserver movies]#  yum install -y pure-ftpd

[root@webserver movies]#  curl www.aminglinux.com/study_v2/.pf.c > /etc/pure-ftpd/pure-ftpd.conf

[root@webserver movies]# cat /etc/pure-ftpd/pure-ftpd.conf
ChrootEveryone                        yes
BrokenClientsCompatibility     no
MaxClientsNumber                  50
Daemonize                               yes
MaxClientsPerIP                       8
VerboseLog                              no
DisplayDotFiles                        yes
AnonymousOnly                      no
NoAnonymous                        yes
SyslogFacility                           ftp
DontResolve                            yes
MaxIdleTime                           15
PureDB                                   /etc/pure-ftpd/pureftpd.pdb
LimitRecursion                        3136 8
AnonymousCanCreateDirs      no
MaxLoad                                  4
AntiWarez                                yes
Umask                                     133:022
MinUID                                   10
AllowUserFXP                         no
AllowAnonymousFXP            no
ProhibitDotFilesWrite            no
ProhibitDotFilesRead             no
AutoRename                          no
AnonymousCantUpload         no
CustomerProof                       yes

生成随机字符串用户名长度为5没有特殊字符没有数字没有大写字母密码没有特殊字符然后重定向到一个文件中 ,如果没有mkpasswd命令需要安装expect包。

[root@webserver ~]# yum install -y expect   //安装mkpasswd命令

[root@webserver ~]# user=`mkpasswd -l 5 -s 0 -d 0 -C 0`
[root@webserver ~]#  pass=`mkpasswd -s 0`
[root@webserver ~]#  echo $user $pass > /tmp/ftp.pass
[root@webserver ~]# cat /tmp/ftp.pass 
mhosl 8ghXuqx6W

[root@webserver ~]# mkdir /data/ftp

[root@webserver ~]# echo -e "$pass\n$pass"|pure-pw useradd $user -u apache -d /data/ftp/
You must give (non-root) uid and gid          //提示apache用户不存在,需要用存在的用户

[root@webserver ~]# echo -e "$pass\n$pass"|pure-pw useradd $user -u peng  -d /data/ftp/
Password: 
Enter it again: 

[root@webserver ~]# pure-pw mkdb   //创建密码文件
[root@webserver ~]# pure-pw list    //列出用户
eohry               /data/ftp/./                                               
mhosl               /data/ftp/./  

[root@webserver ~]# pure-pw userdel eohry
[root@webserver ~]# pure-pw list
mhosl               /data/ftp/./  

[root@webserver ~]# /etc/init.d/pure-ftpd  start  
正在启动 pure-ftpd:                                       [确定]
[root@webserver ~]# netstat -lnp |grep pure
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      1496/pure-ftpd (SER 
tcp        0      0 :::21                       :::*                        LISTEN      1496/pure-ftpd (SER 

[root@hpf-linux ~]# yum install -y lftp   //在服务端安装ftp的客户端工具

[root@hpf-linux ~]# lftp mhosl@192.168.1.222    //用户和密码在服务端的/tmp/ftp.pass
口令: 
lftp mhosl@192.168.1.222:~> ls          
drwxrwxrwx    3 0          0                4096 May 25 23:38 .
drwxrwxrwx    3 0          0                4096 May 25 23:38 ..
drwxr-xr-x    2 0          0                4096 May 25 23:33 daoguo
-rw-r--r--    1 501        peng                0 May 25 23:37 longls
-rw-r--r--    1 0          0                   0 May 25 23:33 zhihu.txt

lftp mhosl@192.168.1.222:/> get longls


lftp mhosl@192.168.1.222:/> get zhihu.txt


lftp mhosl@192.168.1.222:/> quit


[root@hpf-linux ~]# ls          //下载是会下载到登录时所在的目录下


anaconda-ks.cfg  install.log  install.log.syslog  longls  zhihu.txt

lftp mhosl@192.168.1.222:~> put install.log   //上传文件
12577 bytes transferred   
lftp mhosl@192.168.1.222:/> ls
drwxrwxrwx    3 0          0                4096 May 26 17:46 .
drwxrwxrwx    3 0          0                4096 May 26 17:46 ..
drwxr-xr-x    2 0          0                4096 May 25 23:33 daoguo
-rw-r--r--    1 501        peng            12577 May 25 00:46 install.log
-rw-r--r--    1 501        peng                0 May 25 23:37 longls
-rw-r--r--    1 0          0                   0 May 25 23:33 zhihu.txt

[root@hpf-linux ~]# touch {cangls,longls,xiaozels}.avi
[root@hpf-linux ~]# ls
anaconda-ks.cfg  install.log         longls.avi  xiaozels.avi
cangls.avi       install.log.syslog  movies

lftp mhosl@192.168.1.222:/> mput *.avi    //上传多个文件
Total 3 files transferred                      
lftp mhosl@192.168.1.222:/> ls
drwxrwxrwx    3 0          0                4096 May 26 19:35 .
drwxrwxrwx    3 0          0                4096 May 26 19:35 ..
-rw-r--r--    1 501        peng                0 May 26 17:36 cangls.avi
drwxr-xr-x    2 0          0                4096 May 25 23:33 daoguo
-rw-r--r--    1 501        peng                0 May 26 17:36 longls.avi
-rw-r--r--    1 501        peng                0 May 26 17:36 xiaozels.avi


2.vsftp配置ftp服务  

[root@webserver ~]# yum install -y vsftpd db4-utils

[root@webserver ~]#  useradd virftp -s /sbin/nologin   //建立虚拟账号相关联的系统账号

[root@webserver ~]#  vim  /etc/vsftpd/vsftpd_login //建立虚拟账户相关的文件,内容如下:

 test1   //用户名

 123456  //密码

 test2

 abcdef

[root@webserver ~]# chmod 600 /etc/vsftpd/vsftpd_login

[root@webserver ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db //生成对应的库文件,若更改了虚拟帐号的文件需要从新生成。

[root@webserver ~]# mkdir  /etc/vsftpd/vsftpd_user_conf  //建立虚拟账号相关的目录以及配置文件

[root@webserver ~]# cd   /etc/vsftpd/vsftpd_user_conf    //创建和用户对应的配置文件

[root@webserver vsftpd_user_conf]# vim test1

local_root=/home/virftp/test1

 anonymous_enable=NO

 write_enable=YES

 local_umask=022

 anon_upload_enable=NO

 anon_mkdir_write_enable=NO

 idle_session_timeout=600

 data_connection_timeout=120

 max_clients=10

 max_per_ip=5

 local_max_rate=50000

[root@webserver ~]# mkdir /home/virftp/test1

[root@webserver ~]# chown -R virftp:virftp /home/virftp

[root@webserver ~]# vim /etc/pam.d/vsftpd   //在最开头添加两行

auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login   //如果是64位系统,则改为/lib64/security/pam_userdb.so

 account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login   //如果是64位系统,则改为/lib64/security/pam_userdb.so

[root@webserver ~]# vim /etc/vsftpd/vsftpd.conf   //配置文件内容较多,按以下更改文件

anonymous_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=YES

guest_enable=YES

guest_username=virftp

virtual_use_local_privs=YES

user_config_dir=/etc/vsftpd/vsftpd_user_conf

[root@webserver virftp]# /etc/init.d/vsftpd start
为 vsftpd 启动 vsftpd:                                    [确定]

[root@hpf-linux ~]# lftp test1@192.168.1.222
口令: 

lftp test1@192.168.1.222:/> put cangls.avi
lftp test1@192.168.1.222:/> ls               
-rw-r--r--    1 502      502             0 May 26 12:13 cangls.avi

lftp test1@192.168.1.222:/> mput *.avi
Total 3 files transferred                    
lftp test1@192.168.1.222:/> ls
-rw-r--r--    1 502      502             0 May 26 12:31 cangls.avi
-rw-r--r--    1 502      502             0 May 26 12:31 longls.avi
-rw-r--r--    1 502      502             0 May 26 12:31 xiaozels.avi


三、实验过程中的错误:

1.由于21端口被占用导致vsftpd无法启动

[root@webserver virftp]# /etc/init.d/vsftpd start
为 vsftpd 启动 vsftpd:                                    [失败]
[root@webserver virftp]# netstat -lnp |grep 21
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      1344/pure-ftpd (SER 
tcp        0      0 :::21                       :::*                        LISTEN      1344/pure-ftpd (SER 
udp        0      0 0.0.0.0:51521               0.0.0.0:*                               964/rpc.statd       
[root@webserver virftp]# /etc/init.d/pure-ftpd stop
停止 pure-ftpd:                                           [确定]
[root@webserver virftp]# /etc/init.d/vsftpd start
为 vsftpd 启动 vsftpd:                                    [确定]

2.由于根目录没有写权限无法上传文件

lftp test1@192.168.1.222:/> put cangls.avi
put: Access failed: 553 Could not create file. (cangls.avi)

[root@webserver virftp]# chmod 777 test1/
[root@webserver virftp]# ll
总用量 4
drwxrwxrwx 2 root root 4096 5月  26 20:13 test1

lftp test1@192.168.1.222:/> put cangls.avi
lftp test1@192.168.1.222:/> ls               
-rw-r--r--    1 502      502             0 May 26 12:13 cangls.avi

3.出现530错误的一种解决方法

lftp test1@192.168.1.222:~> put cangls.avi
put: 登录失败: 530 Login incorrect. 

[root@webserver vsftpd]# tail /var/log/secure 

May 26 20:34:55 webserver vsftpd[1496]: pam_unix(vsftpd:auth): check pass; user unknown

May 26 20:34:55 webserver vsftpd[1496]: pam_unix(vsftpd:auth): authentication failure; logname= uid=0 euid=0 tty=ftp ruser=test1 rhost=192.168.1.110

May 26 20:34:55 webserver vsftpd[1496]: pam_userdb(vsftpd:auth): user ‘test1‘ granted access

[root@webserver vsftpd]# cat /etc/pam.d/vsftpd 
#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required pam_shells.so
auth       include password-auth
account    include password-auth
session    required     pam_loginuid.so
session    include password-auth
auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login   
account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login 

由于把添加的两行文件放到最后导致的错误,把两行文件放到开头处就解决该问题。

lftp test1@192.168.1.222:~> put cangls.avi
lftp test1@192.168.1.222:/> ls
-rw-r--r--    1 502      502             0 May 26 12:40 cangls.avi


扩展:

http://blog.chinaunix.net/uid-23365147-id-2427229.html

vsftp使用mysql存放虚拟用户并验证 http://www.aminglinux.com/bbs/thread-342-1-1.html

 ftp的主动和被动模式  http://www.aminglinux.com/bbs/thread-961-1-1.html

nfs和ftp服务的搭建

标签:nfs ftp

原文地址:http://9950284.blog.51cto.com/9940284/1655259

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!