通配符中一个星号两个星号和globstar的关系(by quqi99)

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 (http://blog.csdn.net/quqi99)

问题

今天在处理一个AppArmor的问题时,遇到一个奇怪的问题,在/etc/apparmor.d/usr.bin.nova-compute文件中明明已经有了下面对/tmp及/var/tmp目录的配置。

  /tmp/* rw,
  /tmp/*/ rw,
  /tmp/** rw,
  /var/tmp/* rw,

但是在运行”sudo /etc/init.d/apparmor reload && sudo service nova-compute restart“命令后仍然在syslog里能看到下列错误信息。奇了怪了,这是怎么一回事呢?

Nov 15 12:49:36 juju-864213-xenial-mitaka-ceph-11 kernel: [705198.766810] audit: type=1400 audit(1510750176.727:10140): apparmor="DENIED" operation="open" profile="/usr/bin/nova-compute" name="/tmp/" pid=16922 comm="nova-compute" requested_mask="r" denied_mask="r" fsuid=113 ouid=0
Nov 15 12:49:36 juju-864213-xenial-mitaka-ceph-11 kernel: [705198.766828] audit: type=1400 audit(1510750176.727:10141): apparmor="DENIED" operation="open" profile="/usr/bin/nova-compute" name="/var/tmp/" pid=16922 comm="nova-compute" requested_mask="r" denied_mask="r" fsuid=113 ouid=0

globstar模式下的通配符

通配符有一个星号,两个星号,还有逗号,globstar模式可以开启,还可以关闭。这些混在一起会有什么影响呢?
如果想要很方便地遍历所有的目录和文件得用两个星号的通配符。globstar是Bash 4.0才引入的选项,当设置启用globstar(shopt -s globstar)时,两个星号意为对通配符进行展开就可以匹配任何当前目录(包括子目录)以及其的文件;若不启用globstar(shopt -u globstar),两个星号通配符的作用和一个星号通配符是相同的。

  • ~/tmp/* - 匹配当前目录的文件,及当前目录的下一级目录(不包括当前目录),与’ls ~/tmp’及”ls ~/tmp/”的效果同。
  • ~/tmp/*/ - 匹配当前目录的下一级目录(不包括当前目录)
  • ~/tmp/* - 禁用globstar时,与~/tmp/完全一样(不包括当前目录);但启用globstar时,不止取一级,递归取所有级的文件和目录(也包括当前目录)
  • ~/tmp/*/ - 禁用globstar时,与~/tmp// 完全一样(不包括当前目录);但启用globstar时,不止取一级,递归取所有级的目录(也包括当前目录)

当启用globstar时,英语的解释如下(注:里面说的file包括文件和目录,在Linux里目录是特殊的文件):

Substitutes for any number of characters, except /.
/tmp/* matches any file in /tmp. 
/tmp/*/ matches any directory in /tmp

Substitutes for any number of characters, including /.
/tmp/** matches all files and directories underneath /tmp.
/tmp/**/ matches all directories underneath /tmp.

请看实验数据:

hua@t440p:~/tmp$ tree .
.
├── l0_dir1
│   ├── l1_dir
│   │   ├── l2_dir
│   │   │   └── l3_file
│   │   └── l2_file
│   └── l1_file
├── l0_dir2
└── l0_file
4 directories, 4 files

hua@t440p:~/tmp$ shopt -s globstar

hua@t440p:~/tmp$ ls ~/tmp/*
/home/hua/tmp/l0_file
/home/hua/tmp/l0_dir1:
l1_dir  l1_file
/home/hua/tmp/l0_dir2:

hua@t440p:~/tmp$ ls ~/tmp/*/
/home/hua/tmp/l0_dir1/:
l1_dir  l1_file
/home/hua/tmp/l0_dir2/:

hua@t440p:~/tmp$ ls ~/tmp/**
/home/hua/tmp/l0_dir1/l1_dir/l2_dir/l3_file  /home/hua/tmp/l0_dir1/l1_file
/home/hua/tmp/l0_dir1/l1_dir/l2_file         /home/hua/tmp/l0_file
/home/hua/tmp/:
l0_dir1  l0_dir2  l0_file
/home/hua/tmp/l0_dir1:
l1_dir  l1_file
/home/hua/tmp/l0_dir1/l1_dir:
l2_dir  l2_file
/home/hua/tmp/l0_dir1/l1_dir/l2_dir:
l3_file
/home/hua/tmp/l0_dir2:

hua@t440p:~/tmp$ ls ~/tmp/**/
/home/hua/tmp/:
l0_dir1  l0_dir2  l0_file
/home/hua/tmp/l0_dir1/:
l1_dir  l1_file
/home/hua/tmp/l0_dir1/l1_dir/:
l2_dir  l2_file
/home/hua/tmp/l0_dir1/l1_dir/l2_dir/:
l3_file
/home/hua/tmp/l0_dir2/:

hua@t440p:~/tmp$ ls ~/tmp/{,**}
/home/hua/tmp/l0_file
/home/hua/tmp/:
l0_dir1  l0_dir2  l0_file
/home/hua/tmp/l0_dir1:
l1_dir  l1_file
/home/hua/tmp/l0_dir2:

hua@t440p:~/tmp$ shopt -u globstar

hua@t440p:~/tmp$ ls ~/tmp/*
/home/hua/tmp/l0_file
/home/hua/tmp/l0_dir1:
l1_dir  l1_file
/home/hua/tmp/l0_dir2:

hua@t440p:~/tmp$ ls ~/tmp/*/
/home/hua/tmp/l0_dir1/:
l1_dir  l1_file
/home/hua/tmp/l0_dir2/:

hua@t440p:~/tmp$ ls ~/tmp/**
/home/hua/tmp/l0_file
/home/hua/tmp/l0_dir1:
l1_dir  l1_file
/home/hua/tmp/l0_dir2:

hua@t440p:~/tmp$ ls ~/tmp/**/
/home/hua/tmp/l0_dir1/:
l1_dir  l1_file
/home/hua/tmp/l0_dir2/:

hua@t440p:~/tmp$ ls ~/tmp/{,**}
/home/hua/tmp/l0_file
/home/hua/tmp/:
l0_dir1  l0_dir2  l0_file
/home/hua/tmp/l0_dir1:
l1_dir  l1_file
/home/hua/tmp/l0_dir2:

问题的解决

学习了上面的理论之后,是不是想到了问题所在了,那就是下列两个配置没有包括当前目录:

  /tmp/** rw,
  /var/tmp/* rw,

所以它应该修改为:

/tmp/{,**} rw,
/var/tmp/{,**} rw,

附录 - appamor attach disconnected

echo ‘show stat;show table’ | socat stdio /var/lib/neutron/lbaas/v2/xxx/haproxy_stats.sock
上面命令出问题时,可能需要在appamor中添加apparmor flags=(attach disconnected),见:https://bugs.launchpad.net/charm-neutron-gateway/+bug/1770040/comments/10

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

quqi99

你的鼓励就是我创造的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值