arch-x1: 2026-06-15 14:51:57 | 4
Affected files: .obsidian/appearance.json .obsidian/plugins/editing-toolbar/data.json 00 Inbox/Sudoers.md 99 System/INDEX.md
This commit is contained in:
Vendored
+1
-1
@@ -8,7 +8,7 @@
|
|||||||
"interfaceFontFamily": "Fira Sans,FiraCode Nerd Font",
|
"interfaceFontFamily": "Fira Sans,FiraCode Nerd Font",
|
||||||
"textFontFamily": "Fira Sans,FiraCode Nerd Font",
|
"textFontFamily": "Fira Sans,FiraCode Nerd Font",
|
||||||
"baseFontSizeAction": true,
|
"baseFontSizeAction": true,
|
||||||
"baseFontSize": 16,
|
"baseFontSize": 15,
|
||||||
"monospaceFontFamily": "FiraCode Nerd Font",
|
"monospaceFontFamily": "FiraCode Nerd Font",
|
||||||
"nativeMenus": false,
|
"nativeMenus": false,
|
||||||
"showRibbon": true,
|
"showRibbon": true,
|
||||||
|
|||||||
+14
-64
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"lastVersion": "4.0.8",
|
"lastVersion": "4.0.8",
|
||||||
"aestheticStyle": "default",
|
"aestheticStyle": "custom",
|
||||||
"positionStyle": "top",
|
"positionStyle": "fixed",
|
||||||
"menuCommands": [
|
"menuCommands": [
|
||||||
{
|
{
|
||||||
"id": "editing-toolbar:editor-undo",
|
"id": "editing-toolbar:editor-undo",
|
||||||
@@ -411,43 +411,6 @@
|
|||||||
"name": "Clear text formatting",
|
"name": "Clear text formatting",
|
||||||
"icon": "eraser"
|
"icon": "eraser"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"id": "editing-toolbar:header2-text",
|
|
||||||
"name": "Header 2",
|
|
||||||
"icon": "header-2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "editing-toolbar:header3-text",
|
|
||||||
"name": "Header 3",
|
|
||||||
"icon": "header-3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "SubmenuCommands-header",
|
|
||||||
"name": "submenu",
|
|
||||||
"icon": "header-n",
|
|
||||||
"SubmenuCommands": [
|
|
||||||
{
|
|
||||||
"id": "editing-toolbar:header1-text",
|
|
||||||
"name": "Header 1",
|
|
||||||
"icon": "header-1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "editing-toolbar:header4-text",
|
|
||||||
"name": "Header 4",
|
|
||||||
"icon": "header-4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "editing-toolbar:header5-text",
|
|
||||||
"name": "Header 5",
|
|
||||||
"icon": "header-5"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "editing-toolbar:header6-text",
|
|
||||||
"name": "Header 6",
|
|
||||||
"icon": "header-6"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"id": "editing-toolbar:toggle-bold",
|
"id": "editing-toolbar:toggle-bold",
|
||||||
"name": "Bold",
|
"name": "Bold",
|
||||||
@@ -1075,7 +1038,7 @@
|
|||||||
"shouldShowMenuOnSelect": false,
|
"shouldShowMenuOnSelect": false,
|
||||||
"cMenuVisibility": true,
|
"cMenuVisibility": true,
|
||||||
"cMenuBottomValue": 4.25,
|
"cMenuBottomValue": 4.25,
|
||||||
"cMenuNumRows": 12,
|
"cMenuNumRows": 1,
|
||||||
"cMenuWidth": 610,
|
"cMenuWidth": 610,
|
||||||
"cMenuFontColor": "#2DC26B",
|
"cMenuFontColor": "#2DC26B",
|
||||||
"cMenuBackgroundColor": "#d3f8b6",
|
"cMenuBackgroundColor": "#d3f8b6",
|
||||||
@@ -1102,19 +1065,19 @@
|
|||||||
"toolbarBackgroundColor": "#2D3033",
|
"toolbarBackgroundColor": "#2D3033",
|
||||||
"toolbarIconColor": "#E2E8F0",
|
"toolbarIconColor": "#E2E8F0",
|
||||||
"toolbarIconSize": 18,
|
"toolbarIconSize": 18,
|
||||||
"aestheticStyle": "default"
|
"aestheticStyle": "glass"
|
||||||
},
|
},
|
||||||
"following": {
|
"following": {
|
||||||
"toolbarBackgroundColor": "rgba(var(--background-secondary-rgb), 0.7)",
|
"toolbarBackgroundColor": "rgba(var(--background-secondary-rgb), 0.7)",
|
||||||
"toolbarIconColor": "var(--text-normal)",
|
"toolbarIconColor": "var(--text-normal)",
|
||||||
"toolbarIconSize": 18,
|
"toolbarIconSize": 18,
|
||||||
"aestheticStyle": "default"
|
"aestheticStyle": "glass"
|
||||||
},
|
},
|
||||||
"fixed": {
|
"fixed": {
|
||||||
"toolbarBackgroundColor": "rgba(var(--background-secondary-rgb), 0.7)",
|
"toolbarBackgroundColor": "#F5F8FA",
|
||||||
"toolbarIconColor": "var(--text-normal)",
|
"toolbarIconColor": "#4A5568",
|
||||||
"toolbarIconSize": 18,
|
"toolbarIconSize": 12,
|
||||||
"aestheticStyle": "default"
|
"aestheticStyle": "custom"
|
||||||
},
|
},
|
||||||
"mobile": {
|
"mobile": {
|
||||||
"toolbarBackgroundColor": "rgba(var(--background-secondary-rgb), 0.7)",
|
"toolbarBackgroundColor": "rgba(var(--background-secondary-rgb), 0.7)",
|
||||||
@@ -1123,9 +1086,9 @@
|
|||||||
"aestheticStyle": "default"
|
"aestheticStyle": "default"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"toolbarBackgroundColor": "#2D3033",
|
"toolbarBackgroundColor": "#F5F8FA",
|
||||||
"toolbarIconColor": "#E2E8F0",
|
"toolbarIconColor": "#4A5568",
|
||||||
"toolbarIconSize": 18,
|
"toolbarIconSize": 12,
|
||||||
"useCurrentLineForRegex": false,
|
"useCurrentLineForRegex": false,
|
||||||
"ai": {
|
"ai": {
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
@@ -1149,21 +1112,8 @@
|
|||||||
"artifact": "03-agent"
|
"artifact": "03-agent"
|
||||||
},
|
},
|
||||||
"pkmer": {
|
"pkmer": {
|
||||||
"tokenExpiresAt": 1781122456017,
|
"tokenExpiresAt": 0,
|
||||||
"userInfo": {
|
"userInfo": null
|
||||||
"sub": "fa484d57-e07b-48f3-9410-ff0ce39782d8",
|
|
||||||
"name": "gcdmitry",
|
|
||||||
"email": "gcdmitry@gmail.com",
|
|
||||||
"ai_quota": {
|
|
||||||
"quota": 50000000,
|
|
||||||
"usedQuota": 0,
|
|
||||||
"remainingQuota": 50000000,
|
|
||||||
"remainingTokens": 100,
|
|
||||||
"requestCount": 0
|
|
||||||
},
|
|
||||||
"thino": false,
|
|
||||||
"supporter": false
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"enableCustomModel": false,
|
"enableCustomModel": false,
|
||||||
"customModel": {
|
"customModel": {
|
||||||
|
|||||||
@@ -0,0 +1,402 @@
|
|||||||
|
---
|
||||||
|
title: Sudoers
|
||||||
|
status: seed
|
||||||
|
type: guide
|
||||||
|
tags:
|
||||||
|
- linux
|
||||||
|
- sudo
|
||||||
|
- security
|
||||||
|
created: 2026-06-15
|
||||||
|
updated: 2026-06-15
|
||||||
|
aliases:
|
||||||
|
- sudoers
|
||||||
|
- Настройка sudo
|
||||||
|
---
|
||||||
|
|
||||||
|
# Sudoers
|
||||||
|
|
||||||
|
`sudo` запускает команду с полномочиями другого пользователя, обычно `root`. Политика доступа задаётся в `/etc/sudoers` и дополнительных файлах из `/etc/sudoers.d/`.
|
||||||
|
|
||||||
|
`sudo` не является заменой файловых прав. Он выдаёт полномочия на конкретное действие после проверки пользователя, хоста, целевого пользователя, команды и параметров политики.
|
||||||
|
|
||||||
|
## Где хранится конфигурация
|
||||||
|
|
||||||
|
- `/etc/sudoers` — основной файл.
|
||||||
|
- `/etc/sudoers.d/` — каталог для отдельных правил.
|
||||||
|
- `/var/log/` или журнал systemd — записи о вызовах `sudo`, в зависимости от конфигурации системы.
|
||||||
|
|
||||||
|
Основной файл обычно содержит:
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
@includedir /etc/sudoers.d
|
||||||
|
```
|
||||||
|
|
||||||
|
Для локальных правил удобнее создавать отдельный файл:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo visudo -f /etc/sudoers.d/backup
|
||||||
|
```
|
||||||
|
|
||||||
|
Имена файлов в `sudoers.d` лучше делать без точки и символа `~`: некоторые реализации игнорируют такие файлы. Права должны исключать запись обычными пользователями:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo chown root:root /etc/sudoers.d/backup
|
||||||
|
sudo chmod 0440 /etc/sudoers.d/backup
|
||||||
|
```
|
||||||
|
|
||||||
|
## Редактирование через visudo
|
||||||
|
|
||||||
|
Не следует редактировать `/etc/sudoers` обычным редактором. `visudo` блокирует файл от одновременного изменения и проверяет синтаксис перед сохранением.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo visudo
|
||||||
|
sudo visudo -f /etc/sudoers.d/backup
|
||||||
|
sudo visudo -c
|
||||||
|
```
|
||||||
|
|
||||||
|
Если ошибка уже внесена, исправление потребует действующей root-сессии, загрузки в recovery mode или другого способа получить root-доступ.
|
||||||
|
|
||||||
|
Редактор можно выбрать переменными окружения:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo EDITOR=nvim visudo
|
||||||
|
```
|
||||||
|
|
||||||
|
Возможность выбора редактора зависит от настроек `sudo`; небезопасные переменные окружения могут быть отброшены.
|
||||||
|
|
||||||
|
## Формат правила
|
||||||
|
|
||||||
|
Базовая форма:
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
пользователь хост=(целевой_пользователь:целевая_группа) теги: команды
|
||||||
|
```
|
||||||
|
|
||||||
|
Пример:
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
ada ALL=(root) /usr/bin/systemctl restart nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
Значение полей:
|
||||||
|
|
||||||
|
| Поле | Смысл |
|
||||||
|
|---|---|
|
||||||
|
| `ada` | кому разрешено использовать правило |
|
||||||
|
| `ALL` | на каких хостах действует правило |
|
||||||
|
| `(root)` | от имени какого пользователя разрешён запуск |
|
||||||
|
| `/usr/bin/systemctl restart nginx` | разрешённая команда и аргументы |
|
||||||
|
|
||||||
|
Группа указывается с `%`:
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
%wheel ALL=(ALL:ALL) ALL
|
||||||
|
```
|
||||||
|
|
||||||
|
Это разрешает членам группы `wheel` запускать любые команды от имени любого пользователя и группы. Такое правило выдаёт полный административный доступ.
|
||||||
|
|
||||||
|
## Команды и аргументы
|
||||||
|
|
||||||
|
В правилах следует использовать абсолютный путь:
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
ada ALL=(root) /usr/bin/systemctl status nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
Путь можно узнать командой:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
command -v systemctl
|
||||||
|
```
|
||||||
|
|
||||||
|
Аргументы являются частью разрешения. Эти правила различаются:
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
ada ALL=(root) /usr/bin/systemctl restart nginx
|
||||||
|
ada ALL=(root) /usr/bin/systemctl restart *
|
||||||
|
```
|
||||||
|
|
||||||
|
Первое разрешает перезапустить только `nginx`. Второе намного шире и может разрешить перезапуск произвольного юнита.
|
||||||
|
|
||||||
|
Правило без аргументов в современных версиях `sudo` может разрешать команду с любыми аргументами. Для явного запрета аргументов используется пустая строка:
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
ada ALL=(root) /usr/bin/id ""
|
||||||
|
```
|
||||||
|
|
||||||
|
Поведение сопоставления аргументов и специальных символов зависит от версии `sudo`. После изменения правило нужно проверять на целевой системе.
|
||||||
|
|
||||||
|
## Псевдонимы
|
||||||
|
|
||||||
|
Псевдонимы уменьшают повторение в больших конфигурациях.
|
||||||
|
|
||||||
|
### User_Alias
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
User_Alias OPERATORS = ada, alice, %ops
|
||||||
|
```
|
||||||
|
|
||||||
|
### Runas_Alias
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
Runas_Alias SERVICE_USERS = nginx, postgres
|
||||||
|
```
|
||||||
|
|
||||||
|
### Host_Alias
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
Host_Alias WEB_SERVERS = web01, web02
|
||||||
|
```
|
||||||
|
|
||||||
|
### Cmnd_Alias
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
Cmnd_Alias NGINX_CONTROL = \
|
||||||
|
/usr/bin/systemctl status nginx, \
|
||||||
|
/usr/bin/systemctl reload nginx, \
|
||||||
|
/usr/bin/systemctl restart nginx
|
||||||
|
|
||||||
|
%ops WEB_SERVERS=(root) NGINX_CONTROL
|
||||||
|
```
|
||||||
|
|
||||||
|
Имена псевдонимов принято писать в верхнем регистре.
|
||||||
|
|
||||||
|
## Теги
|
||||||
|
|
||||||
|
### PASSWD и NOPASSWD
|
||||||
|
|
||||||
|
По умолчанию `sudo` запрашивает пароль вызывающего пользователя:
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
ada ALL=(root) /usr/bin/systemctl restart nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
Без пароля:
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
ada ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
`NOPASSWD` удобно для автоматизации, но увеличивает последствия компрометации учётной записи. Его следует ограничивать минимальным набором команд.
|
||||||
|
|
||||||
|
Теги действуют на следующие команды в списке, пока не будут переопределены:
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
ada ALL=(root) NOPASSWD: /usr/bin/systemctl status nginx, \
|
||||||
|
PASSWD: /usr/bin/systemctl restart nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
### NOEXEC
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
ada ALL=(root) NOEXEC: /usr/bin/less /var/log/nginx/error.log
|
||||||
|
```
|
||||||
|
|
||||||
|
`NOEXEC` пытается запретить программе запускать другие процессы. Это дополнительная мера, а не надёжная граница безопасности: поддержка зависит от платформы и типа бинарника.
|
||||||
|
|
||||||
|
### SETENV
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
ada ALL=(root) SETENV: /usr/local/sbin/deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
`SETENV` позволяет передавать переменные окружения с меньшим числом ограничений. Это опасно для команд, поведение которых зависит от `PATH`, загрузчиков библиотек, интерпретаторов и конфигурационных переменных.
|
||||||
|
|
||||||
|
## Defaults
|
||||||
|
|
||||||
|
Директивы `Defaults` управляют поведением `sudo`.
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
Defaults env_reset
|
||||||
|
Defaults use_pty
|
||||||
|
Defaults timestamp_timeout=5
|
||||||
|
Defaults passwd_tries=3
|
||||||
|
```
|
||||||
|
|
||||||
|
Часто используемые параметры:
|
||||||
|
|
||||||
|
| Параметр | Назначение |
|
||||||
|
|---|---|
|
||||||
|
| `env_reset` | оставляет ограниченный набор переменных окружения |
|
||||||
|
| `secure_path` | задаёт доверенный `PATH` для команд через `sudo` |
|
||||||
|
| `use_pty` | запускает команду в псевдотерминале |
|
||||||
|
| `timestamp_timeout` | срок действия успешной аутентификации в минутах |
|
||||||
|
| `passwd_tries` | число попыток ввода пароля |
|
||||||
|
| `log_input`, `log_output` | запись ввода и вывода поддерживаемых сессий |
|
||||||
|
|
||||||
|
Пример `secure_path`:
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/bin"
|
||||||
|
```
|
||||||
|
|
||||||
|
Настройки можно ограничить пользователем, группой, хостом или командой:
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
Defaults:ada timestamp_timeout=0
|
||||||
|
Defaults:%ops use_pty
|
||||||
|
Defaults!/usr/bin/systemctl !log_output
|
||||||
|
```
|
||||||
|
|
||||||
|
`timestamp_timeout=0` требует пароль для каждого отдельного запуска. Отрицательное значение создаёт сессию без ограничения по времени и обычно нежелательно.
|
||||||
|
|
||||||
|
## Запуск от имени другого пользователя
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
ada ALL=(postgres) /usr/bin/psql
|
||||||
|
```
|
||||||
|
|
||||||
|
Использование:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo -u postgres /usr/bin/psql
|
||||||
|
```
|
||||||
|
|
||||||
|
С указанием группы:
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
ada ALL=(deploy:deploy) /usr/local/bin/release
|
||||||
|
```
|
||||||
|
|
||||||
|
## Запреты
|
||||||
|
|
||||||
|
Команду можно исключить через `!`:
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
ada ALL=(root) ALL, !/usr/bin/su, !/usr/bin/bash
|
||||||
|
```
|
||||||
|
|
||||||
|
Такой список не создаёт безопасное ограничение полного административного доступа. Пользователь с разрешением `ALL` часто может получить оболочку другим способом: через редактор, интерпретатор, отладчик, файловый менеджер, загрузку модуля, изменение исполняемого файла или сервисной конфигурации.
|
||||||
|
|
||||||
|
Отрицания полезны для уточнения узкого списка, но не должны использоваться как sandbox.
|
||||||
|
|
||||||
|
## Опасные категории команд
|
||||||
|
|
||||||
|
Нельзя считать ограниченными команды, которые позволяют:
|
||||||
|
|
||||||
|
- запустить оболочку или произвольный процесс;
|
||||||
|
- выполнять код или загружать модули;
|
||||||
|
- редактировать произвольные файлы;
|
||||||
|
- менять владельца, права или ACL;
|
||||||
|
- записывать в исполняемые файлы и каталоги из `PATH`;
|
||||||
|
- менять unit-файлы, cron-задачи, PAM, загрузчик или конфигурацию сервисов;
|
||||||
|
- читать секреты и закрытые ключи;
|
||||||
|
- управлять контейнерами или виртуальными машинами с доступом к хосту.
|
||||||
|
|
||||||
|
Примеры команд, которые часто позволяют выйти к root:
|
||||||
|
|
||||||
|
```text
|
||||||
|
sh, bash, zsh, python, ruby, perl, vim, nvim, less, find,
|
||||||
|
tar, rsync, awk, sed, env, systemctl, docker, podman
|
||||||
|
```
|
||||||
|
|
||||||
|
Риск зависит от разрешённых аргументов, файловой системы и окружения. Само имя команды недостаточно для оценки безопасности.
|
||||||
|
|
||||||
|
## Безопасная автоматизация
|
||||||
|
|
||||||
|
Предпочтительный подход — разрешить один root-owned wrapper с фиксированным поведением:
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
deploy ALL=(root) NOPASSWD: /usr/local/sbin/restart-myapp
|
||||||
|
```
|
||||||
|
|
||||||
|
Требования к wrapper:
|
||||||
|
|
||||||
|
- файл и родительские каталоги не доступны на запись вызывающему пользователю;
|
||||||
|
- используются абсолютные пути;
|
||||||
|
- входные параметры проверяются по allowlist;
|
||||||
|
- не выполняются строки через shell без необходимости;
|
||||||
|
- окружение очищается или задаётся явно;
|
||||||
|
- временные файлы создаются безопасно;
|
||||||
|
- логируются значимые действия.
|
||||||
|
|
||||||
|
Если пользователь может изменить разрешённый скрипт, библиотеку, конфигурацию или исполняемый файл, правило фактически разрешает выполнение произвольного кода с повышенными правами.
|
||||||
|
|
||||||
|
## Проверка правил
|
||||||
|
|
||||||
|
Показать доступные текущему пользователю команды:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo -l
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверить другого пользователя от root:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo -l -U ada
|
||||||
|
```
|
||||||
|
|
||||||
|
Сбросить сохранённую аутентификацию:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo -k
|
||||||
|
```
|
||||||
|
|
||||||
|
Удалить timestamp полностью:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo -K
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверить конфигурацию:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo visudo -c
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверять нужно не только синтаксис, но и фактический результат `sudo -l`: правила могут объединяться, а более широкое разрешение в другом файле отменяет ожидаемое ограничение.
|
||||||
|
|
||||||
|
## Приоритет и объединение правил
|
||||||
|
|
||||||
|
`sudoers` не работает как обычный firewall с простым правилом «первое совпадение победило». Для пользователя могут совпасть несколько записей; разрешения и теги вычисляются по правилам sudoers и могут объединяться.
|
||||||
|
|
||||||
|
Практические следствия:
|
||||||
|
|
||||||
|
- узкое правило не отменяет широкое разрешение из другого файла;
|
||||||
|
- порядок важен для некоторых тегов и параметров;
|
||||||
|
- членство пользователя в нескольких административных группах нужно учитывать;
|
||||||
|
- проверять итог следует через `visudo -c` и `sudo -l`.
|
||||||
|
|
||||||
|
## Минимальный пример
|
||||||
|
|
||||||
|
Задача: разрешить группе `webops` проверять и перезапускать только `nginx`.
|
||||||
|
|
||||||
|
```sudoers
|
||||||
|
Cmnd_Alias NGINX_READ = \
|
||||||
|
/usr/bin/systemctl status nginx
|
||||||
|
|
||||||
|
Cmnd_Alias NGINX_WRITE = \
|
||||||
|
/usr/bin/systemctl reload nginx, \
|
||||||
|
/usr/bin/systemctl restart nginx
|
||||||
|
|
||||||
|
%webops ALL=(root) NGINX_READ
|
||||||
|
%webops ALL=(root) PASSWD: NGINX_WRITE
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверка:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo visudo -c
|
||||||
|
sudo -l
|
||||||
|
sudo /usr/bin/systemctl status nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
## Чек-лист
|
||||||
|
|
||||||
|
- Правило хранится в отдельном файле `/etc/sudoers.d/`.
|
||||||
|
- Файл проверен через `visudo`.
|
||||||
|
- Использованы абсолютные пути.
|
||||||
|
- Разрешены конкретные команды и аргументы.
|
||||||
|
- Нет лишнего `ALL`.
|
||||||
|
- `NOPASSWD` используется только при необходимости.
|
||||||
|
- Пользователь не может изменить разрешённую команду или её зависимости.
|
||||||
|
- Не разрешены оболочки, редакторы и интерпретаторы без осознанной причины.
|
||||||
|
- Учтены переменные окружения и `secure_path`.
|
||||||
|
- Итоговые права проверены через `sudo -l`.
|
||||||
|
- Есть журналирование и способ аварийного получения root-доступа.
|
||||||
|
|
||||||
|
## Связанные заметки
|
||||||
|
|
||||||
|
- [[Super-user]]
|
||||||
|
- [[File Permissions]]
|
||||||
|
- [[Linux - MOC]]
|
||||||
+15
-8
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
generated: 2026-06-12
|
generated: 2026-06-15
|
||||||
total: 510
|
total: 512
|
||||||
---
|
---
|
||||||
|
|
||||||
# Vault Index
|
# Vault Index
|
||||||
@@ -9,7 +9,7 @@ total: 510
|
|||||||
|
|
||||||
| Параметр | Значение |
|
| Параметр | Значение |
|
||||||
|----------|----------|
|
|----------|----------|
|
||||||
| Всего заметок | 510 |
|
| Всего заметок | 512 |
|
||||||
|
|
||||||
## .
|
## .
|
||||||
|
|
||||||
@@ -20,6 +20,13 @@ total: 510
|
|||||||
| [[CODEX]] | CODEX | — | — | [] |
|
| [[CODEX]] | CODEX | — | — | [] |
|
||||||
| [[GEMINI]] | GEMINI | — | — | [] |
|
| [[GEMINI]] | GEMINI | — | — | [] |
|
||||||
|
|
||||||
|
## 00 Inbox
|
||||||
|
|
||||||
|
| Заметка | Aliases | Status | Type | Tags |
|
||||||
|
|---------|---------|--------|------|------|
|
||||||
|
| [[Proxmox VE — local, local-lvm, LVM]] | — | seed | concept | [] |
|
||||||
|
| [[Sudoers]] | sudoers, Настройка sudo | seed | guide | [linux, sudo, security] |
|
||||||
|
|
||||||
## 01 Ideas
|
## 01 Ideas
|
||||||
|
|
||||||
| Заметка | Aliases | Status | Type | Tags |
|
| Заметка | Aliases | Status | Type | Tags |
|
||||||
@@ -245,8 +252,8 @@ total: 510
|
|||||||
| [[Индексное инвестирование]] | Индексное инвестирование | seed | guide | [finance, investments, index, funds] |
|
| [[Индексное инвестирование]] | Индексное инвестирование | seed | guide | [finance, investments, index, funds] |
|
||||||
| [[Инсайдерская торговля и манипулирование рынком]] | Инсайдерская торговля и манипулирование рынком | seed | concept | [finance, investments, market-abuse] |
|
| [[Инсайдерская торговля и манипулирование рынком]] | Инсайдерская торговля и манипулирование рынком | seed | concept | [finance, investments, market-abuse] |
|
||||||
| [[Криптовалюты как инвестиционный актив]] | Криптовалюты как инвестиционный актив | seed | concept | [finance, investments, crypto] |
|
| [[Криптовалюты как инвестиционный актив]] | Криптовалюты как инвестиционный актив | seed | concept | [finance, investments, crypto] |
|
||||||
| [[Облигации с залоговым обеспечением]] | Облигации с залоговым обеспечением денежных требований | seed | concept | [finance, investments, bonds, abs] |
|
|
||||||
| [[Облигации]] | Облигации | seed | guide | [finance, investments, bonds] |
|
| [[Облигации]] | Облигации | seed | guide | [finance, investments, bonds] |
|
||||||
|
| [[Облигации с залоговым обеспечением]] | Облигации с залоговым обеспечением денежных требований | seed | concept | [finance, investments, bonds, abs] |
|
||||||
| [[Оценка акций]] | Оценка акций | seed | guide | [finance, investments, stocks, valuation] |
|
| [[Оценка акций]] | Оценка акций | seed | guide | [finance, investments, stocks, valuation] |
|
||||||
| [[Риск-профиль инвестора]] | Риск-профиль инвестора | seed | concept | [finance, investments, risk] |
|
| [[Риск-профиль инвестора]] | Риск-профиль инвестора | seed | concept | [finance, investments, risk] |
|
||||||
| [[Трейдинг]] | Трейдинг | seed | guide | [finance, trading, risk] |
|
| [[Трейдинг]] | Трейдинг | seed | guide | [finance, trading, risk] |
|
||||||
@@ -447,8 +454,8 @@ total: 510
|
|||||||
| [[ФА - вращение]] | ФА - Вращение | seed | concept | [math, statistics, factor-analysis] |
|
| [[ФА - вращение]] | ФА - Вращение | seed | concept | [math, statistics, factor-analysis] |
|
||||||
| [[ФА - модель, цель, сущность]] | ФА - Модель, Цель, Сущность | stable | concept | [math, ml, mephi, statistics, factor-analysis] |
|
| [[ФА - модель, цель, сущность]] | ФА - Модель, Цель, Сущность | stable | concept | [math, ml, mephi, statistics, factor-analysis] |
|
||||||
| [[Факторное отображение. Факторная структура]] | Факторное Отображение. Факторная Структура | stable | concept | [math, mephi, statistics, factor-analysis] |
|
| [[Факторное отображение. Факторная структура]] | Факторное Отображение. Факторная Структура | stable | concept | [math, mephi, statistics, factor-analysis] |
|
||||||
| [[Факторный анализ. Цели и сущность. Постановка задачи. Отличие от анализа главных компонент]] | Факторный Анализ. Цели И Сущность. Постановка Задачи. Отличие От Анализа Главных Компонент | seed | concept | [math, mephi, statistics, factor-analysis] |
|
|
||||||
| [[Факторный анализ]] | Факторный Анализ | stable | concept | [math, ml, mephi, statistics, factor-analysis] |
|
| [[Факторный анализ]] | Факторный Анализ | stable | concept | [math, ml, mephi, statistics, factor-analysis] |
|
||||||
|
| [[Факторный анализ. Цели и сущность. Постановка задачи. Отличие от анализа главных компонент]] | Факторный Анализ. Цели И Сущность. Постановка Задачи. Отличие От Анализа Главных Компонент | seed | concept | [math, mephi, statistics, factor-analysis] |
|
||||||
| [[Фундаментальная теорема факторного анализа]] | Фундаментальная Теорема Факторного Анализа | stable | concept | [math, mephi, statistics, factor-analysis] |
|
| [[Фундаментальная теорема факторного анализа]] | Фундаментальная Теорема Факторного Анализа | stable | concept | [math, mephi, statistics, factor-analysis] |
|
||||||
| [[Этапы ФА. Выделение факторов]] | Этапы ФА. Выделение Факторов | seed | concept | [math, mephi, statistics, factor-analysis] |
|
| [[Этапы ФА. Выделение факторов]] | Этапы ФА. Выделение Факторов | seed | concept | [math, mephi, statistics, factor-analysis] |
|
||||||
|
|
||||||
@@ -531,8 +538,8 @@ total: 510
|
|||||||
|
|
||||||
| Заметка | Aliases | Status | Type | Tags |
|
| Заметка | Aliases | Status | Type | Tags |
|
||||||
|---------|---------|--------|------|------|
|
|---------|---------|--------|------|------|
|
||||||
| [[DHCP-snooping]] | DHCP-snooping | seed | concept | [network, networking, protocols, dhcp] |
|
|
||||||
| [[DHCP]] | DHCP | stable | concept | [network, networking, protocols, dhcp] |
|
| [[DHCP]] | DHCP | stable | concept | [network, networking, protocols, dhcp] |
|
||||||
|
| [[DHCP-snooping]] | DHCP-snooping | seed | concept | [network, networking, protocols, dhcp] |
|
||||||
| [[Dynamic ARP Inspection]] | Dynamic ARP Inspection | seed | concept | [network, networking, protocols, dhcp, arp] |
|
| [[Dynamic ARP Inspection]] | Dynamic ARP Inspection | seed | concept | [network, networking, protocols, dhcp, arp] |
|
||||||
| [[Механизм работы - DHCP]] | Механизм Работы - DHCP | stable | concept | [network, networking, protocols, dhcp] |
|
| [[Механизм работы - DHCP]] | Механизм Работы - DHCP | stable | concept | [network, networking, protocols, dhcp] |
|
||||||
| [[Настройка DHCP - Cisco]] | Настройка DHCP - Cisco | stable | concept | [network, networking, protocols, dhcp] |
|
| [[Настройка DHCP - Cisco]] | Настройка DHCP - Cisco | stable | concept | [network, networking, protocols, dhcp] |
|
||||||
@@ -608,8 +615,8 @@ total: 510
|
|||||||
|
|
||||||
| Заметка | Aliases | Status | Type | Tags |
|
| Заметка | Aliases | Status | Type | Tags |
|
||||||
|---------|---------|--------|------|------|
|
|---------|---------|--------|------|------|
|
||||||
| [[31, 32 - Налоги 1]] | 31, 32 - Налоги | seed | knowledge | [study, taxes] |
|
|
||||||
| [[31, 32 - Налоги]] | 31, 32 - Налоги | seed | knowledge | [study, taxes] |
|
| [[31, 32 - Налоги]] | 31, 32 - Налоги | seed | knowledge | [study, taxes] |
|
||||||
|
| [[31, 32 - Налоги 1]] | 31, 32 - Налоги | seed | knowledge | [study, taxes] |
|
||||||
| [[CIСD Конвейер для сборки и доставки продукта. Знакомство с GitlabCI и Jenkins]] | — | seed | concept | [] |
|
| [[CIСD Конвейер для сборки и доставки продукта. Знакомство с GitlabCI и Jenkins]] | — | seed | concept | [] |
|
||||||
| [[gemini-code-1780921978295]] | — | — | — | [] |
|
| [[gemini-code-1780921978295]] | — | — | — | [] |
|
||||||
| [[Git]] | Git | seed | concept | [] |
|
| [[Git]] | Git | seed | concept | [] |
|
||||||
@@ -634,9 +641,9 @@ total: 510
|
|||||||
| [[Вопросы по Вебу]] | — | processing | concept | [] |
|
| [[Вопросы по Вебу]] | — | processing | concept | [] |
|
||||||
| [[Знания Ruby]] | Знания Ruby | seed | concept | [] |
|
| [[Знания Ruby]] | Знания Ruby | seed | concept | [] |
|
||||||
| [[Идеи для статьи]] | Идеи Для Статьи | — | — | [] |
|
| [[Идеи для статьи]] | Идеи Для Статьи | — | — | [] |
|
||||||
|
| [[Идея]] | — | seed | concept | [] |
|
||||||
| [[Идея сети кохонена]] | Идея сети кохонена | seed | concept | [] |
|
| [[Идея сети кохонена]] | Идея сети кохонена | seed | concept | [] |
|
||||||
| [[Идея — упаковка для еды]] | — | seed | concept | [] |
|
| [[Идея — упаковка для еды]] | — | seed | concept | [] |
|
||||||
| [[Идея]] | — | seed | concept | [] |
|
|
||||||
| [[Инструкция по деплою finreport-analyzer]] | — | seed | concept | [] |
|
| [[Инструкция по деплою finreport-analyzer]] | — | seed | concept | [] |
|
||||||
| [[Итераторы для обработки массивов Ruby]] | Итераторы для обработки массивов Ruby | seed | concept | [] |
|
| [[Итераторы для обработки массивов Ruby]] | Итераторы для обработки массивов Ruby | seed | concept | [] |
|
||||||
| [[Команды для деплоя с помощью Capistrano]] | — | seed | concept | [] |
|
| [[Команды для деплоя с помощью Capistrano]] | — | seed | concept | [] |
|
||||||
|
|||||||
Reference in New Issue
Block a user