background image

用 PHP 实现 Ftp 用户的在线管理

实现在线报名和上传作品的思路是利用网页表单收集用户填写的资料存储到 Mysql 数

据库内,同时以该用户的注册名创建一个 FTP 上传账号并创建该用户的相应目录。

Ftp 服务器是系统默认带的,采用系统用户的用户名和密码,创建系统用户就等于创

建 FTP 用户,FreeBSD 是属于 UNIX 阵营的操作系统,它没有象 Linux 一样的 useradd
和 groupadd 等创建用户和组的命令,其取而代之的是 pw 命令加上相应参数来实现,
在 Freebsd 上以管理员的身份创建一个用户的命令是
以下是引用片段:
echo | pw useradd [-g][groupname] [-s][shelldir][-h 0]
参数 g 指定用户组,参数 s 指定用户的 shell。
如果是普通用户登陆的话还必须用到 su 命令,调用的方法是
以下是引用片段:
su root –c ‘echo | pw useradd [-g][groupname] [-s][shelldir][-h 0] ’
执行之后系统会要求输入管理员密码,输入密码就可以以管理员的身份执行这个命令了。
实现这步操作的主要难点在于如何通过 PHP 来调用上面这些系统命令去创建一个用户,
本例是使用 PHP 中的 popen()函数来实现的,该函数执行指令打开文件,语法是 int 
popen(string command, string mode),其打开的文件只能是单向的,只能读或只能
写,对应的“string mode”为’r’或’w’,“string command” 就是命令字符串,在对文

 

件的操作上可使用 fgets()、fgetss()与 fputs()函数,本例用 fputs()函数往文件里面输入

 

管理员密码。若是开档发生错误将返回 false 值,最后函数要记得调用 pclose()关闭。
下面我们来规划一下 FTP 用户的组,事先我们先用 pw groupadd ftpuser 创建 ftpuse
组,让在线申请的用户为这个组的成员。为了安全起见,我们不应该给 FTP 用户 Telnet
权限,所以我们还要专门给他们创建一个 shell,使得他们不能通过 Telnet 正常登陆系
统,方法如下:先创建一个文件/bin/ftponly
以下是引用片段:
#!/bin/csh
/bin/cat << XX
You can ony use this username to login ftp server!
And you can not use it to telnet to this system! XX
sleep 10
该文件中 XX 之间就是显示给用 telnet 登陆的用户看的信息。信息显示 10 秒钟就自动退
出了。最后不要忘记用 chmod +x /bin/ftponly 给这个文件可执行属性。
然后在/bin/shell 文件中添加“/bin/ftponly”,在以后的命令里面我们就可以利用 pw 中-
s 参数把这个 shell 指定给 FTP 用户了。
最后还要注意一个问题,su 命令仅仅是 wheel 管理组的用户成员才可以使用,当 PHP
调用 su 命令的时候也必须以 wheel 组成员的身份运行,否则系统拒绝运行,而 PHP 运
行系统命令的身份就是 Apache Web 服务器运行的身份,初始的用户名和用户组都是
nobody,所以先得建立一个 wheel 组的用户 www 供 apache 使用,接着更改 Apache
的配置文件 httpd.conf 中的 user 为 www,group 为 wheel,重新启动 Apache,就可
以以新用户身份运行了。
下面可以创建 PHP 源文件 checkin.php 了,代码如下:
以下是引用片段:
<?if (($username!="") and ($userpasswd!=""))//判断是否有表单提交了信息
{ $rootpasswd="adminpassword"; //定义管理员密码