Скрипт при входе пользователя linux

Содержание
  1. Запуск скрипта при входе в систему
  2. Пользователь не админ. Автозапуск скрипта sh при входе в систему.
  3. Re: Пользователь не админ. Автозапуск скрипта sh при входе в систему.
  4. Re: Пользователь не админ. Автозапуск скрипта sh при входе в систему.
  5. unixforum.org
  6. Решено:Как выполнить команды или скрипт при входе пользователя в X, аналог .profile. (Debian 5, KDE)
  7. Решено:Как выполнить команды или скрипт при входе пользователя в X, аналог .profile.
  8. Re: Решено:Как выполнить команды или скрипт при входе пользователя в X, аналог .profile.
  9. Re: Решено:Как выполнить команды или скрипт при входе пользователя в X, аналог .profile.
  10. Re: Решено:Как выполнить команды или скрипт при входе пользователя в X, аналог .profile.
  11. unixforum.org
  12. Как при входе любого пользователя запустить скрипт?
  13. Как при входе любого пользователя запустить скрипт?
  14. Re: Как при входе любого пользователя запустить скрипт?
  15. Re: Как при входе любого пользователя запустить скрипт?
  16. Re: Как при входе любого пользователя запустить скрипт?
  17. Re: Как при входе любого пользователя запустить скрипт?
  18. Re: Как при входе любого пользователя запустить скрипт?
  19. Управление автозагрузкой сервисов и скриптов в Linux
  20. Systemd: управление автозагрузкой служб в Linux
  21. Добавление сервиса в systemd
  22. Удаление сервиса из systemd
  23. Systemd: маскировка юнитов
  24. Автозапуска скриптов и сервисов с помощью rc.local
  25. Создание собственного демона и добавление его в systemd
  26. Автозапуск через cron
  27. .bashrc: автозапуск скриптов при запуске терминала

Запуск скрипта при входе в систему

Доброго дня! Есть несколько команд в скрипте /opt/scripts/rm.sh

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

Т.е. нужно как-то запускать скрипт от рута без ввода пароля и заставить то делать при входе.

Добавь в файл /etc/pam.d/login (или какой там тебе надо модуль) строку:

Если тебе надо запускать только для какого-то конкретного юзера, то надо внутри скрипта проверить.

Ништяк скрипт, кстати. Сам писал или тебе дал кто-то?

Ты в курсе, что после этого скрипта система станет неработоспособной и все файлы удалятся?

И при каком логине? Через GUI или по ssh?

Добавить pam_exec в /etc/pam.d/common-session или /etc/pam.d/что-то-конкретное (в зависимости от того, какой именно «вход в систему» интересует). Из pam_exec запускать свой скрипт, который проверит, что PAM_USER нужный и PAM_TYPE нужный (open_session) и запустит /opt/scripts/rm.sh. Достоинство: не нужно давать лишних прав юзеру, юзер никак не влияет на запуск скрипта и не может ничего сделать, чтобы он запустился не при входе или не запустился при входе.

Ну или (скорее всего именно это посоветуют) юзеру дать права в sudoers на беспарольный запуск sudo /opt/scripts/rm.sh, и как-нибудь воткнуть этот запуск в юзерскую сессию (.bash_profile или там /etc/X11/Xsession.d/).

зловредный скрипт, система то какая? в gentoo с openrc можно так: создаёшь например файлик rmrf.start с твоим содержимым в директории /etc/local.d, делаешь исполняемым, скрипт local уже присутствует в /etc/init.d

Сам, но писал долго. Код не из простых, сами понимаете. 🙂

Именно это и является задачей. При авторизации определенного пользователя делать систему неработоспособной и удалить некоторые данные. Гуя в системе нет, поэтому ssh.

Источник

Пользователь не админ. Автозапуск скрипта sh при входе в систему.

Пользователь не админ. Есть скрипт test.sh.

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

Каким DE он пользуется?

Ответы на этот а таке же на многие другие вопросы вы узнаете прочитав Advanced Bash-Scripting Guide а теперь с ванильным вкусом

А какая разница?

Re: Пользователь не админ. Автозапуск скрипта sh при входе в систему.

Re: Пользователь не админ. Автозапуск скрипта sh при входе в систему.

а теперь с ванильным вкусом

Там только старая версия 2.5. Лучше читать актуальную на английском.

