V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
lcdxiangzi
V2EX  ›  Linux

跨系统传脚本 默认权限问题

  •  
  •   lcdxiangzi · 2018-06-20 09:08:19 +08:00 · 2338 次点击
    这是一个创建于 2336 天前的主题,其中的信息可能已经有所发展或是发生改变。
    刚刚发现昨天传到服务器的脚本没有按时执行,看日志发现是 Permission denied。
    又一次给自己吃药。
    所以想问一下,windows 和 linux 之间相互传文件,不同的传递方式,权限是如何传递的?
    比如,复制粘贴? FTP ?

    我昨天这个脚本是同事邮件发给我,然后我通过 windows 环境复制粘贴到堡垒机,堡垒机 FTP 到生产环境。
    到生产环境就变成 644 了。这个脚本在同事那边肯定是有 x 权限的。只是我不清楚具体是哪一步把这个权限抹掉了。
    欢迎大神指点,大家讨论
    18 条回复    2018-06-21 10:57:27 +08:00
    zarte
        1
    zarte  
       2018-06-20 09:49:14 +08:00
    堡垒机 sftp 传可行不?
    lcdxiangzi
        2
    lcdxiangzi  
    OP
       2018-06-20 09:56:00 +08:00
    @zarte 刚刚我没有说清楚,看了一下,我是用 sftp 上传的。
    那就是另一个问题,SFTP 和 FTP 上传方式,有不同的地方吗?在文件权限方面
    E1n
        3
    E1n  
       2018-06-20 09:59:54 +08:00   ❤️ 1
    umask 问题吧
    lcdxiangzi
        4
    lcdxiangzi  
    OP
       2018-06-20 10:18:55 +08:00
    @E1n 我验证了一下,目前看下来是和 umask 一致的。多谢指点,学习了
    Judoon
        5
    Judoon  
       2018-06-20 14:13:49 +08:00 via Android
    如果 windows 本地转存过应该是不行的,毕竟文件系统不存权限这类元信息,所以要无逢体验,用 linux 或 mac。除非你同事打包然后你不解压,传到目标机器再解
    ShineSmile
        6
    ShineSmile  
       2018-06-20 14:15:58 +08:00
    是不是行尾 CRLF 的问题啊
    ShineSmile
        7
    ShineSmile  
       2018-06-20 14:25:22 +08:00
    在 windows 环境下写的脚本保存时行尾用 LF 而不是 CRLF 试一下。

    刚刚 CRLF 保存 scp 上去提示 permission denied。
    换成 LF 好了。
    lcdxiangzi
        8
    lcdxiangzi  
    OP
       2018-06-20 17:01:26 +08:00
    @Judoon 先从 LINUX 到 windows,然后再到 linux。这个过程中权限是不是已经丢掉了。我觉得这个是可以讨论的。当然解压、打包之类的也可以讨论。
    lcdxiangzi
        9
    lcdxiangzi  
    OP
       2018-06-20 17:29:20 +08:00
    @ShineSmile 这个还不是很了解,我要看一下呢。
    不过刚刚我按照 #3 的提示,看了一下,我昨天在两个不同服务器上上传了脚本,刚好两个不同服务器的 umask 不一致。上传后得到的权限是分别和各自的 umask 匹配的呢。所以我以为这个问题就是 umask 导致的。
    理论上讲,你和#3 应该只可能有一个人是对的
    kaneg
        10
    kaneg  
       2018-06-20 17:38:42 +08:00
    用 sh xxx.sh 可以避免权限问题。
    ShineSmile
        11
    ShineSmile  
       2018-06-20 17:39:21 +08:00
    自己 Linux 也不是很精通,抱着学习的态度讨论一下。
    CRLF 保存的时候注意一下就好。可能不是问题的根本。

    umask 我学习一下。
    geelaw
        12
    geelaw  
       2018-06-20 17:42:51 +08:00 via iPhone
    @Judoon 你还在用 FAT ?
    Judoon
        13
    Judoon  
       2018-06-21 00:04:35 +08:00 via Android
    @lcdxiangzi 如果没有打过包,肯定丢失,你试试就行。我说了,文件系统问题。
    Judoon
        14
    Judoon  
       2018-06-21 00:05:52 +08:00 via Android
    @geelaw 说得好像 NTFS 可以存储 linux 的文件权限元数据信息一样
    Judoon
        15
    Judoon  
       2018-06-21 00:23:41 +08:00 via Android
    楼上说 umask 的,并不是根本原因。

    可以动手试试把 ntfs 或者 fat 类的文件系统挂载到 linux 系统下,然后对里面的文件做 chown,chmod 等权限操作,永远无效

    所以根本原因是文件系统没有存储这类权限相关的信息,导致在复制到目标 linux 服务器时,linux 根据系统默认的 umask 为创建的文件添加了权限类信息
    geelaw
        16
    geelaw  
       2018-06-21 01:09:17 +08:00 via iPhone   ❤️ 1
    @Judoon NTFS 不能,因为 Linux 不使用 Windows SID,然而对应的概念(执行权限)是存在的。

    权限的丢失发生在共享协议上,共享协议层可以进行 owner/group/mode 映射,然而看起来它只进行了文件的字节传输。最简单的映射方法是计算 NTFS 上改对象 owner 的权限并设置为新文件的 owner/group 权限,计算 Everyone 的权限并设置为新文件的 other 权限,令新文件的 owner/group 为粘贴者的 owner/group。

    此外,在不同的 Unix/Linux 机器之间传输,权限也是需要映射的,两者不非要有相同的用户和组,单纯迁移八位掩码会因为 owner 和 group 的改变出现意想不到的结果。通常做法是照抄掩码并改变 owner/group 为粘贴者。我不知道用了目录服务的机器会怎么样(是否会有相同的 UID - 用户名 对应关系之类的)。
    lcdxiangzi
        17
    lcdxiangzi  
    OP
       2018-06-21 09:51:53 +08:00
    大家都好专业,到后面我已经跟不上大家的节奏了,等下好好学习一下相关概念。
    多谢各位指点,@Judoon @geelaw @E1n
    总结一下,大家帮忙看看是否理解正确
    1、ftp、sftp、复制、粘贴、打包、解压等操作本身是不会影响权限传递的。
    2、上述几个操作的两端的文件系统会影响权限的变动,主要是看对端的文件系统是否可以承接映射后的权限信息。
    3、因为 linux 和 windows (包括 mac,没用过,不是很了解)下都存在多种多样的文件系统,各自对彼此的文件系统的支持程度也是参差不齐的。所以在 1 中的操作过程中很可能会导致文件的某些附属属性发送改变或丢失,丢失后便会根据对端的系统生成默认的属性。
    4、从单纯解决问题的角度,我觉得 @kaneg 的建议还是比较靠谱的。至少能规避到权限变动的问题。
    综上,如有问题,欢迎继续讨论,谢谢
    raysonx
        18
    raysonx  
       2018-06-21 10:57:27 +08:00 via Android
    权限本身不是文件的一部分,而是存在文件系统中的。
    所谓的保存权限信息,只不过是相应的软件做了特殊处理而已。楼主的案例中,用邮件发文件这一步权限就丢失了,因为邮件中没有额外保存权限信息。除非楼主能发明一个协议,在邮件中以某种格式保存权限信息,接收方的客户端能识别这些信息并依此在接受方创建文件。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1141 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:45 · PVG 06:45 · LAX 14:45 · JFK 17:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.