Предоставление прав администратора пользователю не работает?

Я видел руководство 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. Есть идеи, что я делаю не так?
Также попробовал это решение , и оно не сработало.

0
задан 13 April 2017 в 15:24

1 ответ

Хм, есть небольшая путаница относительно того, как работает 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

не потребуется вводить пароль, и вы сможете запустить его из скрипта или через хрон.

0
ответ дан 13 April 2017 в 15:24

Другие вопросы по тегам:

Похожие вопросы: