> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/ru/post-exploitation/linux-persistence.md).

# Закрепление в Linux

Персистентность — это постэксплуатационная фаза, на которой доступ делается повторяемым после получения первой оболочки. В реальных работах используйте эти техники только тогда, когда они явно входят в объем работ, документируйте каждое изменение и удаляйте всю персистентность перед завершением теста.

{% hint style="warning" %}
Персистентность затрагивает учетные записи пользователей, пути входа, запланированные задачи, файлы автозапуска или web root. Рассматривайте каждую команду как действие в лаборатории или в ходе авторизованной оценки и ведите заметку по очистке для каждого внесенного изменения.
{% endhint %}

## Краткая карта

| Метод                                      | Лучшее применение                                                                | Основное доказательство                                        |
| ------------------------------------------ | -------------------------------------------------------------------------------- | -------------------------------------------------------------- |
| Манипуляции с учетной записью пользователя | Контролируемая персистентность в лаборатории или тестирование восстановления.    | `/etc/passwd`, `/etc/shadow`, `/etc/group`, включения sudoers. |
| Авторизованные ключи SSH                   | Надежный доступ по ключу для известного пользователя.                            | `~/.ssh/authorized_keys`, права доступа к файлу, журналы SSH.  |
| Задания Cron                               | Регулярно повторять безвредные команды проверки по расписанию.                   | `/etc/crontab`, `/etc/cron.d/*`, пользовательский crontab.     |
| Скрипты автозапуска                        | Выполнение после перезагрузки или запуска службы.                                | `/etc/rc.local`, systemd units, профильные файлы.              |
| Профили оболочки                           | Срабатывают при интерактивном входе.                                             | `.bashrc`, `.profile`, `/etc/profile`.                         |
| Проверка доступа к вебу                    | Безопасно подтвердить доступность записываемых web root и серверного выполнения. | Файл в web root, журналы доступа, пользователь веб-сервера.    |

## Манипуляции с учетной записью пользователя

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

### Создать новую привилегированную учетную запись

```bash
useradd -m -s /bin/bash assessment-user
usermod -aG sudo assessment-user
passwd assessment-user
```

Debian/Ubuntu:

```bash
adduser assessment-user sudo
```

CentOS/RHEL:

```bash
usermod -aG wheel assessment-user
```

### Изменить существующего пользователя

```bash
usermod -s /bin/bash user
usermod -aG sudo user
echo "user ALL=(ALL:ALL) ALL" > /etc/sudoers.d/user
chmod 440 /etc/sudoers.d/user
passwd user
```

### Проверить и очистить

```bash
id assessment-user
groups assessment-user
sudo -l -U assessment-user
```

Очистка:

```bash
deluser assessment-user sudo 2>/dev/null
userdel -r assessment-user
rm -f /etc/sudoers.d/user
```

## Персистентность через SSH

Персистентность через SSH-ключи чище, чем смена паролей, но все равно хорошо видна в контроле целостности файлов и журналах SSH.

### Авторизованные ключи

Для обычного пользователя:

```bash
mkdir -p /home/user/.ssh
echo "ssh-rsa AAAAB3NzaC1yc2EA... assessment-key" >> /home/user/.ssh/authorized_keys
chmod 700 /home/user/.ssh
chmod 600 /home/user/.ssh/authorized_keys
chown -R user:user /home/user/.ssh
```

Для root — только при явном разрешении:

```bash
mkdir -p /root/.ssh
echo "ssh-rsa AAAAB3NzaC1yc2EA... assessment-key" >> /root/.ssh/authorized_keys
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
```

### Второй порт SSH

Добавление второго порта шумное и должно быть четко задокументировано:

```bash
echo "Port 22" >> /etc/ssh/sshd_config
echo "Port 2222" >> /etc/ssh/sshd_config
systemctl restart sshd
```

Проверка:

```bash
ss -tuln | grep ':22\|:2222'
ssh -i id_rsa user@target -p 2222
```

