操纵getfacl输出的最佳方法是什么?

问题描述 投票:0回答:2

Here我认为使用“chgrp -R”重置我的二进制文件上的setuid位;这对我们的申请引起了很大的担忧。

但是,我必须运行两个命令来确保所有东西都属于某个用户;并且所有东西都有“g + w”。

我认为“最受控制”的方式是:

  1. 运行getfacl并创建当前设置的“文本快照”
  2. 返工该文件
  3. 使用setfacl

所以,我需要处理这样的文件:

用线

# group: root

应该变成

# group: whatever

和线条一样

group::?-?

应该成为

group::?w?

保留实际的“通配符”内容:我的意思是:我只想“启用”w;我不想改变那条线上的任何其他东西。

例:

group::r--

得到

group::rw-

group::--x

group::-wx

现在我需要把它变成一些bash / sed / awk的东西。有人可以帮忙吗?

(我已经想到了第一部分

sed s/'^# group: root'/'#group: nobody'/g

但与其他人挣扎)

linux bash awk
2个回答
3
投票

您可以使用sed,类似于以下示例:

echo 'group::?-?' | sed 's/\(^group::.\).\(.\)/\1w\2/'  # gives  group::?w?

echo '#group:root' | sed 's/\(^#group:\).*/\1whatever/' # gives  #group:whatever

2
投票

我已经整理了一个不那么直接的awk逻辑,但它对你的所有情况都是一样的。

awk -F"[:]+" -vOFS="::" '{if ($2 == ": root") $2=" whatever"; if (substr($2,2,1) == "-") $2=substr($2,1,1)"w"substr($2,3)}1' file

对于输入文件

# group: root
group::?-?
group::--x
group::y--

该命令生成输出为

$ awk -F"[:]+" -vOFS="::" '{if ($2 == ": root") $2=" whatever"; if (substr($2,2,1) == "-") $2=substr($2,1,1)"w"substr($2,3)}1' file
# group: whatever
group::?w?
group::-wx
group::yw-

几个有用的笔记: -

  • -F"[:]+"用于限制器:的一个或多个实例与-vOFS="::"一起用于输出场分离。
  • 条件if (substr($2,2,1) == "-") $2=substr($2,1,1)"w"substr($2,3)只是如果中间字符包含-w替换它。请注意,当xxx中的group::xxx部分包含超过3个字符时,这将不起作用。
© www.soinside.com 2019 - 2024. All rights reserved.