ftp创建文件权限问题

一、问题

有一个这样的需求,admin为一个Linux为其FTP应用创建的一个有权限限制的用户,通过admin用户可以进行登录FTP服务,登录FTP服务后,创建文件夹,该文件夹的用户和用户组都是admin,属性为755,即只有admin用户才有写的权限,但是,FTP后台是通过b用户登录Linux系统执行程序上传文件到FTP服务器,由于FTP服务器的文件夹都是由admin用户创建的,且属性为755,b用户根本没有写的权限,导致程序上传文件失败。

二、分析

那么解决问题的方法应该很容易,既然admin用户创建的目录默认属性为755,那么只要将默认属性改为775,并将b用户添加到admin所属用户组里面去,问题就解决了。

三、解决

1、因为系统默认的登录用户是b,为了方便测试,需要登录到admin用户,然后创建文件夹看看默认属性是否改变。通过b用户su到admin用户的时候报出了  This account is currently not available.  错误。才想到,当时创建admin用户的时候是用户的shell是禁止登录的,这里为了方便测试,通过如下命令开启shell登录:

   $ sudo usermod -s /bin/bash admin

2、然后修改系统环境变量/etc/profile文件,设置umask为002 (目录默认属性 777-002=775,文件默认属性 666-002= 664),source 文件生效后,切换到admin用户创建文件夹试试:发现目录的默认属性成功改了,变为755了

     drwxrwxr-x 2 admin admin 4.0K Dec  6 22:54 a

3、然后用admin登录FTP,新建一个文件夹看看,发现其权限还是755

4、由于对FTP并不熟悉,开始并没有想到FTP那里去,而是在捣鼓各种Linux用户组和用户权限的设置,尝试都没有用。最后静下来慢慢思考,突然想到,用admin账户登录FTP创建的文件属性一直是755,这里登录的只是FTP应用,没有登录到shell,所以才会不受Linux环境变量中umask的影响,而修改umask后的admin登录shell后创建的文件属性是775,这里登录到了shell,是根据umask的值没有问题。既然发现了问题,那么想到FTP应该也会有类似Linux  umask的设置才对,于是找到了FTP的配置文件,果然发现了如下的参数:

5、修改FTP的Umask的值为002,重启FTP服务,发现问题解决了。


注:这次问题虽小,也比较快解决了,告诫自己!在捣鼓一些应用服务的前,要先充分了解和熟悉这些应用服务的资料配置等,切莫贪快,否则,出现了问题,自己都不知道从何排查。

以下是使用C#创建FTP文件夹的示例代码: ```csharp using System; using System.Net; class Program { static void Main(string[] args) { string ftpFolderName = "newFolder"; // 要创建文件夹名称 string ftpServerIP = "ftp://ftp.example.com"; // FTP服务器地址 string ftpUserID = "username"; // FTP登录用户名 string ftpPassword = "password"; // FTP登录密码 try { // 创建FTP请求对象 FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpServerIP + "/" + ftpFolderName); request.Method = WebRequestMethods.Ftp.MakeDirectory; request.Credentials = new NetworkCredential(ftpUserID, ftpPassword); // 发送FTP请求 FtpWebResponse response = (FtpWebResponse)request.GetResponse(); Console.WriteLine("FTP文件创建成功!"); response.Close(); } catch (WebException ex) { FtpWebResponse response = (FtpWebResponse)ex.Response; if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable) { Console.WriteLine("FTP文件夹已存在!"); } else { Console.WriteLine("FTP文件创建失败:" + ex.Message); } } } } ``` 该示例代码使用`FtpWebRequest`类创建FTP请求对象,并设置请求方法为`WebRequestMethods.Ftp.MakeDirectory`,表示创建文件夹。然后设置FTP登录用户名和密码,并发送FTP请求。如果文件夹已存在,则会捕获`WebException`异常,并判断异常状态码是否为`FtpStatusCode.ActionNotTakenFileUnavailable`,如果是,则表示文件夹已存在,否则表示创建文件夹失败。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值