gpt4 book ai didi

wildcard - 符号链接(symbolic link)中带有通配符的 chmod

转载 作者:行者123 更新时间:2023-12-04 02:09:16 25 4
gpt4 key购买 nike

我正在根据 https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-8-on-centos-7 在 Centos 上设置 Tomcat ,但有一个转折:我将 Tomcat 放在 /opt/apache-tomcat-8.5.6 中,然后设置一个符号链接(symbolic link):

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 不接受通配符吗?还是它不查看符号链接(symbolic link)?怎么回事?

请注意,我通过这样做绕过了它:

sudo chmod g+r -R /opt/tomcat/conf

这是否有效地给我同样的东西? (我知道它还使目录可由组读取,但这似乎无关紧要——组可能已经读取了目录。)为什么通配符版本不起作用?

最佳答案

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 术语中,sudoexecve(2) 的包装器,因此无法帮助完成您无法通过 execve 完成的任何事情 调用。如果您需要目标用户的 shell 功能,您需要手动调用该 shell:

user$ sudo sh -c 'chmod g+r /opt/tomcat/conf/*'

关于wildcard - 符号链接(symbolic link)中带有通配符的 chmod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40289476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com