详解ftp创建文件权限问题
详解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服务,发现问题解决了。
注:这次问题虽小,也比较快解决了,告诫自己!在捣鼓一些应用服务的前,要先充分了解和熟悉这些应用服务的资料配置等,切莫贪快,否则,出现了问题,自己都不知道从何排查。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关推荐
-
php使用curl实现ftp文件下载功能
本文实例为大家分享了php实现ftp文件下载功能,供大家参考,具体内容如下 不知道为什么用正常的ftp_get函数下载文件速度特别慢,但是用ftp的客户端下载很快,所以换了curl的下载方式,速度正常 function file_upload($ftpIp,$ftpUser,$ftpPwd,$path,$fileSavePath){ $curlobj = curl_init();//初始化 //传入ftp的目标文件,如'ftp://192.168.3.1/test/1.jpg' curl_set
-
linux中关于ftp查看不到文件列表的问题详解
今天配置linux服务器的ftp后,登录都正常,使用ftp工具登录后,所有目录都可以通过手工写路径访问,但是文件夹和文件列表看不到数据. 后来分析,总结原因得出结果是跟selinux有关,于是通过关闭selinux后尝试,ftp文件夹和文件列表都正常可以查看了. 如下2张图为解决前和解决后的截图: 1.解决前,通过输入正确的路径可以正常读取访问,但是看不到列表. 2.解决后,可以可视化查看列表数据. 在Linux下设置selinux有三种方法 一.在图形界面中: 桌面-->管理-->安全级别和
-
使用Linux shell脚本实现FTP定时执行批量下载指定文件
使用FTP定时批量下载指定文件的shell脚本,具体实例介绍如下所示: 1.目标FTP服务器地址 #FTP服务器地址 ip=10.19.15.23 2.FTP账号和密码 u=账号 p=密码 3.使用mget结合正则表达式下载文件 #获取昨天日期,为后面下载使用 T=`date -d yesterday +%Y%m%d` 4.连接FTP服务器,到指定路径下下载文件 ftp -n <<EOF open $ip user $u $p binary cd /hour #远程服务器文件目录 lcd /h
-
java实现sftp客户端上传文件以及文件夹的功能代码
1.依赖的jar文件 jsch-0.1.53.jar 2.登录方式有密码登录,和密匙登录 代码: 主函数: import java.util.Properties; import com.cloudpower.util.Login; import com.util.LoadProperties; public class Ftp { public static void main(String[] args) { Properties properties = LoadProperties.ge
-
FtpHelper实现ftp服务器文件读写操作(C#)
最近做了一个项目,需要读取ftp服务器上的文件,于是参考了网上提供的一些帮组方法,使用过程中,出现一些小细节问题,于是本人做了一些修改,拿来分享一下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; using System.Threading; using System.Configuration; na
-
java实现ftp文件上传下载功能
本文实例为大家分享了ftp实现文件上传下载的具体代码,供大家参考,具体内容如下 package getUrlPic; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org
-
Java实现FTP文件与文件夹的上传和下载
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Application).基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件.在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)."下载"文件就是从远程主机拷贝文件至自己
-
详解ftp创建文件权限问题
详解ftp创建文件权限问题 一.问题 有一个这样的需求,admin为一个Linux为其FTP应用创建的一个有权限限制的用户,通过admin用户可以进行登录FTP服务,登录FTP服务后,创建文件夹,该文件夹的用户和用户组都是admin,属性为755,即只有admin用户才有写的权限,但是,FTP后台是通过b用户登录linux系统执行程序上传文件到FTP服务器,由于FTP服务器的文件夹都是由admin用户创建的,且属性为755,b用户根本没有写的权限,导致程序上传文件失败. 二.分析 那么解决问题的
-
详解C++ 创建文件夹的四种方式
在开头不得不吐槽一下,我要的是简单明了的创建文件夹的方式,看得那些文章给的都是复杂吧唧的一大坨代码,不仔细看鬼知道写的是啥.因此,为了方便以后自己阅读,这里自己写一下 C++ 创建文件夹的四种方式: 貌似都是 Windows 的 提前说明:从参数角度上看,其实都应该使用 char*,但是为了方便这里使用的都是 string.在 SO 上找到一个方式把 string 转成 char*,就是调用 string 的 c_str() 函数. 本文示例都是在 E:\database 路径下创建一个叫做 t
-
详解 Python 与文件对象共事的实例
详解 Python 与文件对象共事的实例 Python 有一个内置函数,open,用来打开在磁盘上的文件.open 返回一个文件对象,它拥有一些方法和属性,可以得到被打开文件的信息,以及对被打开文件进行操作. >>> f = open("/music/_singles/kairo.mp3", "rb") (1) >>> f (2) <open file '/music/_singles/kairo.mp3', mode 'r
-
Linux下/var/run/目录下的pid文件详解及pid文件作用
先给大家介绍下Linux下/var/run/目录下的pid文件,具体详解如下所示: linux系统中/var/run/目录下的*.pid文件是一个文本文件,其内容只有一行,即某个进程的PID..pid文件的作用是防止进程启动多个副本,只有获得特定pid文件(固定路径和文件名)的写入权限(F_WRLCK)的进程才能正常启动并将自身的进程PID写入该文件,其它同一程序的多余进程则自动退出. 编程实现: 调用fcntl()系统调用设置指定的pid文件为F_WRLCK锁状态,如果锁成功则写入当前进程的P
-
详解Go 创建命令行工具的方法
前言 最近因为项目需要写了一段时间的 Go ,相对于 Java 来说语法简单同时又有着一些 Python 之类的语法糖,让人大呼"真香". 但现阶段相对来说还是 Python 写的多一些,偶尔还得回炉写点 Java :自然对 Go 也谈不上多熟悉. 于是便利用周末时间自己做个小项目来加深一些使用经验.于是我便想到了之前利用 Java 写的一个博客小工具. 那段时间正值微博图床大量图片禁止外链,导致许多个人博客中的图片都不能查看.这个工具可以将文章中的图片备份到本地,还能将图片直接替换到
-
详解_beginthreadex()创建线程
目录 一.使用_beginthreadex() 二._beginthreadex()与代CreateThread()区别 一.使用_beginthreadex() 需要的头文件支持#include // for _beginthread()需要的设置:ProjectàSetting-->C/C++-->User run-time library 选择Debug Multithreaded 或者Multithreaded.即使用: MT或MTD. 代码如下: #incl
-
详解如何创建一个.NET Core工程
1.打开VS2019,点击“创建新项目”,选择“ASP.NET Core Web应用”,设置路径和文件名,选择目标框架(.net core3.1长期支持),配置HTTPS(选勾),点击“创建”,自此就创建了一个.net core工程. 2.工程目录和文件介绍 Properties—>launchSettings.json :项目配置文件 appsettings.json:应用配置文件,类似web.config wwwroot:内容目录,存放静态文件 Program.cs:控制台应用 Startu
-
详解Spring Security中权限注解的使用
目录 1. 具体用法 2. SpEL 3. @PreAuthorize 最近有个小伙伴在微信群里问 Spring Security 权限注解的问题: 很多时候事情就是这么巧,松哥最近在做的 tienchin 也是基于注解来处理权限问题的,所以既然大家有这个问题,咱们就一块来聊聊这个话题. 当然一些基础的知识我就不讲了,对于 Spring Security 基本用法尚不熟悉的小伙伴,可在公众号后台回复 ss,有原创的系列教程. 1. 具体用法 先来看看 Spring Security 权限注解的具
-
Python详解复杂CSV文件处理方法
目录 项目简介 项目笔记与心得 1.分批处理与多进程及多线程加速 2.优化算法提高效率 总结 项目简介 鉴于项目保密的需要,不便透露太多项目的信息,因此,简单介绍一下项目存在的难点: 海量数据:项目是对CSV文件中的数据进行处理,而特点是数据量大...真的大!!!拿到的第一个CSV示例文件是110多万行(小CASE),而第二个文件就到了4500万行,等到第三个文件......好吧,一直没见到第三个完整示例文件,因为太大了,据说是第二个示例文件的40多倍,大概二十亿行...... 业务逻辑复杂:项
-
SpringBoot详解shiro过滤器与权限控制
目录 shiro过滤器 权限控制 动态配置权限 shiro过滤器 首先从客户端发来的所有请求都经过Shiro过滤器,如果用户没有认证的都打回去进行认证,认证成功的,再判断是否具有访问某类资源(公有资源,私有资源)的权限,如果没有权限,访问失败;如果有权限访问成功.注意:客户端传来的token要和realm中的认证信息进行相同规则的比较(加密算法要一致). 常见过滤器: 1.在shiro配置类中配置,使用 filterFactoryBean.setFilterChainDefinitionMa()
随机推荐
- vue-resource 拦截器(interceptor)的使用详解
- 使用bitset实现毫秒级查询(实例讲解)
- Java中string和int的互相转换问题
- iOS实用教程之Https双向认证详解
- JS实现在状态栏显示打字效果完整实例
- JavaScript在for循环中绑定事件解决事件参数不同的情况
- PHP页面输出时js设置input框的选中值
- C/C++程序编译流程详解
- 简单谈谈MySQL优化利器-慢查询
- javascript利用apply和arguments复用方法
- 基于接口实现java动态代理示例
- JDBCTM 指南:入门
- JQuery实现鼠标滑过显示导航下拉列表
- jQuery分组选择器用法实例
- jQuery简单操作cookie的插件实例
- JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
- 简单的防盗链功能代码(iframe)
- php获取文件类型和文件信息的方法
- Nginx服务器下使用rewrite重写url以实现伪静态的示例
- Spring实现动态切换多数据源的解决方案