linux虚拟用户登录失败,用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”命令实现创建、修改和删除虚拟用户等操作。虚拟用户的信息以每个用户一行的方式存放在相应的文本文件中。你也可以手工编辑这个文件。其存储格式如下:
:::::::::::::::::
除了帐号、口令、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相关推荐
- 开机登录失败 提示user profile service服务未能登录,无法加载用户配置文件
开机登录失败 提示"user profile service服务未能登录,无法加载用户配置文件" 问题解决办法 [问题描述] Windows系统开机后,在用户登录界面输入密码无法正 ...
- java sql 登录失败_JDBC连接到SQL Server:登录失败,用户X
我想设置一个JDBC连接到SQL Server 2008,我创建在SQL Server数据库这样的信息:我安装了JDBCJDBC连接到SQL Server:登录失败,用户X CREATE LOGIN ...
- Linux服务器升级GLIBC失败导致shell不可用的问题解决经历
问题发生 试图通过编译安装升级Linux服务器的glibc库版本,install失败以后,shell中的大部分命令(ls,cat,rm,cp,ln,scp,vi,yum等)都执行报错,尝试新的ssh连 ...
- grafana登录失败无法从cookie中获取用户信息
背景 grafana从版本6.3升级到7.2.1,通过chrome浏览器无法登录,需要清除浏览器缓存会话才可以正常登录,这样用户体验并不好,不可能使得所有用户都要在登录前都清除一下浏览器缓存会话. c ...
- php用户第三方登录失败,php 实现网站端qq第三方登录接口及一些注意事项【原创】...
最近工作中使用到了网站端QQ 微信 以及新浪微博的第三方登录,以及获取用户的基本信息,在各自开放平台的官方文档上都有详细的介绍 然而QQ登录的部分接口返回值却与其他的不同 所以这里我就完整的介绍一下网 ...
- linux捕捉信号sigint失败,为shell布置陷阱:trap捕捉信号方法论
本文目录: 1.1 信号说明 1.2 trap布置陷阱 1.3 布置完美陷阱必备知识 家里有老鼠,快消灭它!哎,又给跑了.老鼠这小东西跑那么快,想直接直接消灭它还真不那么容易.于是,老鼠药.老鼠夹子或 ...
- 服务器账号登录失败怎么回事,远程连接云服务器登录失败是什么原因
远程连接 出现这种情况,一般有两种原因:一是本地安全策略中修改了策略导致:二是普通用户未附加远程登陆权限. 对于本地安全策略问题的解决 1.gpedit.msc命令打开"本地组策略编辑器,在 ...
- 计算机调试致sa登录失败,无法打开登录 'xxxx' 中请求的数据库。登录失败。用户 'sa' 登录失败。解决思路...
当前位置:我的异常网» Sql Server » 无法打开登录 'xxxx' 中请求的数据库.登录失败.用 无法打开登录 'xxxx' 中请求的数据库.登录失败.用户 'sa' 登录失败.解决思路 w ...
- 服务器获取用户信息失败是什么原因,花粉俱乐部获取用户信息失败怎么解决?花粉俱乐部登录失败是什么原因?...
花粉俱乐部作为华为旗下的以服务花粉为宗旨的综合性网站,里面的内容还是很丰富的,涉及了华为产品的各个方面,比如鸿蒙系统内测升级报名等等,不过近日有小伙伴发现花粉俱乐部在维护,差不多要半个月的时间,这是什 ...
最新文章
- c++向量和数组的区别_数学学习如此容易:用Python计算特征值和特征向量
- 《Windows 8 权威指南》——1.5 版本对比
- SAP S/4HANA 的30天免费试用版
- linux semaphore,在CentOS 7操作系统上安装Semaphore的方法
- jstl表达式替换某些字符
- Kafka与RocketMQ的对比分析
- Django 分页 以及自定义分页
- SQL Server Management Studio格式化SQL工具(可免费)
- python菜鸟教程python基础教程
- nvidia-smi详解
- 为什么好多人说win8不好用?
- React表格内容换行并用省略号显示
- 四连涨!海尔智家这波私有化还有多大想象空间?
- 盘一盘那些提效/创意的宝藏网站
- 成都哪个java培训机构好?
- Oracle 的表以及表基本操作
- 蚂蚁分类信息系统5.8多城市UTF8开源优化版
- 基于ARM、linux的MF RC522射频读卡器
- 【项目自动发布】基于Docker/单节点Rancher/GitLab搭建简易的CI/CD流水线(备忘+补充完善)
- 嵌入式audio基础(六)音量