зарегистрировать или ограничить исходного пользователя для входа в систему ssh

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

Таким образом, для журналов MySQL вам может потребоваться войти в базу данных / таблицы MYSQL.

Для версии 5.x и новее (5.1, 5.2, не могу запомнить) SQL поддерживает ведение журнала в базу данных / таблицы MySQL, а не в файлы, и по умолчанию поставляется с двумя уже созданными таблицами, mysql.general_log и mysql.slow_log .

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

Добавление в /etc/mysql/my.cnf :

[mysqld]
slow-query-log
general_log=1
log-output=TABLE

А затем перезапустите mysql.

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

mysqldump mysql general_log  --lock-tables=0 > general_log_errors.db
mysqldump mysql slow_log  --lock-tables=0 > slow_log_errors.db

(Вам нужно использовать lock-tables = 0, иначе вы получите сообщение об ошибке:

mysqldump: Got error: 1556: You can't use locks with log tables. when doing LOCK TABLES

)

А затем выполните следующие запросы, чтобы очистить таблицы.

TRUNCATE TABLE mysql.general_log;
TRUNCATE TABLE mysql.slow_log;

Это общая идея. Возможно, вы захотите вести журналы за последние несколько дней, и поэтому запросы MySQL TRUNCATE / DELETE будут более сложными.

Таблицы должны быть там по умолчанию, возможно, они были очищены в том образе докера.

Таким образом, для v5.7 вы можете создать их с помощью:

CREATE TABLE IF NOT EXISTS `general_log` (
  `event_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON    UPDATE CURRENT_TIMESTAMP(6),
  `user_host` mediumtext NOT NULL,
  `thread_id` bigint(21) unsigned NOT NULL,
  `server_id` int(10) unsigned NOT NULL,
  `command_type` varchar(64) NOT NULL,
  `argument` mediumblob NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log';

CREATE TABLE IF NOT EXISTS `slow_log` (
  `start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
  `user_host` mediumtext NOT NULL,
  `query_time` time(6) NOT NULL,
  `lock_time` time(6) NOT NULL,
  `rows_sent` int(11) NOT NULL,
  `rows_examined` int(11) NOT NULL,
  `db` varchar(512) NOT NULL,
  `last_insert_id` int(11) NOT NULL,
  `insert_id` int(11) NOT NULL,
  `server_id` int(10) unsigned NOT NULL,
  `sql_text` mediumblob NOT NULL,
  `thread_id` bigint(21) unsigned NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log';

Дополнительная литература: Запись журналов в таблицы

Что касается создания файла error_file: / var / log может даже не существовать в вашем докере файл. Если этих двух описанных выше параметров ведения журнала недостаточно, вы можете создать файл для тестирования в каталоге, принадлежащем пользователю MySQL; один из таких каталогов, где находится MySQL, обычно / var / lib / mysql.

1
17.11.2016, 09:56
1 ответ

Короткий ответ - нет, сервер примет любой действительный логин с точки зрения сервера.

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

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

Используя директиву AcceptEnv в /etc/ssh/sshd_config, вы можете принять, например, переменную с именем CLIENTUSER:

AcceptEnv CLIENTUSER

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

ForceCommand /bin/bash -l

Перезапустите службу sshd и добавьте следующее в /etc/profile

if [ -z "$CLIENTUSER" ] || [ "$CLIENTUSER" != "user3" ] && [ ! -z "$SSH_CLIENT" ]
then
       echo 'Client logon not allowed'
       logout
fi

Вышеуказанное выгоните из системы каждого клиента, который не отправит переменную CLIENTUSER или не отправит переменную CLIENTUSER с другим значением, чем user3.

Вы можете проверить это с помощью следующей клиентской командной строки:

$ ssh user2@host
Client logon not allowed

$ CLIENTUSER=user3 ssh -o "SendEnv CLIENTUSER" user2@host
user2@host $

Как видите, CLIENTUSER можно легко подделать из командной строки. Чтобы предотвратить это, вы можете добавить следующее в client '/etc/profile:

declare -r CLIENTUSER="$USER"

Когда пользователь попытается изменить значение переменной CLIENTUSER, он получит следующую ошибку:

bash: CLIENTUSER: readonly variable
1
27.01.2020, 23:46

Теги

Похожие вопросы