![为什么每个 sudo 执行的可执行文件都需要 sudo?](https://linux22.com/image/133153/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%AF%8F%E4%B8%AA%20sudo%20%E6%89%A7%E8%A1%8C%E7%9A%84%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6%E9%83%BD%E9%9C%80%E8%A6%81%20sudo%EF%BC%9F.png)
我为 qtcreator 运行 sudo,现在无法更改我的 project_name.user.creator 文件。它说没有权限。我还使用 sudo 运行 ping 命令,现在没有 sudo 就无法使用它。你知道如何去除它吗?
ls -l /bin/ping
-rwxr-xr-x 1 root root 61240 Nov 10 2016 /bin/ping
ls -ld /usr/share/applications/*creator*
-rw-r--r-- 1 root root 354 Jul 21 2016 /usr/share/applications/qtcreator.desktop
ping 8.8.8.8
ping: socket: Operation not permitted sudo ping 8.8.8.8
sudo ping 8.8.8.8 [sudo] password for default:
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=58 time=1.22 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=58 time=1.38 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=58 time=1.29 ms
^C
--- 8.8.8.8 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 1.229/1.301/1.380/0.074 ms
default@martin-bogdanov:/home$
答案1
解释
当您使用它执行命令时,sudo
仅意味着正在执行该命令的用户是root
。
因此,如果您正在执行的命令创建了任何文件,这些文件的owner
和group owner
fields 将设置为root
.
根据文件(以及可执行文件)的权限,这可能会阻止其他用户读取/写入/执行它们。
例子
ls -l /bin/ping
这是我电脑上的输出:
-rwxr-xr-x 1 root root 61168 Feb 11 2017 /bin/ping
我将解释-rwxr-xr-x
和root root
部分。
第一个字符 ( -
) 代表文件的类型。
-
表示常规文件。
d
表示目录。
等等。
接下来的 3 个字符 ( rwx
) 代表 允许的操作owner
。
r
能够读取文件。
w
能够写入文件。
x
能够执行文件。
接下来的 3 个字符 ( r-x
) 表示组成员允许执行的操作group owner
。
r
能够读取文件。
-
不是能够写入文件。
x
能够执行文件。
最后 3 个字符 ( ) 表示既不是该组也不是该组成员的r-x
用户所允许的操作。 owner
group owner
r
能够读取文件。
-
不是能够写入文件。
x
能够执行文件。
root root
意味着owner
是root
用户,group owner
是组root
。
通用解决方案
要将owner
和更改group owner
为您的用户帐户,您可以随时使用
sudo chown username:groupname file_name
(groupname
默认情况下与username
您没有手动更改它相同。)
这会将文件的字段更改user
为username
和。group owner
groupname
file_name
特定 ping 问题的解决方案
既钢铁起子和约翰·W·史密斯指出,您还需要一点setuid
才能ping
正常工作。可以找到说明这里和这里。
因此,这将解决以下问题ping
:
sudo chmod u+s /bin/ping