用shell用户或虚拟用户登录pureftpd


  摘要:讲解了Unix系统下pureftpd如何用shell用户登录,以及如何用虚拟用户登录。

  目录:

  一、系统真实(shell)用户登录

  二、puredb虚拟用户支持

  三、技巧

  ------------------------------------------------------------------分 割 线-----------------------------------------------------------------

  一、系统真实(shell)用户登录

  默认配置文件允许匿名用户登录,同时允许系统真实用户登录。经过上面的步骤后(详情见我的另一篇文章《pureftpd基础:安装、配置、实现匿名登录》),这时我们用系统用户登录,是可以登录,并且可以上传、下载、建目录和删除等。

  如果要让 FTP 只支持系统真实用户登录,你只要稍微修改一下 pureftpd 的配置文件就可以了。

  # ee /usr/local/etc/pure-ftpd.conf

  ChrootEveryone yes

  NoAnonymous yes

  UnixAuthentication yes //用“/etc/passwd”中的用户认证

  只需以上三行就可以实现只允许系统真实用户登录 FTP 。系统真实用户会登陆到自己的系统主目录中,可下载,可上传,可删除,没有任何限制。但是由于有 chroot 的限制,所以无法去真实系统的其它目录而已。在实际应用中,这种用法并不多见,我也就不费篇幅介绍了。

  二、puredb虚拟用户支持

  1、建立 FTP 专用的系统用户。

  自从 0.99.2 版本开始,pure-ftpd 就开始支持虚拟用户。

  虚拟用户方式是一个简单的用户列表机制,类似于“/etc/passwd”,它将用户的相关信息,如口令、姓名、 uid、gid、主目录等,存入一个文本文件。但是该文本文件文件只适用于 FTP 。这意味着,你可以很容易地设置 FTP 虚拟帐号,而不需要在系统中添加系统用户,以免和系统用户混淆在一起。

  同时,可以为这些虚拟用户单独设置配额、ratio、带宽等限制,这些功能是系统用户认证无法实现的。很多虚拟用户可以共享同一个系统用户的属性,因此建议为这些虚拟用户单独创建一个系统用户,从而方便管理。

  你可以使用系统已经存在的帐号,比如“nobody”用户,作为虚拟用户的系统帐号。但最好使用一个单独的帐号,专门对应 FTP 。我们选择新建系统用户(经测试,在 linux 系统中如果用 linux 系统自带的 ftp 用户,在用虚拟用户登陆时会出现不被信任的提示。大家也可以做做实验,看是不是这样)。建立方法如下:

  对于 Linux/OpenBSD/NetBSD/Solaris/HPUX/ 或其它的类 Unix 系统,使用下面的命令:

  groupadd ftpgroup

  useradd -g ftpgroup -d /home/ftp -s /sbin/nologin ftpuser

  对于 FreeBSD ,用下面的命令:

  # pw groupadd ftpgroup

  # pw useradd ftpuser -g ftpgroup -d /home/ftp -s /sbin/nologin

  系统帐号建立好后,我们就开始着手准备虚拟用户了。

  2、建立虚拟用户。

  使用 ”pure-pw”命令实现创建、修改和删除虚拟用户等操作。虚拟用户的信息以每个用户一行的方式存放在相应的文本文件中。你也可以手工编辑这个文件。其存储格式如下:

<account>:<password>:<uid>:<gid>:<gecos>:<home directory>:<upload bandwidth>:<download bandwidth>:<upload ratio>:<download ratio>:<max number of connections>:<files quota>:<size quota>:<authorized local IPs>:<refused local IPs>:<authorized client IPs>:<refused client IPs>:<time restrictions>

  除了帐号、口令、uid、gid 和 home directory 之外,其它的可以是空值。

  下面是 pure-pw 命令用法。

  (1)创建新用户。

  要创建一个新用户,用下列的语法。  

pure-pw useradd <login> [-f  <passwd file>] -u <uid> [-g <gid>]

           -D/-d <home  directory> [-c <gecos>]

           [-t <download  bandwidth>] [-T <upload bandwidth>]

           [-n <max number of  files>] [-N <max Mbytes>]

           [-q <upload ratio>]  [-Q <download ratio>]

           [-r <allow client  host>[/<mask>][,<allow client host>[/<mask>]]...]

           [-R <deny client  host>[/<mask>][,<deny client host>[/<mask>]]...]

           [-i <allow local  host>[/<mask>][,<allow client host>[/<mask>]]...]

           [-I <deny local  host>[/<mask>][,<deny local host>[/<mask>]]...]

           [-y <max number of  concurrent sessions>]

           [-z  <hhmm>-<hhmm>] [-m]

  假设我们要创建“tim”这样一个虚拟用户,则可以使用如下命令:

  # pure-pw useradd tim -u ftpuser -d /home/ftp/tim

  其中:

  -u 将虚拟用户 tim 同系统用户 ftpuser 关联在一起。

  -d 参数使 tim 只能访问其 home 目录。而如果想让他访问整个文件系统,可以用 -D 选项。

  执行完上述命令后,会提示输入密码,两次输入 tim 用户的密码即可。用户的口令会根据系统对加密方式的支持情况,选择一个最安全的方式进行加密。

  然后需要建立“/home/ftp/tim”目录,并修改它的属性。

  # mkdir /home/ftp

  # mkdir /home/ftp/tim

  注意:在配置文件中有选项自动建立主目录。

  CreateHomeDir yes //设置为 yes 创建新虚拟用户时 pureftpd 自动创建用户的主目录。

  但是有一点需要大家注意,就是它只支持二层目录的建立而不支持三层以上目录的建立。举个例子,如果我们创建虚拟用户是用如下语句:

  # pure-pw useradd test -u ftpuser -d /home/ftp

  而这时系统只有“/home”目录而没有“/home/ftp”目录,那么在 test 用户第一次登陆时 pureftpd 会创“/home/ftp”目录。

  如果我们改变以上命令如下:

  # pure-pw useradd test -u ftp -d /home/ftp/test

  而这时系统只有“/home”目录或“/home/ftp”目录,而没有“/home/ftp/test”目录,那么我们登陆时会得到没有主目录的提示。

  其他参数含义:

  -z 选项运用用户在一天当中指定的时间段连接服务器。如 -z 0900-1800 ,则该用户只能在上午 9 点到晚上 6 点之间连接服务器。

  -r 选项或 -R 选项,可以限制用户从指定 IP 和掩码连入服务器。如,单一的 IP/掩码对(-r 192.168.1.0/24)。多个IP/掩码对用英文逗号隔开(-r 192.168.1.0/24,10.1.0.0/16,127.0.0.1/32)。仅 IP (-r 192.168.1.4,10.1.1.5)。主机名(-r bla.bla.net,yopcitron.com)。或者以上形式的任何组合。(-r,允许;-R拒绝)

  -y ,用户同一时间的并发连接数。或者 0 意味着不限制。也就是同一 IP 的连接数。

  -f ,默认虚拟用户的信息会被存放在“./etc/pureftpd.passwd”文件中,通过该选项可以改变该文件的位置。

  默认的存储用户信息的文件存放在“./etc/pureftpd.passwd”,我用 ports 方式安装的 pureftpd ,其存放位置在“/usr/local/etc/pureftpd.passwd”。

  我们看下这个文本文件的内容。

  # cat /usr/local/etc/pureftpd.passwd

  tim:$1$LX/3.F60$bYdYwsQOYIaWq.Ko.hfI3.:500:101::/home/ftp/tim/./:::::::::::::

  密码是系统自己加密的。

  (2)更改用户。

  与 pure-pw adduser 不同的是,使用 pure-pw usermod 不是创建一个用户,而是更改已存在用户的某些属性。

  例如,我们给 joe 用户添加一个限额,限制 joe 用户最多拥有1000个文件,最大10 Megabytes 空间。命令如下:

  # pure-pw usermod joe -n 1000 -N 10

  重置某些属性的语法如下:

  pure-pw usermod -n ''       :禁用文件配额

  pure-pw usermod -N ''      :禁用文件大小配额

  pure-pw usermod -q '' -Q ''    :禁用 ratio

  pure-pw usermod -t ''       :禁用下载带宽限制

  pure-pw usermod -T ''      :禁用上传带宽限制

  pure-pw usermod <-i,-I,-r or -R> ''  :禁用 IP 过滤

  pure-pw usermod -z ''      :禁用时间段约束

  pure-pw usermod -y ''      :禁用并发数限制

  (3)删除用户。

  删除一个用户的命令语法是:

 # pure-pw userdel <login> [-f <passwd file>] [-m]

  这时,用户的信息会被从指定的 passwd 文件中删除,但是用户的 home 目录会被保留,需要手工删除。

  (4)修改口令。

  更改一个用户口令的语法是:

# pure-pw passwd <login> [-f <passwd file>] [-m]

  (5)显示用户信息。

  “ ./etc/pureftpd.passwd” 文件中记录的信息不方便用户的阅读,因此 pure-ftpd 提供了显示用户信息的命令。其语法是:

