background image

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

he+PHP+Mysql+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 了,代码如下: