linux 搭建FTP服务

来源:互联网 发布:java项目经理必备技能 编辑:程序博客网 时间:2024/05/01 01:19

1,使用的软件vsftp,db4

       在centos上安装vsftpd db-utils

       yum install -y vsftpd db-utils

2,建立给FTP使用的帐号,下面代码里是virftp(根据自己所好修改,代码里也需要改)

     useradd virftp -s /sbin/nologin

3,建立用户文件,哪怕是空文件也成

     touch /etc/vsftp/vsftpd_login

     db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db

4,建立用户配置文件模板

    mkdir /etc/vsftpd/conf

    touch /etc/vsftpd/conf/vsftpd_login.tmp

    内容如下:

     local_root=/home/virftp  #这个目录可以改的,但改完后,确认目录的属主和属组
  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

5,修改pam.d下面的vsftpd,只保留两行就好。记住,一定只要下面这两行

   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 

6,再修改/etc/vsftpd.conf   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

添加如下:

  1. chroot_local_user=YES

  2. guest_enable=YES

  3. guest_username=virftp

  4. virtual_use_local_privs=YES

  5. user_config_dir=/etc/vsftpd/conf     #include子配置文件.针对各个用户

改完重启服务/etc/init.d/vsftpd restart,再运行以下代码做的脚本即可达到添加用户,删除用户和修改密码。

代码如下:
  #Author: Dong Guo
        #Date: December 12 2011
        USERFILE=/etc/vsftpd/vsftpd_login
        USERDB=/etc/vsftpd/vsftpd_login.db
        CONFBASE=/etc/vsftpd/conf
        TMPCONF=/etc/vsftpd/conf/vsftpd_login.tmp
        FTPBASE=/home/virftp/
        FTPHOST=virftp
        USERNAME=$2
        if [ $# != 2 ];then
                echo "Usage: $0 {create|disable|enable|passwd|delete} {username}" >&2
                exit 1
        fi
        function check_username_exist() {
                        #Check if virtual user already exist
                        USERCOUNT=$(sed -n 'p;n' $USERFILE | grep -w $USERNAME | wc -l)
                        if [ $USERCOUNT -ne 0 ];then
                        echo "User $USERNAME ALREADY exist!" && exit
                        fi
        }
        check_username_notexist() {
                        #Check if virtual user not exist
                        USERCOUNT=$(sed -n 'p;n' $USERFILE | grep -w $USERNAME | wc -l)
                        if [ $USERCOUNT -eq 0 ];then
                        echo "User $USERNAME NOT exist!" && exit
                        fi
        }
        get_password() {
                        #Get the password
                        echo -n "Input password: "
                        read password
                        #Check if password is empty
                        if [ -z "$password" ];then
                        echo "Empty password!!" && exit
                        fi
        }


        update_userdb() {
                        #Delete the virtual user db
                        rm -f $USERDB
                        #Generate the virtual user db
                        db_load -T -t hash -f $USERFILE $USERDB
        }


        case "$1" in
                'create' )
                        check_username_exist
                        get_password
                        #Write the username and password to $USERFILE
                        echo $USERNAME >> $USERFILE
                        echo $password >> $USERFILE
                        update_userdb
                        #Create the configure file of virtual user
                        cp $TMPCONF $CONFBASE/$USERNAME
                        #Replace the home directory name of virtual user
                        sed -i "s/test1/$USERNAME/g" $CONFBASE/$USERNAME
                        #Create the home directory of virtual user
                        mkdir $FTPBASE/$USERNAME
                        #Change the owner of home directory to OS user $FTPHOST
                        chown -R $FTPHOST:$FTPHOST $FTPBASE/$USERNAME
                        ;;
                'disable' )
                        check_username_notexist
                        #Change the owner of home directory from $FTPHOST to root
                        chown root:root $FTPBASE/$USERNAME
                        #Change the permissions of home directory to read-only for root
                        chmod 700 $FTPBASE/$USERNAME
                        ;;
                'enable' )
                        check_username_notexist
                        #Change the owner of home directory from root to $FTPHOST to root
                        chown $FTPHOST:$FTPHOST $FTPBASE/$USERNAME
                        #Change the permissions of home directory to 775 for $FTPHOST
                        chmod 775 $FTPBASE/$USERNAME
                        ;;


                'delete' )
                        check_username_notexist
                        #Get the row numbers of username and password of virtual user
                        ROWNUMBER=$(cat -n $USERFILE | sed -n 'p;n' | grep -w $USERNAME | awk '{print $1}' | head -n 1)
                        #Delete the username and password of virtual user from $USERFILE
                        sed -i "${ROWNUMBER}d" $USERFILE
                        sed -i "${ROWNUMBER}d" $USERFILE
                        update_userdb
                        #Delete the configure file of virtual user
                        rm -f $CONFBASE/$USERNAME
                        #Rename the home directory name of virtual user
                        mv $FTPBASE/$USERNAME $FTPBASE/$USERNAME.deleted
                        ;;


                'passwd' )
                        check_username_notexist
                        get_password
                        #Get the row numbers of username and password of virtual user
                        ROWNUMBER=$(cat -n $USERFILE | sed -n 'p;n' | grep -w $USERNAME | awk '{print $1}' | head -n 1)
                        PASSWORDNUMBER=$(expr $ROWNUMBER + 1)
                        sed -i "${PASSWORDNUMBER}d" $USERFILE
                        sed -i "${ROWNUMBER}a $password" $USERFILE
                        update_userdb
                        ;;
                *)
                        echo "Usage: $0 {create|disable|enable|passwd|delete} {username}" >&2
                        exit 1
                        ;;
        esac
0 0
原创粉丝点击