让proftpd也可以用mysql轻松管理用户实现ftp磁盘配额

linux下配置ftp可以用proftpd,因为它可以与mysql深入整合,轻松实现用户管理,而且每个用户还能单独控制其磁盘使用配额。

一、源码安装
./configure –with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql \
–with-includes=/data/amp/mysql/include/mysql \
–with-libraries=/data/amp/mysql/lib/mysql \
–prefix=/data/amp/proftpd
make
make install
二、设置proftpd的启动服务
(1)#cp proftpd.1.2.xxx/contrib/dist/rpm/proftpd.init.d /etc/rc.d/init.d/proftpd
(2)编辑proftpd文件
# vi /etc/rc.d/init.d/proftpd
将PATH=”$PATH:/usr/local/sbin”修改为
PATH=”$PATH:/usr/local/sbin:/data/amp/proftpd/sbin”
(3)设置proftpd权限为可执行
#chmod +x /etc/rc.d/init.d/proftpd
(4)将proftpd加入系统服务
#chkonfig –add proftpd
这样就可以用service proftpd start和service proftpd stop 和service proftpd restart来分别执行开启服务,停止服务与重启服务
三、启动ftp服务
# proftpd/sbin/proftpd
– Fatal: Group: Unknown group ‘nogroup’ on line 30 of ‘/data/amp/proftpd/etc/proftpd.conf’
若有报错,修改配置文件proftpd.conf
Group nobody
默认是禁止匿名用户访问的
四、打开iptables中的21端口
# vi /etc/sysconfig/iptables
增加:
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 21 -j ACCEPT
重启iptables
# /etc/rc.d/init.d/iptables restart
五、整合mysql
(1)增加mysql数据库用户: 账号proftpd : 密码password,并赋予proftpd数据库的权限
(2)proftpd配置文件增加如下内容:
##———— add by dayu for mysql users —————##
##提高连接速度
IdentLookups off
UseReverseDNS off
#启用passiveport模式(若不配置也可以,但有的ftp客户端软件需要用这个尤其内网)
PassivePorts 50000 50100
#——– MySQL验证:load sql.mod for mysql authoritative ——–#
# 配置FTP用户为MySQL数据库认证方式
#SQLConnectInfo databaseName@hostName:port userName password
SQLConnectInfo proftpd@localhost 账号proftpd 密码password
#Backend表示用户认证方式为MySQL数据库的认证方式
#Plaintext表示明文认证方式,排在最前面的为最先使用的方式
SQLAuthTypes Backend Plaintext
#校验数据表
#SQLAuthenticate users groups usersetfast groupsetfast
SQLAuthenticate users
#指定 ftp用户数据表的名字和其中的字段名,表名可自行定义,字段名不要改动。
SQLUserInfo ftpusers userid passwd uid gid homedir shell
#指定ftp用户组数据表的名字和其中的字段名,这个数据表是可选的,字段名不要改动。
#SQLGroupInfo ftpGroup groupname gid members
#指定是否必须为FTP用户指定一个系统shell,off表示不用指定,on表示必须指定。为了系统安全应该指定为off。
RequireValidShell off
# 如果用户主目录不存在,则系统会根据此用户在用户数据表中的 homedir字段的值新建一个目录
#SQLHomedirOnDemand on
SQLNegativeCache on
#SQLLogFile /var/log/proftpd.sql.log
#用户登录欢迎窗口中显示登录用户已访问次数
SQLNamedQuery getlogins SELECT “count from ftpusers where userid=’%u’”
SQLNamedQuery getlastlogin SELECT “lastlogin from ftpuser where userid=’%u’”
SQLNamedQuery updatelogins UPDATE “count=count+1,host=’%h’,lastlogin=current_timestamp() WHERE userid=’%u’” ftpusers
SQLShowInfo PASS “230″ “You’ve logged on %{getlogins} times!”
SQLLog PASS updatelogins
#——– load sql.mod for mysql authoritative ——–#
#——– 磁盘配额:load qudes.mod for Quota limit ——–#
#打开磁盘限额引擎
QuotaEngine on
#设置磁盘限额
QuotaDirectoryTally on
#设置磁盘容量显示时的单位
QuotaDisplayUnits Mb
#设置磁盘限额日志文件
QuotaLog “/var/log/proftpd.quota.log”
#允许显示磁盘限额信息,ftp登录后可执行quote site quota命令查看当前磁盘使用情况
QuotaShowQuotas on
# 指定磁盘限额模块使用的数据库信息
SQLNamedQuery get-quota-limit SELECT “name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM quotalimits \
WHERE name = ‘%{0}’ AND quota_type = ‘%{1}’”
SQLNamedQuery get-quota-tally SELECT “name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM quotatallies \
WHERE name = ‘%{0}’ AND quota_type = ‘%{1}’”
SQLNamedQuery update-quota-tally UPDATE “bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, \
files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} \
WHERE name = ‘%{6}’ AND quota_type = ‘%{7}’” quotatallies
SQLNamedQuery insert-quota-tally INSERT “%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}” quotatallies
QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
#——— load qudes.mod for Quota limit ——–#
(3)在iptables中增加passiveprot端口
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 50000:50100 -j ACCEPT
(4)建立mysql数据表
CREATE TABLE `ftpusers` (
`userid` varchar(30) NOT NULL,
`passwd` varchar(80) NOT NULL,
`uid` int(11) unsigned NOT NULL,
`gid` int(11) unsigned NOT NULL,
`homedir` varchar(255) DEFAULT NULL,
`shell` varchar(255) DEFAULT NULL,
`count` int(10) unsigned NOT NULL,
`host` varchar(30) NOT NULL,
`lastlogin` datetime NOT NULL,
UNIQUE KEY `userid` (`userid`),
UNIQUE KEY `uid` (`uid`)
);
还有剩余部分请移步安徽php社区吧。

