Запуск программы в качестве другого пользователя без ввода пароля

3

Я пытаюсь отметить свой интернет-трафик браузера DSCP выбор пакетов с определенным владельцем . Для этого я должен запустить свой браузер с помощью фиктивного пользователя.

Я запускаю свой браузер, привязывая команду терминала к сочетанию клавиш. Так что на данный момент это всегда было chromium-browser .

Шаги, которые я сделал до сих пор:

Создать нового пользователя :

 sudo useradd <dummy user>
 sudo passwd <dummy user>
 sudo mkdir /home/<dummy user>
 sudo chown <dummy user> /home/<dummy user>
 sudo chgrp <dummy user> /home/<dummy user>

Разрешить новому пользователю доступ к X

xhost +

Запустить команду как новый пользователь

Я запускаю терминал как оригинальный пользователь (не root) и запускаю следующую команду:

su <dummy user> -c chromium-browser

после ввода фиктивного пароля пользователя я могу запустить Chrome-браузер в качестве фиктивного пользователя. Chromium будет новым и не будет иметь никаких моих старых настроек, так как он использует недавно созданный фиктивный домашний домашний каталог.

Теперь я не хочу вводить пароль на любом этапе, поэтому я рассмотрел, как работать с sudoers .

Возможно, можно запустить команду в качестве другого пользователя без запроса пароля, изменив файл sudoers. Я еще не понял, как именно, но я думаю, что он зависит от sudo -u . Это также позволяет вам запускать команду как кто-то другой. Прежде чем я начал адаптировать файл sudoers, мне захотелось проверить эту структуру. Итак, я побежал:

sudo -u <dummy user> chromium-browser

И я получил следующую ошибку:

[0906/012127:ERROR:nss_util.cc(90)] Failed to create /home/<user>/.pki/nssdb directory.
[0906/012127:ERROR:nss_util.cc(90)] Failed to create /home/<user>/.pki/nssdb directory.
Home directory /home/<user> not ours.

где <user> - мое имя пользователя. Поэтому он пытается подключиться к домашнему директору домашних пользователей.

Я надеюсь, кто-то поможет мне понять это. У меня такое чувство, что я в правильном направлении, но мне нужно, чтобы кто-то дал мне понять, что я делаю неправильно. Также будет оценена любая помощь в том, как изменить файл sudoers.

Спасибо заранее!

    
задан Hoogendijk 06.09.2013 в 02:13
источник

1 ответ

5

В соответствии с справочником sudo :

    By default, sudo does not modify HOME

Это означает, что когда ваш run sudo -u <dummy user> <command> , HOME не изменяется и указывает на вызывающий домашний каталог пользователя. Точнее, вся среда остается неизменной, и поэтому команда выполняется в среде пользователя, который вызвал sudo . Изменяется только uid , и когда команда пытается записать в $HOME , у него нет правильного разрешения.

Чтобы запустить команду как <dummy user> без запроса пароля и иметь нужную среду, вы должны создать простой файл:

    sudo visudo -f /etc/sudoers.d/myOverrides 

с этой директивой:

    <user> ALL= NOPASSWD:/bin/su

Это позволяет <user> запускать команду su как root без запроса пароля ( <user> password) и запускать su как root doesn ' t необходимо ввести пароль целевого пользователя ( <dummy user> в этом случае).

   sudo su - <dummy user> -c /path/to/chromium-browser

Еще один лучший подход, измените /etc/sudoers.d/myOverrides на:

   <user> ALL= (<dummy user>) NOPASSWD:/path/to/chromium-browser

это позволяет <user> запускать /path/to/chromium-browser как <dummy user> без запроса пароля.

   sudo -u <dummy user> -i /path/to/chromium-browser

где опция -i, в соответствии с руководством sudo :

  

Параметр -i (имитировать начальный логин) запускает оболочку, указанную в   passwd (5) запись целевого пользователя в качестве оболочки входа. Это значит, что   будут загружены файлы ресурсов для входа в систему, такие как .profile или .login   оболочкой. Если задана команда, она передается оболочке   для выполнения. В противном случае выполняется интерактивная оболочка. Судо   пытается перейти в домашний каталог этого пользователя перед запуском   оболочка. Он также инициализирует среду, оставляя DISPLAY и TERM   без изменений, установка HOME, SHELL, USER, LOGNAME и PATH, а также   содержимое / etc / environment в системах Linux и AIX. Все остальные   переменные среды удаляются.

    
ответ дан Lety 24.07.2014 в 21:48
источник