摘要:讲解了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”命令实现创建、修改和删除虚拟用户等操作。虚拟用户的信息以每个用户一行的方式存放在相应的文本文件中。你也可以手工编辑这个文件。其存储格式如下:

:::::::::::::::::

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

下面是 pure-pw 命令用法。

(1)创建新用户。

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

pure-pw useradd [-f  ] -u [-g ]

-D/-d [-c ]

[-t ] [-T ]

[-n ] [-N ]

[-q ]  [-Q ]

[-r [/][,[/]]...]

[-R [/][,[/]]...]

[-i [/][,[/]]...]

[-I [/][,[/]]...]

[-y ]

[-z  -] [-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 ''  :禁用 IP 过滤

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

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

(3)删除用户。

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

# pure-pw userdel [-f ] [-m]

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

(4)修改口令。

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

# pure-pw passwd [-f ] [-m]

(5)显示用户信息。

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

# pure-pw show [-f ]

例如:

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”)。

linux虚拟用户登录失败,用shell用户或虚拟用户登录pureftpd相关推荐

  1. 开机登录失败 提示user profile service服务未能登录,无法加载用户配置文件

    开机登录失败 提示"user profile service服务未能登录,无法加载用户配置文件" 问题解决办法 [问题描述] Windows系统开机后,在用户登录界面输入密码无法正 ...

  2. java sql 登录失败_JDBC连接到SQL Server:登录失败,用户X

    我想设置一个JDBC连接到SQL Server 2008,我创建在SQL Server数据库这样的信息:我安装了JDBCJDBC连接到SQL Server:登录失败,用户X CREATE LOGIN ...

  3. Linux服务器升级GLIBC失败导致shell不可用的问题解决经历

    问题发生 试图通过编译安装升级Linux服务器的glibc库版本,install失败以后,shell中的大部分命令(ls,cat,rm,cp,ln,scp,vi,yum等)都执行报错,尝试新的ssh连 ...

  4. grafana登录失败无法从cookie中获取用户信息

    背景 grafana从版本6.3升级到7.2.1,通过chrome浏览器无法登录,需要清除浏览器缓存会话才可以正常登录,这样用户体验并不好,不可能使得所有用户都要在登录前都清除一下浏览器缓存会话. c ...

  5. php用户第三方登录失败,php 实现网站端qq第三方登录接口及一些注意事项【原创】...

    最近工作中使用到了网站端QQ 微信 以及新浪微博的第三方登录,以及获取用户的基本信息,在各自开放平台的官方文档上都有详细的介绍 然而QQ登录的部分接口返回值却与其他的不同 所以这里我就完整的介绍一下网 ...

  6. linux捕捉信号sigint失败,为shell布置陷阱:trap捕捉信号方法论

    本文目录: 1.1 信号说明 1.2 trap布置陷阱 1.3 布置完美陷阱必备知识 家里有老鼠,快消灭它!哎,又给跑了.老鼠这小东西跑那么快,想直接直接消灭它还真不那么容易.于是,老鼠药.老鼠夹子或 ...

  7. 服务器账号登录失败怎么回事,远程连接云服务器登录失败是什么原因

    远程连接 出现这种情况,一般有两种原因:一是本地安全策略中修改了策略导致:二是普通用户未附加远程登陆权限. 对于本地安全策略问题的解决 1.gpedit.msc命令打开"本地组策略编辑器,在 ...

  8. 计算机调试致sa登录失败,无法打开登录 'xxxx' 中请求的数据库。登录失败。用户 'sa' 登录失败。解决思路...

    当前位置:我的异常网» Sql Server » 无法打开登录 'xxxx' 中请求的数据库.登录失败.用 无法打开登录 'xxxx' 中请求的数据库.登录失败.用户 'sa' 登录失败.解决思路 w ...

  9. 服务器获取用户信息失败是什么原因,花粉俱乐部获取用户信息失败怎么解决?花粉俱乐部登录失败是什么原因?...

    花粉俱乐部作为华为旗下的以服务花粉为宗旨的综合性网站,里面的内容还是很丰富的,涉及了华为产品的各个方面,比如鸿蒙系统内测升级报名等等,不过近日有小伙伴发现花粉俱乐部在维护,差不多要半个月的时间,这是什 ...

最新文章

  1. c++向量和数组的区别_数学学习如此容易:用Python计算特征值和特征向量
  2. 《Windows 8 权威指南》——1.5 版本对比
  3. SAP S/4HANA 的30天免费试用版
  4. linux semaphore,在CentOS 7操作系统上安装Semaphore的方法
  5. jstl表达式替换某些字符
  6. Kafka与RocketMQ的对比分析
  7. Django 分页 以及自定义分页
  8. SQL Server Management Studio格式化SQL工具(可免费)
  9. python菜鸟教程python基础教程
  10. nvidia-smi详解
  11. 为什么好多人说win8不好用?
  12. React表格内容换行并用省略号显示
  13. 四连涨!海尔智家这波私有化还有多大想象空间?
  14. 盘一盘那些提效/创意的宝藏网站
  15. 成都哪个java培训机构好?
  16. Oracle 的表以及表基本操作
  17. 蚂蚁分类信息系统5.8多城市UTF8开源优化版
  18. 基于ARM、linux的MF RC522射频读卡器
  19. 【项目自动发布】基于Docker/单节点Rancher/GitLab搭建简易的CI/CD流水线(备忘+补充完善)
  20. 嵌入式audio基础(六)音量

热门文章

  1. SOAP1.1 VS SOAP1.2
  2. 软件需求规格说明书(网络助手)
  3. Oracle 11gR2 RAC TNS-12542: TNS:address already in use 故障一例
  4. 乱谈互联网产品开发(二)
  5. 阿里云nginx站点http升级https
  6. 使用Kibana画图展示Nginx日志报表
  7. 阿里云开源镜像站下载最新Ubuntu和CentOS镜像
  8. java的反射机制--关于类中属性的反射。
  9. ServiceStack.Redis 连接有密码的Redis问题解决
  10. 解决从json文件中获取不到数据的问题