原创文章来源:安徽php社区http://bbs.hfphp.org/thread-741-1-1.html

欢迎大家进行交流,转载请说明出处,谢谢
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
GeoPandas是一个开源的Python库,旨在简化地理空间数据的处理和分析。它结合了Pandas和Shapely的能力,为Python用户提供了一个强大而灵活的工具来处理地理空间数据。以下是关于GeoPandas的详细介绍: 一、GeoPandas的基本概念 1. 定义 GeoPandas是建立在Pandas和Shapely之上的一个Python库,用于处理和分析地理空间数据。 它扩展了Pandas的DataFrame和Series数据结构,允许在其中存储和操作地理空间几何图形。 2. 核心数据结构 GeoDataFrame:GeoPandas的核心数据结构,是Pandas DataFrame的扩展。它包含一个或多个列,其中至少一列是几何列(geometry column),用于存储地理空间几何图形(如点、线、多边形等)。 GeoSeries:GeoPandas中的另一个重要数据结构,类似于Pandas的Series,但用于存储几何图形序列。 二、GeoPandas的功能特性 1. 读取和写入多种地理空间数据格式 GeoPandas支持读取和写入多种常见的地理空间数据格式,包括Shapefile、GeoJSON、PostGIS、KML等。这使得用户可以轻松地从各种数据源中加载地理空间数据,并将处理后的数据保存为所需的格式。 2. 地理空间几何图形的创建、编辑和分析 GeoPandas允许用户创建、编辑和分析地理空间几何图形,包括点、线、多边形等。它提供了丰富的空间操作函数,如缓冲区分析、交集、并集、差集等,使得用户可以方便地进行地理空间数据分析。 3. 数据可视化 GeoPandas内置了数据可视化功能,可以绘制地理空间数据的地图。用户可以使用matplotlib等库来进一步定制地图的样式和布局。 4. 空间连接和空间索引 GeoPandas支持空间连接操作,可以将两个GeoDataFrame按照空间关系(如相交、包含等)进行连接。此外,它还支持空间索引,可以提高地理空间数据查询的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值