我注意到,在使用安装某些东西后,即使可执行文件在我的路径中,也sudo
无法运行该应用程序sudo
。我必须进入应用程序目录并手动更改权限(使用chmod -R o=g <application>/
)。我在 16.04、14.04 甚至 12.04 中都遇到过这种情况。为什么这是默认行为?我该如何更改?
举个例子,我刚刚编译并安装了KeePassX 0.4.4。使用默认安装命令(qmake
、、 ) make
,sudo make install
可执行文件具有/usr/bin/keepassx
预期的权限,755
但该可执行文件指向的文件/usr/share/keepassx/
具有750
阻止不使用而执行的权限sudo
。
apt
当我使用、apt-get
或安装应用程序时,dpkg -i
我使用sudo
但所有用户都可以运行该应用程序。如何在从源代码编译和安装应用程序时模仿此行为?我意识到我可以向 添加命令,chmod
但Makefile
有没有办法进行一次更改,并将其传播到将来的安装?
答案1
您的路径中仍会存在许多程序,但普通用户无法使用。例如adduser
。因此,这取决于您要运行的程序。
我不知道该KeePassX 0.4.4
程序的作用,但是否向普通用户提供该程序或要求提升命令才能运行取决于开发人员。
至于编译,看起来你做得对,你应该以普通用户的身份构建和编译程序。只make install
使用提升的命令运行该部分。这样程序就会在系统范围内安装。
您不应该进入系统进行任何更改。如果您更改文件,您实际上可能会破坏应用程序。
某些程序需要以 root 身份运行,这样它们才能访问普通用户无法访问的某些文件,例如使用命令更改密码,这也会编辑/etc/passwd
和/etc/shadow
文件。这些程序设置了 suid 位,因此即使由普通用户调用,它也会以 root 身份运行root
。
您不会想更改您的/etc/passwd
和/etc/shadow
文件的权限,以便您可以以普通用户的身份编辑它们,或者使得命令在没有设置位的情况passwd
下工作。suid
所以这取决于您正在安装哪些程序以及程序提供商的意图。
如果程序需要 root 访问权限,make install
则应设置该suid
位。如果它不打算以 root 身份运行,而是打算供普通用户使用,则程序或安装已损坏,应联系开发人员以便他们进行修复。
您可能会在Readme
程序中找到修复错误的说明,在这种情况下,如果make install
出现故障,您必须进入程序并进行修复。
答案2
这是因为当您通过 sudo 运行时,您是 root 用户,而不是普通用户。
尝试写入配置文件或设置库的用户版本将转到 /root 而不是 /home/your_user。
当您在没有 sudo 的情况下运行时,您的程序将找不到这些文件。
您可以通过 strace 运行程序来测试它尝试加载哪些文件
strace -e open yourprogram