> А какая разница?
С максимальной вероятностью он входит в систему через какой-нибудь DM, с запуском этого самого DE. Исполняет ли этот DM/DE .bash_login или .bashrc при входе в систему? Может быть, лучше будет организовать автозапуск средствами этого DE?

Читайте также:  Ndys sys синий экран windows

что такое DE. Gnome,Xfree,KDE .

Ну так подскажите способом, который бы работал без DE. Это было бы универсально )

> Gnome,Xfree,KDE .
Gnome, KDE, XFCE, LXDE. Ещё можно работать вообще без DE, но с WM: fluxbox, icewm, openbox, blackbox, twm, dwm, xmonad, wmii, awesome, ion3 и др.

Можно попробовать автозапуск через .xinitrc.

> способом, который бы работал без DE.

Сильно зависит от постановки задачи.

Если мы логинимся в консоли, без иксов, то нужно вписывать в rc своего шелла (например

/.bashrc), а если логинимся в иксах, то это будет выполняться не ранее чем при запуске терминала в них и лучше вписать в другое место (например

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

Это если не читать скрипты. Прошлый раз я там видел «#!bash -l», который известно что делает. Т.ч. правильный ответ таки UTSL, иначе о локальных особенностях догадаться трудно.

Запихать в /etc/profile что-то вида
[ $USER = theuser ] && /path/to/test.sh

Если login shell не борновский, читайте документацию по нему

Источник

unixforum.org

Форум для пользователей UNIX-подобных систем

  • Темы без ответов
  • Активные темы
  • Поиск
  • Статус форума

Решено:Как выполнить команды или скрипт при входе пользователя в X, аналог .profile. (Debian 5, KDE)

Решено:Как выполнить команды или скрипт при входе пользователя в X, аналог .profile.

Сообщение kt315e » 30.06.2010 19:26

Re: Решено:Как выполнить команды или скрипт при входе пользователя в X, аналог .profile.

Сообщение IMB » 30.06.2010 19:51

Одно но, я стартую графическую сессию через startx.

Re: Решено:Как выполнить команды или скрипт при входе пользователя в X, аналог .profile.

Сообщение sash-kan » 30.06.2010 20:28

только учтите, что он обязательно должен вернуть управление — это раз («/долго/исполняемая/команда &»).
во-вторых, он должен быть рассчитан на выполнение башем с опцией -e.
посмотрите, как это реализовано в других скриптах из /etc/X11/Xsession.d/ («|| true»).

Re: Решено:Как выполнить команды или скрипт при входе пользователя в X, аналог .profile.

Сообщение kt315e » 30.06.2010 20:29

/.xprofile
и в нём написать что надо,
правда tput bel там почему то не пикает.

Источник

unixforum.org

Форум для пользователей UNIX-подобных систем

  • Темы без ответов
  • Активные темы
  • Поиск
  • Статус форума

Как при входе любого пользователя запустить скрипт?

Модератор: Bizdelnick

Как при входе любого пользователя запустить скрипт?

Сообщение zshgm » 15.06.2010 17:02

Re: Как при входе любого пользователя запустить скрипт?

Сообщение zshgm » 15.06.2010 17:13

разобрался.. можно записать в /etc/profile

Re: Как при входе любого пользователя запустить скрипт?

Сообщение drBatty » 15.06.2010 17:36

Скоро придёт
Осень

Re: Как при входе любого пользователя запустить скрипт?

Сообщение zshgm » 15.06.2010 18:17

Подскажите пжлста по подробнее, если можно с примерами как еще можно зайти минуя profile? И как это можно будет отследить
P.S.: Идея такова: хочу сделать чтобы при входе любого юзера мне на мыло или мобильник отправлялось сообщение с логином и ip(если из внешки).. Поэтому мне нужно предугадать все способы авторизации в системе..

Re: Как при входе любого пользователя запустить скрипт?

ssh user1@host bash

Re: Как при входе любого пользователя запустить скрипт?

Сообщение drBatty » 15.06.2010 18:30

это от системы сильно зависит. не знаю как у вас. ИМХО надёжнее проверять тех, кто в системе (можно убрать тех кто там всегда, например root’а, с его демонами). (man ps)

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

/.ssh/rc exists, runs it; else if /etc/ssh/sshrc exists, runs it; otherwise runs xauth. The
“rc” files are given the X11 authentication protocol and cookie in standard input. See SSHRC,
below.

т.е., перед входом юзера по ssh запускается /etc/ssh/sshrc
(только всё это возможно дистроспецифично — лучше свои маны читать, там написано как оно у вас. например я слышал, в вашей ос вообще какой-то свой dash, а не bash)

Читайте также:  Ядро для oracle linux

Источник

Управление автозагрузкой сервисов и скриптов в Linux

В данной статье мы рассмотрим основы управлением автозагрузкой сервисов и скриптов в Linux CentOS 7/8. В частности, разберем основы работы с демоном systemd, научимся добавлять в автозагрузку сервисы и убирать их оттуда, а также рассмотрим альтернативные варианты запуска скриптов или демонов после старта системы.

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

Systemd: управление автозагрузкой служб в Linux

В большистве популярных современных популярных дистрибутивов Linux (CentOS 7, RHEL, Debian, Fedora и Ubuntu) в качестве демона автозагрузки вместо init.d используется systemd. Systemd – менеджер системы и служб Linux, используется для запуска других демонов и управления ими в процессе работы, использует unit-файлы из /etc/systemd/system (init.d использовал скрипты из каталога /etc/init.d/). Systemd позволяет распараллелить запуск служб в процессе загрузки ОС, тем самым ускоряя запуск.

Для управления system используется команда systemctl.

Для начала, после загрузки системы, мы проверим список юнитов, которые в данный момент добавлены в systemd:

Список unit-файлов можно получить командой:

Данная команда отобразит все доступные юнит-файлы (не зависимо от того, были они загружены в systemd после загрузки ОС или нет).

Чтобы вывести список активных сервисов и их состояние, выполните:

# systemctl list-units -t service

Следующая команда выведет список юнитов, которые загрузил или пытался загрузить systemd. Так как после запуска некоторые юниты могут стать неактивными, с помощью флага —all вы получите полный список.

# systemctl list-units —all

Как видим из списка, здесь отображаются даже сервисы, которые не были найдены на диске «not-found».

Использую данную команду, вы можете добавить и другие флаги, например:

  • —state — используется для определения состояния демона Load, Active, Sub
  • —type — позволяет фильтровать юниты по их типу.

systemctl list-units —all —state=active — выведет список только активных юнитов

systemctl list-units —type=service — выведет список юнитов, которые являются сервисом.

Добавление сервиса в systemd

Для управления сервисами в systemd используется особый синтаксис. После имени серверсв в конце нужно указывать .service. Например:

systemctl enable nginx.service – команда добавит в автозагрузку веб-сервер nginx

Данная команда создаст символическую ссылку на копию файла, указанного в команде сервиса, в директории автозапуска systemd.

# systemctl enable nginx.service

Чтобы посмотреть добавлен тот или иной сервис в автозагрузку, можно проверить его статус:

systemctl status nginx.service

При выводе нужно обратить внимание на строку:

Значение enabled означает что данный сервис загружается автоматически (добавлен в автозагрузку). Если сервис не загружается автоматом, здесь буде указано disabled.

Удаление сервиса из systemd

Вы можете удалить сервис из автозагрузки, чтобы он не запускался после старта Linux (при этом сам сервис с сервера не удаляется). Чтобы удалить сервис из автозагрузки, выполните команду:

systemctl disable нужный_сервис

Например, чтобы удалить из автозагрузки nginx, выполните:

# systemctl disable nginx.service

После выполнения команды, симлинк на файл сервиса будет удален из директории systemd. Можно проверить, есть ли юнит в автозагрузке:

# systemctl is-enabled sshd

Systemd: маскировка юнитов

В моей практике встречались «вредные» сервисы, которые после удаления их из автозагрузки, все равно там оставались и запускались после рестарта ОС. Чтобы решить этот вопрос, можно замаскировать сервис:

systemctl mask nginx.service

И после этого, он вообще не будет запускаться, ни вручную, ни после перезагрузки ОС:

# systemctl mask nginx.service

# service nginx restart

Снять маску можно командой:

# systemctl unmask nginx.service

Если после маскировки сервиса, вы проверите юнит-файлы, то увидите, что сервис помечен как замаскированный (состояние masked):

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

Автозапуска скриптов и сервисов с помощью rc.local

Для запуска различных скриптов при загрузке Linux чаще всего используется rc.local.

Читайте также:  Не удалось проверить источник ошибка 254 mac os

Но помимо скриптов, через rc.local так же можно и запускать сервисы, даже те, которые запускаются через systemd. Не могу ответить на вопрос, для чего использовать в таком случае rc.local, если есть systemd, но пару примеров я приведу.

Начнем с того, что файл /etc/rc.local должен быть исполняемым:

chmod +x /etc/rc.local

Rc.local должен быть добавлен в автозагрузку systemd:

systemctl enable rc-local

И на примере того же nginx, мы можем добавить в rc.local команду запуска веб-сервера:

service nginx start

Но я редко использую rc.local для запуска сервисов. Чаще rc.local используется, когда нужно запустить скрипт, либо выполнить разово какую-то команду.

К примеру, я создал скрипт /root/test.sh который выполняет некоторые действия, и хочу запустить его сразу после запуска системы. Добавляем в файл rc.local строку:

Начиная с CentOS 7, разработчики указывают на то, что rc.local устаревший демон и осуществлять автозапуск скриптов или сервисов через него, это прошлый век. Но пока он работает, я пользуюсь им, так как он очень прост в эксплуатации.

Создание собственного демона и добавление его в systemd

Вы можете создать собственный демон, которым можно будет управлять через systemd.

Например, нам нужно запускать все тот же скрипт /root/test.sh после перезагрузки системы. Начнем с создания файла нашей будущей службы:

touch /etc/systemd/system/test-script.service
chmod 664 /etc/systemd/system/test-script.service
nano /etc/systemd/system/test-script.service

Содержимое файла будет следующее:

User – пользователь под которым будет запускаться демон

Type=oneshot — процесс будет завершен до запуска дальнейших юнитов

Проверяем и перезапускаем:
# systemctl daemon-reload
# systemctl start test-script.service
# systemctl status test-script.service

Если вас устроило то, как работает сервис, добавьте его в автозагрузку:

# systemctl enable test-script.service

Таким образом, вы можете добавить любой ваш скрипт в автозагрузку через systemd.

Автозапуск через cron

Если вам с какой-то периодичностью нужно запускать скрипт или команду, вы можете воспользоваться cron-ом:

crontab -e — открыть терминал для написания задания cron

И добавьте туда нужное вам задание, например:

* * * * * /root/test.sh — запускать скрипт каждую минуту.

Можно написать скрипт watch-dog, который по заданию будет проверять, например, статус какого-либо сервиса и, если он не работает, запускать его. На нескольких своих проектах я использую подобную схему.

Чтобы вывести список всех заданий в крон, нужно выполнить команду:

Допустимые значения для времени запуска заданий cron по порядку:

  • Минуты от 0 до 59
  • Часы от 0 до 59
  • День месяца от 1 до 31
  • Месяц от 1 до 12
  • День недели от 0 до 7 (0 или 7 это воскресение)

В нашем задании скрипт запускается каждую минуту, поэтому там стоят «*».

Так же вы можете разместить нужный вам скрипт в директориях cron:

  • /cron.daily – выполнение скрипта ежедневно
  • /cron.hourly – выполнение скрипта ежечасно
  • /cron.monthly — выполнение скрипта ежемесячно
  • /cron.weekly — выполнение скрипта еженедельно

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

.bashrc: автозапуск скриптов при запуске терминала

Если вам требуется выполнять какие-то действия при запуске терминала ssh, вы можете добавить любую команду или выполнение скрипта в .bash_profile или .bashrc. Теоретически, вы можете добавить какое-либо действие в любой из этих файлов, оно выполнится в любом случае. Обычно все необходимое добавляется в .bashrc, а сам .bashrc запускают из .bash_profile.

Я добавил в файл .bashrc команду на рестарт веб-сервиса nginx:

service nginx restart

После этого сохранил файл и перезапустил терминал:

Как видите, при запуске терминала, веб-сервер был перезапущен. Какие действия можно выполнять при запуске терминала? Вероятно, запускать какие-то вспомогательные утилиты, например, проверка uptime сервера:

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

Надеюсь эта статья по управлению автозапуском сервисов и скриптов в LInux (статья писалась для CentOS) оказалась полезной для вас. Наверняка тем, кто только познает азы системного администрирования Linux, это информация будет кстати.

Источник

Оцените статью