Я видел руководство 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
. Есть идеи, что я делаю не так?
Также попробовал это решение , и оно не сработало.
Хм, есть небольшая путаница относительно того, как работает sudo.
Sudo позволяет вам стать пользователем root (или другим пользователем) с целью выполнения определенной команды. Однако он не вызывается автоматически при запуске команды apt-get; вам нужно запустить sudo:
sudo apt-get install firefox
, а не
apt-get install firefox
В противном случае вы вообще не вызываете sudo! Видите ли, sudo не системная вещь. Это обычная программа, которая всегда запускается с правами суперпользователя (другими словами, suid ).
~$ ls -l `which sudo`
-rwsr-xr-x 2 root root 127668 2013-02-27 21:41 /usr/bin/sudo*
Видите эту звезду и «с» в разрешениях? Вот что это значит - кто бы ни запускал sudo, sudo запускается с разрешениями root; как будто root запустил его. А затем он осматривается, видит, что вы запускаете его, просматривает файл sudoers и говорит: хорошо, вам разрешено запускать apt-get от имени пользователя root, позвольте мне запустить его для вас. И вызывает apt-get
с правами суперпользователя, что имеет тот же эффект, как если бы 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
не потребуется вводить пароль, и вы сможете запустить его из скрипта или через хрон.