问题描述

从git仓库更新了别人配置好的logrotate,发现不能正常运行。手工执行报错

error: Ignoring syslog because of bad file mode - must be 0644 or 0444

具体看了下,确实有个配置文件,是664。手工执行chmod 修改权限后,就可以运行了。但这个提交之前确实时有测试过的,为什么经过上传下载后,就不行了呢?到仓库中去,执行下chmod想修正下权限提交,发现chmod之后git却没检测到有修改。赶紧google学习下。

文件权限位

先简介下权限位。

linux文件具有权限位属性。一般是用三个数字表示,例如755,664,644等。

三个数字分别代表,文件所有者的权限,与文件所有者同一组的用户的权限,不与文件所有者同组的其他用户的权限。

具体的每个数字,是代表了读写执行(rwx)三种权限。

7转换为二进制是0b111,即代表有读写执行权限。

6转换为二进制是0b110,代表有读写权限,无执行权限。

4转换成二进制是0b100,代表有读权限,无写和执行权限。

ls -l 即可看到某个文件的具体权限。

chmod 可改变某个文件的权限。

git仓库对权限位的处理

重点来了,权限位包括了读写执行,但git仓库并不记录全部权限位。

git config core.fileMode 为true时,git会记录该文件是否是可执行的。即当你chmod将文件从664改为755时,git可以检测到修改,你也可以添加提交这个改动。

但git只记录执行权限,而不记录读写权限。

换句话说,644的文件和664的文件,对git来说是没区别的。

这就是问题的原因了。提交者本地修改完测试的时候,权限位已经改成644,测试了logrotate没问题才提交上去,其他人下载下来却变成了664,无法正常运行。

什么决定了下载下来的文件权限

既然git中不记录读写权限,那么为什么下载下来时664,而不是644,666,444等其他权限呢?

答案是,跟每个人本地设定的umask有关。

umask设置了用户创建文件的默认权限补码。

在控制台输入umask命令,可以打印出当前的umask值。

umask=002时, 创建的文件默认为664(666-002),文件夹默认为775(777-002)

umask=022时,创建的文件默认为644(666-022),文件夹默认为755(777-022)

怎么解决logrotate的这个问题

回到问题本身,大部分时候,我们不必关心644和664的区别。但出现了logrotate这种必须644的情况时,也不可能通知到每个人,手工去chmod或者修改每台电脑上的umask,还是要在SDK中解决。既然git不记录,那就要靠编译系统了。

例如openwrt中,就已经定义了一系列的命令。在写包的makefile时尽量规范些,根据产物的不同,选用合适的INSTALL_XXX命令,安装到rootfs中,就可以避免这个问题了。

INSTALL_BIN:=install -m0755
INSTALL_DIR:=install -d -m0755
INSTALL_DATA:=install -m0644
INSTALL_CONF:=install -m0600

如果确实很特殊,那就特殊处理下了,手工在对应makefile中加个chmod。

参考

stackoverflow问题:git-pull-is-setting-664-instead-of-644-permissions

