热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

实现在线报名和上传作品的思路是利用网页表单收集用户填写的资料存储到Mysql数据库内,同时以该用户的注册名创建一个FTP上传账号并创建该用户的相应目录。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 <

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 &#43;x /bin/ftponly给这个文件可执行属性。

然后在/bin/shell文件中添加“/bin/ftponly”&#xff0c;在以后的命令里面我们就可以利用pw中-s参数把这个shell指定给FTP用户了。

最后还要注意一个问题&#xff0c;su命令仅仅是wheel管理组的用户成员才可以使用&#xff0c;当PHP调用su命令的时候也必须以wheel组成员的身份运行&#xff0c;否则系统拒绝运行&#xff0c;而PHP运行系统命令的身份就是Apache Web服务器运行的身份&#xff0c;初始的用户名和用户组都是nobody&#xff0c;所以先得建立一个wheel组的用户www供apache使用&#xff0c;接着更改Apache的配置文件httpd.conf中的user为www&#xff0c;group为wheel&#xff0c;重新启动Apache&#xff0c;就可以以新用户身份运行了。

下面可以创建PHP源文件checkin.php了&#xff0c;代码如下&#xff1a;

以下是引用片段&#xff1a;

{ $rootpasswd&#61;"adminpassword"; //定义管理员密码

$creatuser &#61;"su --login root -c &#39;echo ".$userpasswd." | pw useradd ".$username." -s /bin/ftponly -g ftpuser –s /bin/ftponly -h 0&#39; "; //这是利用su和pw命令创建用户的用到的字符串

$fp&#61;popen($creatuser,"w"); //调用popen()函数执行字符串中的命令&#xff0c;返回文句柄给$fp

fputs($fp,$rootpasswd); //写入管理员密码到文件$fp&#xff0c;相当于输入密码给系统

pclose($fp);//关闭文件

$creatdir&#61;"su --login root -c &#39;mkdir /home/".$username."&#39;";//创建用户目录的命令字符串

$fp&#61;popen($creatdir,"w");//执行命令创建用户目录

fputs($fp,$rootpasswd); //输入管理员密码

pclose($fp);

$creatdir&#61;"su --login root -c &#39;mkdir /home/".$username."/public_html&#39;";

$fp&#61;popen($creatdir,"w"); //执行命令创建用户网站根目录

fputs($fp,$rootpasswd); //输入管理员密码

pclose($fp);

$creatdir&#61;"su --login root -c &#39;chown ".$username." /home/".$username."&#39;"; //改变用户目录的所有者为用户自己&#xff0c;初始为运行Apache的用户www。

$fp&#61;popen($creatdir,"w"); //执行命令

fputs($fp,$rootpasswd); //输入管理员密码

pclose($fp);

$creatdir&#61;"su --login root -c &#39;chown ".$username." /home/".$username."/public_html&#39;"; //改变网站根目录的归属

$fp&#61;popen($creatdir,"w");

fputs($fp,$rootpasswd);

pclose($fp);

echo "恭喜".$username."&#xff0c;您的的FTP账号已经申请成功&#xff01;请到FTP上登陆&#xff0c;请注意&#xff0c;您没有Telnet权限";}

