Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态创建FTP用户_C#_Php - Fatal编程技术网

C# 动态创建FTP用户

C# 动态创建FTP用户,c#,php,C#,Php,我需要通过客户端运行的C#软件创建FTP用户,我不知道从何处开始或如何进行,我甚至不确定这是否可行,因为这可能需要以root用户身份登录 我的另一个选择是通过C#软件调用PHP脚本,它可以调用system()脚本 这个功能需要在Linux共享主机上工作(因为这是共享的,所以我不能做我能做的一切)。如果这是我——我意识到这是在添加一个移动部分——我会将用户的创建解耦,并将其放在远程服务器上的一个长期运行过程中,其中,服务器进程和PHP facade都使用类似于协调作业的东西。如果没有像这样的外部设

我需要通过客户端运行的C#软件创建FTP用户,我不知道从何处开始或如何进行,我甚至不确定这是否可行,因为这可能需要以root用户身份登录

我的另一个选择是通过C#软件调用PHP脚本,它可以调用system()脚本


这个功能需要在Linux共享主机上工作(因为这是共享的,所以我不能做我能做的一切)。

如果这是我——我意识到这是在添加一个移动部分——我会将用户的创建解耦,并将其放在远程服务器上的一个长期运行过程中,其中,服务器进程和PHP facade都使用类似于协调作业的东西。如果没有像这样的外部设备,您将无法从C#在远程Linux服务器上创建进程。有些事情让我对通过PHP站点创建用户的想法感到困惑,除非它只能通过私有内联网访问,没有外部访问。拥有一个单独的流程只会给您额外的一步来验证。

您管理FTP服务器的唯一方法是通过DirectAdmin。因此,除非有DirectAdmin的API,并且您可以访问它,或者您的共享主机提供商提供某种API,否则您将无法执行此操作

如果您可以使用system()管理共享主机上的用户,那么一定要这样做

如果不能,则可能需要创建一个在服务器上运行的脚本,该脚本接受传入的请求,然后直接与DirectAdmin一起管理用户。这需要脚本知道DirectAdmin凭据,如果DirectAdmin发生任何更新,它可能会破坏您的脚本。我会非常小心使用这种方法,因为任何有权访问此脚本的人都可以管理ftp用户。如果您的客户端可以管理这些FTP用户,任何人都可以。如果存在任何身份验证,用户将如何通过客户端“身份验证”。如果是,它们是如何认证的?因为您的“api”脚本也需要使用该身份验证

我的问题是,你真的需要创建一个FTP用户吗?如果他们只需要上传一个文件,难道他们不能通过在线表单上传一个文件吗?还是通过客户?您需要使用FTP吗

编辑: 因此,正如我在评论中所说的,一个想法是使用服务器端脚本(可能是PHP)来管理文件。它将接受上传/删除/屏蔽文件的请求。当文件上载到站点时,它将被存储,并返回一个特殊令牌以及文件的位置

然后,客户机将获取令牌,将其存储在本地,当用户在客户机上管理文件时,它将使用该令牌进行将来的修改。我会随机生成这个令牌(不是基于用户的任何数据)。如何存储令牌取决于您,可能是在文件系统上,也可能是在数据库中

客户端和站点之间的通信应尽可能通过SSL完成,以阻止MITM攻击

至于上传文件,这实际上取决于您的客户端如何验证其用户。如果是通过中央数据库,共享主机服务器可以访问,如果你不想这样做,那么你需要类似于公钥系统的东西。这样客户端就可以发送一个密钥,共享宿主脚本可以判断用户是否有效。但是,您必须让脚本知道密钥何时被撤销,等等


因此,如何继续这一部分取决于您。

您使用的是什么FTP服务器?你通常如何创建FTP用户?通常我通过DirectAdmin控制面板创建他们,但我不知道安装了哪台服务器。使用客户端软件的用户知道DirectAdmin的信息吗?不,他们不知道,他们也不知道FTP密码,软件管理所有这些信息。我想更像是调用一个系统函数或类似的东西来创建FTP用户。在某些情况下,该软件的用户需要授予某人将文件放入服务器的权限,但我不希望他们手动创建FTP用户,也不希望他们设置用户/密码/默认文件夹。我也不喜欢PHP的想法,但我需要能够远程创建FTP用户,我也希望找到一个更好的解决方案:)软件的用户很少会创建新的FTP用户,但他们会通过它在线发送文件,我不希望每个用户都使用相同的FTP帐户/密码,这就是为什么我想为每个用户创建1个FTP,我可以使用相同的文件并在其中包含子文件夹,但如果有人需要,他可以找到帐户/密码并将其他用户的文件弄乱。但是他们如何发送文件,他们已经使用FTP了吗?他们会通过客户端,通过FTP客户端发送文件吗?他们只通过软件发送文件,该软件的用户不知道什么是FTP,所有内容都发送到FTP服务器,但在后台,用户甚至不知道他们的软件帐户有一个FTP密码。好吧,那么如果您编写了一个简单的PHP脚本,允许您的C#客户端向发送一个文件,它也会发送用户的帐户或其他关于用户的独特数据。它将上载文件,然后将令牌返回给客户端。令牌将存储在客户机上,如果他们将来想要删除该文件,当他们删除该文件时,令牌将被发送回服务器。换句话说,如果不知道服务器上随机生成的特殊令牌,并且仅通过SSL与服务器通信,则无法删除文件。您仍然会遇到有人能够将文件上载到站点,但无法删除文件的问题。为了解决上传问题,您需要找到一种方法让站点验证您是否可以使用该软件。但这很可能需要一个中央数据库。我将编辑我的帖子,寻找可能的解决方案