技术并艺术着

张华的技术Blog

通配符中一个星号两个星号和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

阅读更多
版权声明:本文为博主原创文章,如需转载,请注明出处! https://blog.csdn.net/quqi99/article/details/78552156
个人分类: Linux Application
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