我有一个/etc/openvpn/test.txt
具有以下状态和一个单词内容“test”的文件:
-rw-r--r-- 1 nobody root 173 Jan 25 21:48 test.txt
当我尝试对其执行 grep 操作时,出现权限被拒绝错误。
/etc/openvpn/test.txt | grep -c "test"
结果是:
-bash: /etc/openvpn/consumption.txt: Permission denied
0
如果我尝试以 nobody 身份使用 sudo 运行 grep ,仍然会收到相同的错误:
/etc/openvpn/test.txt | sudo -u nobody grep -c "abs"
结果是:
-bash: /etc/openvpn/consumption.txt: Permission denied
0
当我将所有者更改test.txt
为 root 时,grep 的表现符合预期。
但我必须将其保留为无人所有,因为它应该从客户端断开连接的 openvpn 脚本读取和写入。出于安全原因,我被建议以无人身份运行 openvpn。请给我建议如何处理这种情况。
此/etc/openvpn/test.txt | grep -c "test"
命令必须在客户端断开连接脚本中运行。
答案1
该文件具有rw-r--r--
权限,这意味着它可以读nobody
每个人都可以。只有写但在这种情况下这并不相关,因为您不需要写入文件。
出现该消息Permission denied
是因为您使用了错误的命令。
/etc/openvpn/test.txt | grep -c "test"
意味着你告诉系统执行文件/etc/openvpn/test.txt
作为一个程序,并喂输出该程序的命令grep
。
由于该文件/etc/openvpn/test.txt
缺少执行许可(它只有读每个人都有权获得许可,写权限nobody
),系统无法执行它,您会收到消息Permission denied
。因此,此命令没有输出(错误消息转到标准误差并不是标准输出,因此你在屏幕上看到它)并grep
收到空的输入,因此显示0
结果。
此命令是错误的。我认为文件/etc/openvpn/test.txt
是不是一个可以执行的程序,但它只是一个文本文件,你想读通过 grep。在这种情况下,您应该使用以下命令:
grep -c "test" /etc/openvpn/test.txt
意思是运行该程序grep
,并让该程序读文件/etc/openvpn/test.txt
。