else{?>

实现在线报名和上传作品的思路是利用网页表单收集用户填写的资料存储到Mysql数据库内&#xff0c;同时以该用户的注册名创建一个FTP上传账号并创建该用户的相应目录。

Ftp服务器是系统默认带的&#xff0c;采用系统用户的用户名和密码&#xff0c;创建系统用户就等于创建FTP用户&#xff0c;FreeBSD是属于UNIX阵营的操作系统&#xff0c;它没有象Linux一样的useradd和groupadd等创建用户和组的命令&#xff0c;其取而代之的是pw命令加上相应参数来实现&#xff0c;在Freebsd上以管理员的身份创建一个用户的命令是

以下是引用片段&#xff1a;

echo | pw useradd [-g][groupname] [-s][shelldir][-h 0]

参数g指定用户组&#xff0c;参数s指定用户的shell。

如果是普通用户登陆的话还必须用到su命令&#xff0c;调用的方法是

以下是引用片段&#xff1a;

su root –c ‘echo | pw useradd [-g][groupname] [-s][shelldir][-h 0] ’

执行之后系统会要求输入管理员密码&#xff0c;输入密码就可以以管理员的身份执行这个命令了。

实现这步操作的主要难点在于如何通过PHP来调用上面这些系统命令去创建一个用户&#xff0c;本例是使用PHP中的popen()函数来实现的&#xff0c;该函数执行指令打开文件&#xff0c;语法是int popen(string command, string mode)&#xff0c;其打开的文件只能是单向的&#xff0c;只能读或只能写&#xff0c;对应的“string mode”为’r’或’w’&#xff0c;“string command” 就是命令字符串&#xff0c;在对文件的操作上可使用 fgets()、fgetss()与fputs()函数&#xff0c;本例用fputs()函数往文件里面输入管理员密码。若是开档发生错误将返回 false 值&#xff0c;最后函数要记得调用pclose()关闭。

下面我们来规划一下FTP用户的组&#xff0c;事先我们先用pw groupadd ftpuser创建ftpuse组&#xff0c;让在线申请的用户为这个组的成员。为了安全起见&#xff0c;我们不应该给FTP用户Telnet权限&#xff0c;所以我们还要专门给他们创建一个shell&#xff0c;使得他们不能通过Telnet正常登陆系统&#xff0c;方法如下&#xff1a;先创建一个文件/bin/ftponly

以下是引用片段&#xff1a;

#!/bin/csh

/bin/cat <

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 &#43;x /bin/ftponly给这个文件可执行属性。

然后在/bin/shell文件中添加“/bin/ftponly”&#xff0c;在以后的命令里面我们就可以利用pw中-s参数把这个shell指定给FTP用户了。

最后还要注意一个问题&#xff0c;su命令仅仅是wheel管理组的用户成员才可以使用&#xff0c;当PHP调用su命令的时候也必须以wheel组成员的身份运行&#xff0c;否则系统拒绝运行&#xff0c;而PHP运行系统命令的身份就是Apache Web服务器运行的身份&#xff0c;初始的用户名和用户组都是nobody&#xff0c;所以先得建立一个wheel组的用户www供apache使用&#xff0c;接着更改Apache的配置文件httpd.conf中的user为www&#xff0c;group为wheel&#xff0c;重新启动Apache&#xff0c;就可以以新用户身份运行了。

下面可以创建PHP源文件checkin.php了&#xff0c;代码如下&#xff1a;

以下是引用片段&#xff1a;

{ $rootpasswd&#61;"adminpassword"; //定义管理员密码

$creatuser &#61;"su --login root -c &#39;echo ".$userpasswd." | pw useradd ".$username." -s /bin/ftponly -g ftpuser –s /bin/ftponly -h 0&#39; "; //这是利用su和pw命令创建用户的用到的字符串

$fp&#61;popen($creatuser,"w"); //调用popen()函数执行字符串中的命令&#xff0c;返回文句柄给$fp

fputs($fp,$rootpasswd); //写入管理员密码到文件$fp&#xff0c;相当于输入密码给系统

pclose($fp);//关闭文件

$creatdir&#61;"su --login root -c &#39;mkdir /home/".$username."&#39;";//创建用户目录的命令字符串

$fp&#61;popen($creatdir,"w");//执行命令创建用户目录

fputs($fp,$rootpasswd); //输入管理员密码

pclose($fp);

$creatdir&#61;"su --login root -c &#39;mkdir /home/".$username."/public_html&#39;";

$fp&#61;popen($creatdir,"w"); //执行命令创建用户网站根目录

fputs($fp,$rootpasswd); //输入管理员密码

pclose($fp);

$creatdir&#61;"su --login root -c &#39;chown ".$username." /home/".$username."&#39;"; //改变用户目录的所有者为用户自己&#xff0c;初始为运行Apache的用户www。

$fp&#61;popen($creatdir,"w"); //执行命令

fputs($fp,$rootpasswd); //输入管理员密码

pclose($fp);

$creatdir&#61;"su --login root -c &#39;chown ".$username." /home/".$username."/public_html&#39;"; //改变网站根目录的归属

$fp&#61;popen($creatdir,"w");

fputs($fp,$rootpasswd);

pclose($fp);

echo "恭喜".$username."&#xff0c;您的的FTP账号已经申请成功&#xff01;请到FTP上登陆&#xff0c;请注意&#xff0c;您没有Telnet权限";}

else{?>

(责任编辑&#xff1a;admin)

(责任编辑&#xff1a;最模板)



推荐阅读
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 本文介绍了如何查看PHP网站及其源码的方法,包括环境搭建、本地测试、源码查看和在线查找等步骤。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文详细介绍了在CentOS 6.5 64位系统上使用阿里云ECS服务器搭建LAMP环境的具体步骤。首先,通过PuTTY工具实现远程连接至服务器。接着,检查当前系统的磁盘空间使用情况,确保有足够的空间进行后续操作,可使用 `df` 命令进行查看。此外,文章还涵盖了安装和配置Apache、MySQL和PHP的相关步骤,以及常见问题的解决方法,帮助用户顺利完成LAMP环境的搭建。 ... [详细]
  • 本文介绍了如何在 Windows 系统上利用 Docker 构建一个包含 NGINX、PHP、MySQL、Redis 和 Elasticsearch 的集成开发环境。通过详细的步骤说明,帮助开发者快速搭建和配置这一复杂的技术栈,提升开发效率和环境一致性。 ... [详细]
  • 本文介绍了如何通过安装 rpm 包来使用 resize2fs 和 ext2online 工具进行系统文件的扩容。提供了详细的步骤和注意事项。 ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • Linux下MySQL 8.0.28安装指南
    本文详细介绍了在Linux系统上安装MySQL 8.0.28的步骤,包括下载数据库、解压数据包、安装必要组件和启动MySQL服务。 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 基于Linux系统的Kickstart自动化服务器部署方案
    本文针对企业需求,提出了一种基于Linux系统的Kickstart自动化服务器部署方案。该方案旨在通过无盘批量安装操作系统,提高企业IT基础设施的部署效率。Kickstart是一种利用Anaconda工具实现服务器自动化安装的技术,能够显著简化和加速操作系统的安装过程。通过详细的实施规划,本文介绍了Kickstart的工作原理及其在实际部署中的应用,为企业提供了高效的自动化部署解决方案。 ... [详细]
  • 本指南详细介绍了如何在CentOS 6.6 64位系统上以root用户身份部署Tomcat 8服务器。系统环境为CentOS 6.6 64位,采用源码安装方式。所需软件为apache-tomcat-8.0.23.tar.gz,建议将软件下载至/root/opt目录。具体下载地址请参见官方资源。本指南涵盖了从环境准备到服务启动的完整步骤,适用于需要在该系统环境下搭建高性能Web应用服务器的技术人员。 ... [详细]
  • TCP三次握手过程详解与图示解析
    本文详细解析了TCP三次握手的过程,并通过图示清晰展示了各个状态的变化。同时,文章还介绍了四次挥手的图解,解释了在TIME_WAIT状态中,客户端最后一次发送的ACK包的作用和重要性。 ... [详细]
author-avatar
手机用户2502885031
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有