Запускать скрипт от имени пользователя root при входе в систему (нет пользователя sudoer, сеанс оболочки)
8
Очень похоже /etc/profileи ~/.profileно запускается по руту, а не пользователь делает логин. /etc/rc.localзапускается после загрузки, но мне нужно запустить скрипт до входа в систему. Пользователь не sudoer один.
Может быть способ сделать это, но это не будет похоже на /etc/profileто, ~/.profileпотому что выполнение кода в этих сценариях выполняется оболочкой пользователя и подчиняется контролю пользователя, тогда как если вы не хотите, чтобы пользователь имел возможность запускать программы как rootтаковые, тогда это должно быть выполнено какой-либо запущенной службой, внешней по отношению к процессам пользователя. ... Может помочь, если вы скажете нам цель скрипта, который вы хотите запустить.
Элия Каган
Мне нужно выполнить одно конкретное (--bind) монтирование для одного конкретного пользователя. Я пробовал fstab с опциями владельца и пользователя, но он не работает. /etc/rc.local - это один из вариантов, но он всегда выполняет монтирование независимо от того, входит пользователь в систему или нет. В настоящее время я предоставил пользователю sudoer привилегии для «монтирования», но это обходной путь, и я не люблю предоставлять какие-либо привилегии обычным пользователям. Я думаю, что я буду использовать вместо rc.local. Спасибо!
Антонио Санчес
Вы можете создать корневой скрипт только с этой конкретной mountкомандой и дать пользователю право запускать только этот скрипт (настройка /etc/sudoers). Команда с заданными параметрами может быть установлена непосредственно в sudoers.
энзотиб
Я уже пробовал таким образом. Дело в том, что когда наступает время для запуска «mount» внутри скрипта, снова «sudo» является обязательным, потому что скрипт запускается «пользователем», а не «root», так что в конце дня «mount» должен быть предоставлен и для пользователя, и вместо одного правила sudoers теперь у меня есть два. Это мой опыт, поэтому, пожалуйста, имейте в виду, что я не эксперт, и, возможно, я сделал что-то не так. Спасибо!
Антонио Санчес
Ответы:
3
Просто чтобы вернуться к методу sudoers, я думаю, что вы были почти там, прежде чем сдаться. Глядя на ваши последние комментарии, я просто хотел бы остановиться на том, что, вероятно, поможет вам:
Если вы запускаете скрипт от имени пользователя root, вам не нужно вызывать sudo из него.
У меня есть такой скрипт:
#! /bin/bash
echo $USER
whoami
Если я бегу, sudo ./myscriptя вижу rootвозвращение для обоих. Сеанс, в котором выполняется скрипт, является корневой оболочкой.
Короче говоря, это означает, что все, что вы делаете в своем скрипте, уже имеет права root. Вам не нужно звонить sudo(не то, чтобы это причиняло боль - rootобычно есть sudoразрешения).
Так что напишите ваш скрипт, chownего rootи chmodего 700(чтобы только root мог запускать, читать или редактировать его), а затем просто позволить вашим пользователям запускать его через sudoers. Это должно работать.
Если это не работает, это скорее проблема со скриптом, а не с инфраструктурой разрешений. Я бы предложил предоставить пользователю полный sudoдоступ (проще всего добавить в группу администраторов), а затем запустить скрипт.
Шаг 1. Создайте скрипт с помощью команды bind в любом редакторе. Например:
sudo emacs bind_user_directories.sh
содержание:
#!/bin/bash#NOTE: this file would be placed in /usr/local/sbin/ folder as bind_user_directories.sh#alternatively it could be placed in /etc/init.d/ ... (I guess)### BEGIN INIT INFO# Provides: bind_user_directories# Required-Start: # Required-Stop: # Should-Start: $named# Default-Start: 0 2 3 4 5 6 (I guess...)# Default-Stop: 1# Short-Description: mount --bind for a user# Description: runs mount --bind command for certain pre-defined directories for a specific user### END INIT INFO# What is this?
DESC="bind_user_directories"# See how we were called.case"$1"in
start)
log_progress_msg "bind directories for user..."
sudo mount --bind /source/path /target/path
log_progress_msg "done: bind directories for user";;
stop)
log_progress_msg "umount --bind directories for user..."
sudo umount /target/path
log_progress_msg "done: unbind directories for user";;
restart)
$0 stop
sleep 1
$0 start
;;*)#log_success_msg "Usage: bind_user_directories {start|stop|restart}"
log_success_msg "Usage: service bind_user_directories <start|stop|restart>"
exit 1;;esac
exit 0
Шаг 2. сохраните bind_user_directories.sh и сделайте его исполняемым:
chmod a+x bind_user_directories.sh
Шаг 3. свяжите его с подходящим местом, таким как / usr / local / sbin:
description "runs mount --bind command for certain pre-defined directories for a specific user"
start on filesystem and net-device-up IFACE!=lo
stop on runlevel [!023456]
console output
respawn
respawn limit 105
exec /usr/local/sbin/bind_user_directories.sh start
Если это работает для вас, пожалуйста, дайте мне знать. Вы можете проверить системный журнал на наличие сообщений после входа в систему. (Я еще не тестировал его и никогда раньше не реализовывал ничего подобного.) Если вы улучшаете решение, пожалуйста, поделитесь своим окончательным решением здесь. Спасибо.
Но Антонио Санчес ищет, как запустить скрипт, rootкогда конкретный пользователь входит в систему .
Элия Каган
Скрипт должен запускаться независимо, сессия является графической или стандартной оболочкой. Я обновил заголовок, чтобы отметить это. Я прочитал кое-что об Upstart, но это выглядит сложным для (очевидно) простой задачи. В любом случае и до сих пор Upstart, кажется, единственный способ сделать это. Если вы знаете Upstart, будет ли сложно достаточно узнать, как выполнить эту работу? Спасибо!
/etc/profile
то,~/.profile
потому что выполнение кода в этих сценариях выполняется оболочкой пользователя и подчиняется контролю пользователя, тогда как если вы не хотите, чтобы пользователь имел возможность запускать программы какroot
таковые, тогда это должно быть выполнено какой-либо запущенной службой, внешней по отношению к процессам пользователя. ... Может помочь, если вы скажете нам цель скрипта, который вы хотите запустить.mount
командой и дать пользователю право запускать только этот скрипт (настройка/etc/sudoers
). Команда с заданными параметрами может быть установлена непосредственно вsudoers
.Ответы:
Просто чтобы вернуться к методу sudoers, я думаю, что вы были почти там, прежде чем сдаться. Глядя на ваши последние комментарии, я просто хотел бы остановиться на том, что, вероятно, поможет вам:
Если вы запускаете скрипт от имени пользователя root, вам не нужно вызывать sudo из него.
У меня есть такой скрипт:
Если я бегу,
sudo ./myscript
я вижуroot
возвращение для обоих. Сеанс, в котором выполняется скрипт, является корневой оболочкой.Короче говоря, это означает, что все, что вы делаете в своем скрипте, уже имеет права root. Вам не нужно звонить
sudo
(не то, чтобы это причиняло боль -root
обычно естьsudo
разрешения).Так что напишите ваш скрипт,
chown
егоroot
иchmod
его700
(чтобы только root мог запускать, читать или редактировать его), а затем просто позволить вашим пользователям запускать его через sudoers. Это должно работать.Если это не работает, это скорее проблема со скриптом, а не с инфраструктурой разрешений. Я бы предложил предоставить пользователю полный
sudo
доступ (проще всего добавить в группу администраторов), а затем запустить скрипт.источник
Шаг 1. Создайте скрипт с помощью команды bind в любом редакторе. Например:
содержание:
Шаг 2. сохраните bind_user_directories.sh и сделайте его исполняемым:
Шаг 3. свяжите его с подходящим местом, таким как / usr / local / sbin:
Шаг 4. Создайте скрипт upstart:
содержание:
Если это работает для вас, пожалуйста, дайте мне знать. Вы можете проверить системный журнал на наличие сообщений после входа в систему. (Я еще не тестировал его и никогда раньше не реализовывал ничего подобного.) Если вы улучшаете решение, пожалуйста, поделитесь своим окончательным решением здесь. Спасибо.
источник
mdm
s/etc/mdm/PostLogin/
в мире Ubuntu !!Чтобы запустить скрипт от имени пользователя root перед входом в систему
Вы можете начать сценарий с Upstart .
Вы можете добавить вызов сценария к существующим / GDM / KDM скриптов и т.д. запуска .
Примеры: Тема: FAQ: Автозапуск / Автозапуск, Периодический запуск .
источник
root
когда конкретный пользователь входит в систему .