# pure-pw show <login> [-f <passwd file>]

  例如:

1# pure-pw show joe

2

3Login              : joe

4Password           : $1$LX/3.F60$bYdYwsQOYIaWq.Ko.hfI3.

5UID                : 500 (ftpuser)

6GID                : 101 (ftpgroup)

7Directory          : /home/ftpusers/joe/./

8Full name          :

9Download bandwidth : 0 Kb (unlimited)

10Upload   bandwidth : 0 Kb (unlimited)

11Max files          : 1000 (enabled)

12Max size           : 10 Mb (enabled)

13Ratio              : 0:0 (unlimited:unlimited)

14Allowed local  IPs :

15Denied  local  IPs :

16Allowed client IPs : 192.168.0.0/16

17Denied  client IPs : 192.168.1.1,blah.verybadhost.com

18Time restrictions  : 0900-1800 (enabled)

19Max sim sessions   : 0 (unlimited)

  主目录后面的“/./”表示用户目录是被锁定的。

  3、提交更改。

  重要:

  通过上面提到的命令,你可以创建、修改和删除虚拟用户,甚至可以手工方式编辑“/usr/local/etc/pureftpd.passwd”文件。但是,只有提交这些更改,pure-ftpd 访问才能生效。类似数据库中的事务处理。

  提交更改,意味着系统会根据(或者指定的其它文件)来创建一个 pure-ftpd 可读的二进制格式的文件。 该二进制文件中的帐号是分类存储并索引优化了的,可以加快访问速度。

  创建 PureDB 文件的命令如下:

  # pure-pw mkdb

  运行命令后,系统会在“/usr/local/etc/pureftpd.passwd”文件所在目录自动生成“/usr/local/etc/pureftpd.pdb”索引文件。

  如果你想从你指定的 passwd 文本文件中生成PureDB 文件,用“-f”选项。

  # pure-pw mkdb /etc/accounts/ftpusers.pdb -f /etc/accounts/ftpusers.txt

  创建了 PureDB 文件(也就是提交)后,不必重启 pure-ftpd 服务,对虚拟用户进行的创建、修改和删除等操作立即生效。

  同时,也可以通过“-m”选项,让“/usr/local/etc/pureftpd.passwd”文本文件在修改(如添加用户、修改密码、删除用户等等)后自动提交。命令格式如下:

  # pure-pw passwd joe –m

  这个命令将修改“/usr/local/etc/pureftpd.passwd”文本文件中的用户密码,并将更改提交给“/usr/local/etc/pureftpd.pdb”。

  4、更改配置文件让虚拟用户生效

  将配置文件中的 PureDB 文件路径改为你的PureDB 文件路径。

  # ee /usr/local/etc/pure-ftpd.conf

  PureDB /usr/local/etc/pureftpd.pdb //Puredb路径

  通过以上建立的用户,可上传,可下载,可删除,拥有全部权限。可以通过对目录的限制来达到对用户权限的限制,以后再讲解。

  开启虚拟用户后,如果在配置文件中设置“UnixAuthentication no”,pureftpd就只支持虚拟用户登录,不支持系统真实用户登录。如果设置“UnixAuthentication yes”,pureftpd只支持虚拟用户登录,同时支持系统真实用户登录。

  三、技巧

  1、将系统用户转换为虚拟用户。

  你可以用“pure-pwconvert”命令,将系统(/etc/passwd)用户转换为虚拟用户。

  命令如下:

  # pure-pwconvert >> /usr/local/etc/pureftpd.passwd

  如果你以非特权的系统用户身份运行该命令,密码栏将是空的。如果你以 root 用户身份运行该命令,所有特性都被复制过来,甚至是经过哈希函数加密的密码。

  这个转换只会把有 shell 访问权的用户转换过来,shell 访问设置为 nologin 的将不被转换。

  系统用户转化为虚拟用户的意义在于,同一个用户名可以用不同的密码访问 FTP 和 Telnet 。

  2、环境变量

  默认的情况下,如果指定了环境变量 PURE_PASSWDFILE ,则虚拟用户的 passwd 文件位置由该变量的值指定。否则,默认是位置是“/usr/local/etc/pureftpd.passwd”(Linux 中是“/etc/pureftpd.passwd”)。

  同样,PURE_DBFILE 环境变量用来指定 pdb 文件的位置。默认是“/usr/local/etc/pureftpd.pdb”(Linux中“/etc/pureftpd.pdb”)。 

相关内容