记一个logrotate的配置文件权限问题
问题描述
从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的配置文件权限问题的更多相关文章
- phpMyAdmin提示:配置文件权限错误,无法写入!解决方法
访问phpMyAdmin提示: 配置文件权限错误,无法写入! 解决办法: chmod -R 755 ./phpmyadmin 这样设置下phpMyAdmin目录权限属性为就可以访问了.原来phpMyA ...
- 将所有程序设置XML集中到一个单独XML配置文件的方法:使用appSettings元素的configSource元素
在.NET程序中,程序的配置文件默认都会放在程序根目录下的web.config(网站程序)或App.config(控制台等程序),在该配置文件中可以定义若干程序配置信息. 在此以网站程序为例,首先将下 ...
- 记一个社交APP的开发过程——基础架构选型(转自一位大哥)
记一个社交APP的开发过程——基础架构选型 目录[-] 基本产品形态 技术选型 最近两周在忙于开发一个社交App,因为之前做过一点儿社交方面的东西,就被拉去做API后端了,一个人头一次完整的去搭这么一 ...
- 如何创建一个有System用户权限的命令行
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何创建一个有System用户权限的命令行.
- 写一个简单的配置文件和日志管理(shell)
最近在做一个Linux系统方案的设计,写了一个之前升级服务程序的配置和日志管理. 共4个文件,服务端一个UpdateServer.conf配置文件和一个UpdateServer脚本,客户端一个Upda ...
- 一个垃圾的Android权限框架
一个垃圾的Android权限框架 学习和参考 简书 https://www.jianshu.com/p/2324a2bdb3d4 写在前头 今天突发奇想想要把Android申请权限的流程封装一下,为使 ...
- phpmyadmin配置文件权限错误,不应任何用户都能修改
访问phpmyadmin提示“配置文件权限错误,不应任何用户都能修改” 原因:phpmyadmin目录权限过高,设置了777访问权限 解决: $ phpmyadin 转自: http://www.it ...
- 每天一个linux命令(权限):【转载】chmod命令
chmod命令用于改变linux系统文件或目录的访问权限.用它控制文件或目录的访问权限.该命令有两种用法.一种是包含字母和操作符表达式的文字设定法:另一种是包含数字的数字设定法. Linux系统中的每 ...
- Entity Framework学习笔记——记一个错误解决方式及思路
继续之前设定的学习目标前,先来一篇小小的外篇.按照第一篇里的配置方式配置好的工程前两天还能正常工作,昨天却突然无法通过Add-Migration命令进行数据库的升级.错误信息如下: System.Da ...
随机推荐
- 第166天:canvas绘制饼状图动画
canvas绘制饼状图动画 1.HTML <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- 【Python】Python处理csv文件
Python处理csv文件 CSV(Comma-Separated Values)即逗号分隔值,可以用Excel打开查看.由于是纯文本,任何编辑器也都可打开.与Excel文件不同,CSV文件中: 值没 ...
- bzoj2013[CEOI2010] A huge tower
题意 有N(2<=N<=620000)快砖,要搭一个N层的塔,要求:如果砖A恰好在砖B上面,那么A不能比B的长度+D要长.问有几种方法,输出 答案 mod 1000000009的值 分析 ...
- vdbench测试过程中遇到的小问题
1.报Slave hd2-0 prematurely terminated 错误 首先根据提示查看hd2-0.stdout.html文件获取更多的错误信息,这个问题一般是未安装vdbench或者路径不 ...
- 抽屉点赞及jQuery CSS操作
1.需要用到的知识点: CSS处理 $('t1').css('color','red') 点赞: -$('t1').append() -$('t1').remove() -setInterval -o ...
- 【转】Oracle 查询库中所有表名、字段名、表名说明、字段名说明
转自 :http://gis-conquer.blog.sohu.com/170243422.html 查询所有表名:select t.table_name from user_tables t; 查 ...
- [CF1103B]Game with modulo
题目大意:交互题,有一个数$a(a\leqslant10^9)$,需要猜出它的值,一次询问为你两个数字$x,y(x,y\in[0,2\times10^9])$: 若$x\bmod a\geqslant ...
- 【UOJ#188】Sanrd(min_25筛)
[UOJ#188]Sanrd(min_25筛) 题面 UOJ 题解 今天菊开讲的题目.(千古神犇陈菊开,扑通扑通跪下来) 题目要求的就是所有数的次大质因子的和. 这个部分和\(min\_25\)筛中枚 ...
- Linux必知必会——od命令
1.功能 od命令用于将指定文件内容以八进制.十进制.十六进制.浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符.od命令系统默认的显示方式是八进制,名称源于Oc ...
- _MSC_VER
https://msdn.microsoft.com/en-us/library/vstudio/b0084kay.aspx Evaluates to an integer literal that ...