proftp

来源:互联网 发布:java 排序算法总结 编辑:程序博客网 时间:2024/05/20 08:23

     proftp 似乎很少LINUX 发行版会只用,不过国内的redflag-linux 非常奇葩的使用了proftp,你不就是将readhat进行修改再次发行的么,为啥使用另类的proftp而不使用vsftp。不过工作中遇到,虽然没有用到过也得解决。由于写该博客的时候没有链接在生产上,这里我下载相应的版本在我RHEL6下进行测试。


一 要求

   开发项目组要求使用每个人有自己的目录,相互之间没有权限。且使用虚拟用户进行管理。在这里首先考虑使用相对简单的使用文件方式进行认证。


二 配置

     编辑proftpd.conf文件

      添加:           AuthUserFile /opt/proftpd/passwd
                             AuthGroupFile /opt/proftpd/group

                            RequireValidShell off                             --应为为虚拟用户,我们在添加的时候应该将其默认shell设置为fale,这里不添加此参数将导致虚拟用户无法登录

                            #AuthOrder mod_auth_file.c mod_auth_unix.c   --有些文章说需要加上该参数,或许版本有差异,在这里我的版本不需要,此处暂不讨论

     创建密码文件:             如果你是使用系统默认的安装包,可能没有ftpasswd工具,此时你可以去官方下载源码包,提取该文件到服务器。

                                    ftpasswd --passwd --file=/opt/proftpd/passwd --name=test1 --uid=3001 --gid=3000 --home=/home/ftp/u1 --shell=/bin/false   #添加用户

                                    #ftpasswd --group --file=/opt/proftpd/group --name=group1  --gid=3000                  #创建组group1,GID为3000

                                    #ftpasswd --group --name=group1 --gid=3000 --member=test1          

                                    这里我没有使用它的group文件,只是在创建用户时指定了其主组,以在完成不同用户之间的权限以及组之间的权限。

                                               --passwd 指定建立一个新的虚拟用户 

                                               --file 指定存储虚拟用户的文件;

                                               --name 指定此虚拟用户的用户名,密码会在命令执行时要求输入;

                                               --uid 指定此虚拟用户对应的系统用户UID,此虚拟用户将以此系统UID的身份读写文件

                                               --gid 指定此虚拟用户对应的系统用户GID,此虚拟用户将以此系统GID的身份对其他本组用户读写文件

                                               --home 指定此虚拟用户的根目录,就是其登陆FTP后的根目录;

                                               --shell 指定此虚拟用户的shell,为了安全当然指定一个不可登陆的shell


三 测试                              

      下面我们创建多个用户进行测试

           组一:

                        ftpasswd --passwd --file=/opt/proftpd/passwd --name=test1 --uid=3001 --gid=3000 --home=/home/ftp/u1 --shell=/bin/false 

                        ftpasswd --passwd --file=/opt/proftpd/passwd --name=test2 --uid=3002 --gid=3000 --home=/home/ftp/u2 --shell=/bin/false 

                       mkdir /home/ftp/u1;   chown 3001:3000 /home/ftp/u1 ;  

                       mkdir /home/ftp/u2;    chown 3002:3000 /home/ftp/u2

                       

          组二:

                         ftpasswd --passwd --file=/opt/proftpd/passwd --name=test3 --uid=4001 --gid=4000 --home=/home/ftp/u3 --shell=/bin/false 

                        ftpasswd --passwd --file=/opt/proftpd/passwd --name=test4 --uid=4002 --gid=4000 --home=/home/ftp/u4 --shell=/bin/false 

                       mkdir /home/ftp/u3;   chown 4001:4000 /home/ftp/u3

                       mkdir /home/ftp/u4;    chown 4001:4000 /home/ftp/u4

                       chmod 750  /home/ftp/    -R  

                              

四 结果

          这里的结果当然是准确按照上面的测试进行,我使用的是filezilla进行测试,就懒得截图了,索性给大家讲结果

                   所有的目录由于权限是: 750 

                    test1 对u1 目录具有所有权限,可以对u2进行读操作,对u3,u4没有任何权限,无法看到里面的内容。其他用户同理。


五 添加用户和目录脚本

#!/bin/bash
#
echo -n  "the group you have:"
echo "" 
cat  /opt/proftpd/passwd | awk -F ':' '{print $4}' | uniq
read -p "input the  GID  is :        " g
while true 
do 
echo ""
echo ""
read -p "input username and passwd like (zhang qiang):    " u p
cat  /opt/proftpd/passwd | grep $g | awk -F ':' '{print $3}' |sort| uniq > /tmp/uid
a=`cat /opt/proftpd/passwd |  grep $g | wc -l`
if [ $a -gt 0 ] 
then
id=`tail -n 1 /tmp/uid`
let uid=id+1
echo "have"
else
let uid=$g+1
echo "do not have"
fi

echo "$p" | ftpasswd --passwd --file=/opt/proftpd/passwd --name=$u --uid=$uid --gid=$g --home=/home/ftp/$u --shell=/bin/false --stdin
mkdir /home/ftp/$u
chown $uid:$g  /home/ftp/$u
chmod 750 /home/ftp/$u
echo ""
echo "you have create user:    `echo -e  $u `"
echo "password is:    `echo $p  `"
echo "user id is:   `echo $uid   `"
echo "group id is:   `echo $g   `"
echo "home is:   `echo /home/ftp/$u  `"
done

       这里没有对输入进行判断,自己使用的时候输入正确的内容,或自己添加相应的判断





原创粉丝点击