敏感configuration文件的版本控制

考虑一个具有用户只读权限的文件,例如…

-r--------+ admin secrets.txt 

这样的文件如何能够进行修改控制,使其内容保持秘密,甚至从修订控制pipe理员那里?

在提交回购前,使用GPGencryption文件。

是的,这很麻烦(如果不先解密,你将无法进行差异化/合并/等等),但是我不能想象任何其他的方法去处理这只猫。

将秘密存放在一个单独的文件中(不在版本控制之下),然后用脚本或类似Puppet的工具将秘密内容插入到另一个文件中。

从这个答案工作,一个简单的例子可能是:

netjoin.sh.erb(存储在版本控制中):

 #!/bin/sh # Usage: netjoin.sh /path/to/samba/binary/net pdc-hostname NET=$1 SERVER=$2 HOSTNAME=`facter hostname`-`facter operatingsystem` PASSWORD=<%= scope.function_generate("/etc/puppet/auth/getpwd", "ad", "netjoin") %> ${NET} rpc user delete ${HOSTNAME}\$ -U netjoin%${PASSWORD} -S ${SERVER} ${NET} rpc join -U netjoin%${PASSWORD} -S ${SERVER} /bin/rm -f $0 

/ etc / puppet / auth / getpwd(也可以存储在版本控制中):

 #!/bin/bash # /etc/puppet/auth/getpwd if [ "$#" -ne 2 ]; then echo "Usage: $0 <db> <user>" exit 1 fi if [ ! -x /usr/bin/pwgen ]; then echo "missing pwgen!" >&2 exit 1 fi workdir=`dirname $0` workfile="$workdir/passwd_$1" [ ! -r $workfile ] && exit 2 get_name="$2" # get password from storage pwd=`egrep "^${get_name}:" ${workfile} | cut -d: -f2-` if [ "$pwd" = "" ]; then # generate new password & store it len=$((60 + $RANDOM % 9 )) pwd=$(/usr/bin/pwgen -s $len 1) echo "${get_name}:${pwd}" >> $workfile fi # echo password (without new line) echo -n "$pwd" 

/ etc / puppet / auth / passwd_ad(绝对不在版本控制中):

 netjoin:0Gb2iHFsnXZUnsyr0XSMxVvJVJ64zqpBzLFZXEoss5XVM9vTHWgvLHokBKclC 

使用Perforce对敏感文件进行版本化时要小心 – 因为Perforce不根据您的umask处理可执行位以外的文件许可权,您会惊讶于在将它们检入到Perforce中时,文件权限会变得混乱:

 $ p4 init Matching server configuration from 'perforce:1666': case-sensitive (-C0), unicode (-xi) Server lester-dvcs-1449094406 saved. $ date > x $ lx -rw-rw-r--. 1 lester lester 30 Dec 3 09:13 x $ chmod 400 x $ lx -r--------. 1 lester lester 30 Dec 3 09:13 x $ umask 002 $ p4 add x; p4 submit -d add //stream/main/x#1 - opened for add Submitting change 1. Locking 1 files ... add //stream/main/x#1 Change 1 submitted. $ lx -rw-rw-r--. 1 lester lester 30 Dec 3 09:13 x <-- oops! 

如果有人有一个很好的解决方法,我都耳朵! 在此期间,我正在使用mercurial / git来更新我的秘密文件(实际上是/ etc),并将该回购站安全地推到某个位置 – 至less我的本地文件的权限将保持不变。