记一个logrotate的配置文件权限问题的更多相关文章

  1. phpMyAdmin提示:配置文件权限错误,无法写入!解决方法

    访问phpMyAdmin提示: 配置文件权限错误,无法写入! 解决办法: chmod -R 755 ./phpmyadmin 这样设置下phpMyAdmin目录权限属性为就可以访问了.原来phpMyA ...

  2. 将所有程序设置XML集中到一个单独XML配置文件的方法:使用appSettings元素的configSource元素

    在.NET程序中,程序的配置文件默认都会放在程序根目录下的web.config(网站程序)或App.config(控制台等程序),在该配置文件中可以定义若干程序配置信息. 在此以网站程序为例,首先将下 ...

  3. 记一个社交APP的开发过程——基础架构选型(转自一位大哥)

    记一个社交APP的开发过程——基础架构选型 目录[-] 基本产品形态 技术选型 最近两周在忙于开发一个社交App,因为之前做过一点儿社交方面的东西,就被拉去做API后端了,一个人头一次完整的去搭这么一 ...

  4. 如何创建一个有System用户权限的命令行

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何创建一个有System用户权限的命令行.

  5. 写一个简单的配置文件和日志管理(shell)

    最近在做一个Linux系统方案的设计,写了一个之前升级服务程序的配置和日志管理. 共4个文件,服务端一个UpdateServer.conf配置文件和一个UpdateServer脚本,客户端一个Upda ...

  6. 一个垃圾的Android权限框架

    一个垃圾的Android权限框架 学习和参考 简书 https://www.jianshu.com/p/2324a2bdb3d4 写在前头 今天突发奇想想要把Android申请权限的流程封装一下,为使 ...

  7. phpmyadmin配置文件权限错误,不应任何用户都能修改

    访问phpmyadmin提示“配置文件权限错误,不应任何用户都能修改” 原因:phpmyadmin目录权限过高,设置了777访问权限 解决: $ phpmyadin 转自: http://www.it ...

  8. 每天一个linux命令(权限):【转载】chmod命令

    chmod命令用于改变linux系统文件或目录的访问权限.用它控制文件或目录的访问权限.该命令有两种用法.一种是包含字母和操作符表达式的文字设定法:另一种是包含数字的数字设定法. Linux系统中的每 ...

  9. Entity Framework学习笔记——记一个错误解决方式及思路

    继续之前设定的学习目标前,先来一篇小小的外篇.按照第一篇里的配置方式配置好的工程前两天还能正常工作,昨天却突然无法通过Add-Migration命令进行数据库的升级.错误信息如下: System.Da ...

随机推荐

  1. HDU4497——GCD and LCM

    这个题目挺不错的,看到是通化邀请赛的题目,是一个很综合的数论题目. 是这样的,给你三个数的GCD和LCM,现在要你求出这三个数有多少种可能的情况. 对于是否存在这个问题,直接看 LCM%GCD是否为0 ...

  2. bzoj2301-Problem b

    题意 \(T\le 5\times 10^4\) 次询问,每次询问 \(a,b,c,d,k\le 5\times 10^4\),求 \[ \sum _{i=a}^b\sum _{j=c}^d[gcd( ...

  3. Unbuntu+nginx+mysql+php

    1/准备 sudo su --切换到root 2/nginx安装 apt-get update apt-get install nginx 3/mysql 安装 apt-get install mys ...

  4. Authenticator及AuthenticationStrategy

    Authenticator的职责是验证用户帐号,是Shiro API中身份验证核心的入口点: 如果验证成功,将返回AuthenticationInfo 验证信息:此信息中包含了身份及凭证:如果验证失败 ...

  5. 关于slow http attack以及apche tomcat的应对方式

    HTTP 的 Slow Attack 有着悠久历史的 HTTP DOS 攻击方式,最早大约追溯到 5 年前,按理说早该修复了,但是 Apache 的默认配置中仍然没有添加相关配置,或者他们认为这是 f ...

  6. Contest 4

    A:cf原题.当然是不是也没什么关系. #include<iostream> #include<cstdio> #include<cstdlib> #include ...

  7. Day21-自定义simple_tag/filter

    一. 在模板里面对用户发过来的数据进行二次加工.想办法把Python的函数放到模板语言里面使用. 有2种方法:filter与simple_tag 二. 实例 {{name|lower}} trunca ...

  8. java学习1-环境搭建

    1.材料准备 2.配置文档 3.验证java是否安装成功 打开cmd-->  java -version 提示以下即成功

  9. 常州day7

    Task1 蛤布斯有一个序列,初始为空.它依次将 1-n 插入序列,其中 i 插到当前第 ai 个数的右边 (ai=0 表示插到序列最左边).它希望你帮 它求出最终序列. 对于 100%的数据,n&l ...

  10. 常州day3

    Task1 小 W 得到了一堆石子,要放在 N 条水平线与 M 条竖直线构成的网格的交点上.因为小 M 最喜欢矩形了, 小 W 希望知道用 K 个石子最多能找到多少四边平行于坐标轴的长方形,它的四个角 ...