我根据https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-8-on-centos-7在Centos上设置了Tomcat,但有一个转折:我将Tomcat放在/opt/apache-tomcat-8.5.6
中,然后设置一个符号链接:
sudo ln -s /opt/apache-tomcat-8.5.6 /opt/tomcat
现在,我将/opt/tomcat
的群组所有权更改为tomcat
:
sudo chgrp -R tomcat /opt/tomcat/conf
然后我赋予tomcat
组对配置目录的写访问权:
sudo chmod g+rwx /opt/tomcat/conf
但问题是:我尝试给tomcat
组授予对所有配置文件的读取权限:
sudo chmod g+r /opt/tomcat/conf/*
这给了我一个错误:chmod: cannot access ‘/opt/tomcat/conf/*’: No such file or directory
什么? chmod
不接受通配符吗?或者它没有看到符号链接?发生了什么事?
请注意,我这样做是为了解决这个问题:
sudo chmod g+r -R /opt/tomcat/conf
这有效地给了我同样的东西吗? (我知道它还使组织可以读取目录,但这似乎无关紧要---组已经可以读取目录。)为什么通配符版本不起作用?
答案 0 :(得分:3)
Globs由当前的shell扩展。这是在调用sudo和chown之前发生的。
如果当前shell没有列出文件的访问权限,那么glob将被视为不匹配,只是单独留下。这使得chmod
尝试访问名为*
的文件,该文件失败。
root# echo /root/.*
/root/.bash_history /root/.bashrc ...
user$ sudo echo /root/.*
/root/.*
命令替换,进程替换和其他扩展也是如此,它们同样不受sudo的影响:
root# echo $(whoami)
root
user$ sudo echo $(whoami)
user
shell还负责管道和重定向,这些也是在sudo运行之前设置的:
root# echo 60 > /proc/sys/vm/swappiness
(command exits successfully)
user$ sudo echo 60 > /proc/sys/vm/swappiness
bash: /proc/sys/vm/swappiness: Permission denied
在Unix术语中,sudo
是execve(2)
的包装器,因此无法通过execve
调用无法完成任何操作。如果您需要目标用户的shell功能,则需要手动调用该shell:
user$ sudo sh -c 'chmod g+r /opt/tomcat/conf/*'