Запуск программы от имени другого пользователя без ввода пароля
Я пытаюсь пометить интернет-трафик моего браузера с помощью 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
после ввода пароля фиктивного пользователя я могу запустить браузер chromium как фиктивного пользователя. 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.
Заранее спасибо!
1 ответ
Согласно инструкции sudo:
By default, sudo does not modify HOME
Это означает, что когда вы бежите 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>
пароль) и работает su
root не требует ввода пароля целевого пользователя (<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, будут читаться оболочкой. Если указана команда, она передается в оболочку для выполнения. В противном случае, интерактивная оболочка выполняется. sudo пытается перейти в домашний каталог этого пользователя перед запуском оболочки. Он также инициализирует среду, оставляя DISPLAY и TERM неизменными, устанавливая HOME, SHELL, USER, LOGNAME и PATH, а также содержимое /etc/environment в системах Linux и AIX. Все остальные переменные среды удаляются.