Очистка:

```bash
sed -i '/Port 2222/d' /etc/ssh/sshd_config
systemctl restart sshd
```

## Персистентность через Cron

Персистентность через cron полезна в лабораториях, потому что ее легко продемонстрировать и легко удалить. В реальных средах задания cron часто отслеживаются.

### Системный cron

```bash
echo "* * * * * root /opt/assessment/validate-access.sh" >> /etc/crontab
```

### Пользовательский cron

```bash
(crontab -l 2>/dev/null; echo "* * * * * /opt/assessment/validate-access.sh") | crontab -
```

### `/etc/cron.d`

```bash
echo "* * * * * root /opt/assessment/validate-access.sh" > /etc/cron.d/system-update
chmod 644 /etc/cron.d/system-update
```

Очистка:

```bash
crontab -l | grep -v '/opt/assessment/validate-access.sh' | crontab -
rm -f /etc/cron.d/system-update
sed -i '/validate-access.sh/d' /etc/crontab
```

## Скрипты автозапуска

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

### `rc.local`

```bash
cat > /etc/rc.local <<'EOF'
#!/bin/bash
/opt/assessment/validate-access.sh &
exit 0
EOF
chmod +x /etc/rc.local
```

### Профили оболочки

Профиль пользователя:

```bash
echo "nohup /opt/assessment/validate-access.sh >/dev/null 2>&1 &" >> ~/.bashrc
```

Глобальный профиль:

```bash
echo "nohup /opt/assessment/validate-access.sh >/dev/null 2>&1 &" >> /etc/profile
```

Очистка:

```bash
sed -i '/validate-access.sh/d' ~/.bashrc
sed -i '/validate-access.sh/d' /etc/profile
rm -f /etc/rc.local
```

## Проверка доступа к вебу

Записываемый web root может обеспечить повторяемый доступ, если сервер выполняет загруженный код. Не храните в заметках действующие web shell payload; вместо этого документируйте путь, среду выполнения, запрос проверки, журналы и очистку.

### Безопасный шаблон документации

| Поле                | Пример                                                                                |
| ------------------- | ------------------------------------------------------------------------------------- |
| Web root            | `/var/www/html/`  или `/srv/www/`                                                     |
| Записываемый путь   | `/var/www/html/images/`                                                               |
| Среда выполнения    | PHP, Python CGI, ASPX, JSP                                                            |
| Имя тестового файла | Явно помеченное имя файла для оценки                                                  |
| Запрос проверки     | Безвредный запрос, подтверждающий серверное выполнение, например возврат текущего UID |
| Команда очистки     | Точная команда удаления и пути к журналам для проверки                                |

### Контрольный список развертывания

```bash
ls -la /var/www/ /srv/www/ 2>/dev/null
find /var/www /srv/www -type d -writable 2>/dev/null
find /var/www /srv/www -type f -mtime -1 -ls 2>/dev/null
```

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

Очистка:

```bash
rm -f /path/to/authorized-test-file
find /var/www /srv/www -type f -mtime -1 -ls 2>/dev/null
grep -R "authorized-test" /var/log/apache2 /var/log/httpd /var/log/nginx 2>/dev/null
```

## Заметки для отчета

Запишите:

1. Точный использованный метод персистентности.
2. Измененные пути к файлам.
3. Пользователь, группа и права до и после.
4. Команда проверки и результат.
5. Команда очистки и подтверждение.

## Краткий контрольный список очистки

```bash
grep -R "assessment-key\|validate-access.sh\|authorized-test" /etc /home /root /var/www /srv/www 2>/dev/null
find /etc/cron* -type f -mtime -7 -ls 2>/dev/null
find /var/www /srv/www -type f -mtime -7 -ls 2>/dev/null
last
journalctl -u ssh -n 100 2>/dev/null
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/ru/post-exploitation/linux-persistence.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
