我看到了sudoers 手册并计划最终仅授予用户运行特定程序的权限,但尝试使用所有权限进行测试,但不起作用。
sudo -l
显示如下:
[sudo] password for nav:
Matching Defaults entries for nav on this host:
env_reset,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User nav may run the following commands on this host:
(ALL : ALL) ALL
(ALL : ALL) ALL
但是当我尝试时apt-get install firefox
我得到了这个:
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
我的实际目标是运行 Truecrypt 而不要求输入 Ubuntu 登录密码,但在此之前,我至少希望能够运行其他命令而无需输入sudo
。知道我做错了什么吗?
也试过了此解决方案但它不起作用。
答案1
嗯,对于 sudo 如何工作存在一点困惑。
Sudo 允许您成为 root(或其他用户)以运行某个命令。但是,当您运行命令 apt-get 时,它不会自动调用;您需要运行 sudo:
sudo apt-get install firefox
并不是
apt-get install firefox
否则,您根本就不会调用 sudo!您会看到,sudo 不是系统的东西。它只是一个始终以 root 权限运行的常规程序(苏伊德, 换句话说)。
~$ ls -l `which sudo`
-rwsr-xr-x 2 root root 127668 2013-02-27 21:41 /usr/bin/sudo*
看到权限中的星号和“s”了吗?这就是它的意思——无论谁运行 sudo,sudo 都会以 root 的权限运行;就像 root 启动了它一样。然后它四处查看,发现是你运行了它,查找 sudoers 文件并说:好的,你被允许以 root 身份运行 apt-get,让我为你运行它。并apt-get
以 root 权限调用,这与 root 运行它具有相同的效果。
如果你不使用 sudo,而只是输入
apt-get install firefox
然后apt-get
以普通用户身份运行,自然无权接触只能由 root 打开进行写入的文件。这是因为 apt-get 不是 suid 程序;它以启动它的用户的权限运行。
Suid 程序很危险,因为如果程序中出现任何错误,它就会被用来提升未经授权用户的权限。这就是为什么只有一个程序 ( sudo
) 可以用于这些特定目的。
美好的。关于密码的事情:使用NOPASSWD
sudoers 文件中的指令(用于visudo
编辑它)并使用 运行命令sudo
。以下是 sudoers 文件中的相应条目:
yourusername ALL = NOPASSWD: /path/to/the/program
这样,调用
sudo /path/to/the/program
不需要输入密码,您可以从脚本或通过 cron 运行它。