Redis всегда был далеко впереди в индустрии систем хранения данных, но до версии Redis6 не было комплексной системы контроля разрешений. Поскольку версия Redis6 используется все большим количеством людей, система контроля разрешений постепенно стала широко использоваться. В этой статье будет рассмотрено основное содержимое Redis ACL.
1. Управление пользователями
Основные операции, такие как создание, просмотр, изменение и удаление пользователей Redis, можно выполнить согласно следующим примерам.
1.1 Создать пользователя
只Создать пользователь, другие Разрешения пока добавлены не будут
127.0.0.1:6479> ACL SETUSER user1 on >pwd_u1
OK
Кроме того, в приведенном выше примере установлен текстовый пароль, но также можно установить зашифрованный хеш-пароль, например:
#Сначала получаем хеш-значение пароля
[redis@VM-4-14-centos ~]$ echo -n "pwd_u1" | shasum -a 256
21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544 -
#Создаем пароль в зашифрованном тексте
127.0.0.1:6479> ACL SETUSER u2 on #21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544
OK
1.2 Просмотр пользователей
При просмотре пользователей в Redis вы можете увидеть соответствующую информацию о пользователе и разрешения. Вы также можете просмотреть всю информацию о пользователе, указанную информацию о пользователе и информацию о том, кто в данный момент вошёл в систему. Конкретные примеры заключаются в следующем:
Список всех пользователей:
127.0.0.1:6479> ACL LIST
1) "user default on #515c217eb413b6aaf09de74bf42c85a6edc09ee7008c6ebedc2981b44bbc0fd3 ~* &* +@all"
2) "user testuser1 on #b6d18faf7ebcfdce9f8782a0aad13c14e2662fcc08072e2738bcb27d04b96188 &* -@all"
3) "user user1 on #21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544 &* -@all"
127.0.0.1:6479>
Просмотр указанного пользователя:
Чтобы просмотреть отдельного пользователя, вы можете использовать «имя пользователя ACL GETUSER», например:
127.0.0.1:6479> ACL GETUSER user1
1) "flags"
2) 1) "on"
2) "allchannels"
3) "passwords"
4) 1) "21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544"
5) "commands"
6) "-@all"
7) "keys"
8) (empty array)
9) "channels"
10) 1) "*"
Просмотрите текущего вошедшего в систему пользователя:
127.0.0.1:6479> ACL WHOAMI
"default"
1.3 Создайте несколько паролей
Пользователь в Redis может иметь несколько паролей, что отличается от других баз данных. Примеры следующие:
127.0.0.1:6479> ACL SETUSER u3 on >pwd_u3
OK
127.0.0.1:6479> ACL SETUSER u3 on >pwd_u33
OK
127.0.0.1:6479> ACL GETUSER u3
1) "flags"
2) 1) "on"
2) "allchannels"
3) "passwords"
4) 1) "8064ac564c2512d07af567e7de8714bc194abe6afefef26370f44e33593d6179"
2) "d190fe553fa81919050af3f9c482bb70ea19619e64e5c26c9b95e3f61de557c1"
5) "commands"
6) "-@all"
7) "keys"
8) (empty array)
9) "channels"
10) 1) "*"
Попробуйте войти в систему с двумя разными паролями:
# Использовать первый пароль Авторизоваться
127.0.0.1:6479> AUTH u3 pwd_u3
OK
# Использовать второй пароль Авторизоваться
127.0.0.1:6479> AUTH u3 pwd_u33
OK
# Использование неправильного пароля
127.0.0.1:6479> AUTH u3 pwd_u4444
(error) WRONGPASS invalid username-password pair or user is disabled.
127.0.0.1:6479>
видимый,2 правильных пароля в порядке Авторизоваться,Преимущество этого в том, что если вы забудете свой предыдущий пароль,Вы можете добавить новый пароль в,Это не влияет на использование исходного пароля.
1.4 Удаление пользователей
Если вам нужно удалить указанного пользователя, вы можете использовать команду ACL DELUSER, например
127.0.0.1:6479> ACL LIST
1) "user default on #515c217eb413b6aaf09de74bf42c85a6edc09ee7008c6ebedc2981b44bbc0fd3 ~* &* +@all"
2) "user testuser1 on #b6d18faf7ebcfdce9f8782a0aad13c14e2662fcc08072e2738bcb27d04b96188 &* -@all"
3) "user u2 on #21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544 #47843fd456370690f6c7897a73c1e2f0d563981aa3cad13e475bc3e72ca14656 &* -@all"
4) "user u3 on #8064ac564c2512d07af567e7de8714bc194abe6afefef26370f44e33593d6179 #d190fe553fa81919050af3f9c482bb70ea19619e64e5c26c9b95e3f61de557c1 &* -@all"
5) "user user1 on #21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544 &* -@all"
127.0.0.1:6479> ACL DELUSER user1
(integer) 1
127.0.0.1:6479> ACL LIST
1) "user default on #515c217eb413b6aaf09de74bf42c85a6edc09ee7008c6ebedc2981b44bbc0fd3 ~* &* +@all"
2) "user testuser1 on #b6d18faf7ebcfdce9f8782a0aad13c14e2662fcc08072e2738bcb27d04b96188 &* -@all"
3) "user u2 on #21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544 #47843fd456370690f6c7897a73c1e2f0d563981aa3cad13e475bc3e72ca14656 &* -@all"
4) "user u3 on #8064ac564c2512d07af567e7de8714bc194abe6afefef26370f44e33593d6179 #d190fe553fa81919050af3f9c482bb70ea19619e64e5c26c9b95e3f61de557c1 &* -@all"
127.0.0.1:6479>
1.5 сбросить пользователя
Пользователей можно сбросить, а сброшенные пользователи не могут войти в систему, например
127.0.0.1:6479> ACL SETUSER testuser1 reset
OK
127.0.0.1:6479> ACL GETUSER testuser1
1) "flags"
2) 1) "off"
2) "allchannels"
3) "sanitize-payload"
3) "passwords"
4) (empty array)
5) "commands"
6) "-@all"
7) "keys"
8) (empty array)
9) "channels"
10) 1) "*"
127.0.0.1:6479>
2. Контроль разрешений
Добавляя разрешения через ACL, вы можете добавлять разрешения на операции чтения и записи по мере необходимости или добавлять разрешения на основе соответствующих правил (таких как указанные типы ключей, указанные начальные ключи и т. д.).
2.1 Просмотр разрешений
Разрешения на операции в ACL можно просмотреть с помощью команды ACL CAT.
127.0.0.1:6479> ACL CAT
1) "keyspace"
2) "read"
3) "write"
4) "set"
5) "sortedset"
6) "list"
7) "hash"
8) "string"
9) "bitmap"
10) "hyperloglog"
11) "geo"
12) "stream"
13) "pubsub"
14) "admin"
15) "fast"
16) "slow"
17) "blocking"
18) "dangerous"
19) "connection"
20) "transaction"
21) "scripting"
Вы можете продолжить просмотр конкретного контента каждого типа, например просмотреть конкретное содержимое опасных операций:
127.0.0.1:6479> ACL CAT dangerous
1) "debug"
2) "config"
3) "restore"
4) "swapdb"
5) "failover"
6) "slaveof"
7) "client"
8) "migrate"
9) "latency"
10) "sync"
11) "psync"
12) "lastsave"
13) "acl"
14) "role"
15) "flushdb"
16) "replconf"
17) "info"
18) "keys"
19) "bgsave"
20) "replicaof"
21) "sort"
22) "cluster"
23) "save"
24) "restore-asking"
25) "module"
26) "monitor"
27) "bgrewriteaof"
28) "pfselftest"
29) "pfdebug"
30) "slowlog"
31) "shutdown"
32) "flushall"
127.0.0.1:6479>
2.2 Добавить разрешения До Создать пользователяu2,только Авторизоваться Разрешения,Теперь к этому Добавить разрешения。
127.0.0.1:6479> ACL SETUSER u2 allkeys +@read +@write
OK
Вышеупомянутое относится ко всем клавишам (allkeys, ~*
Синонимы к слову)Добавить чтение и запись Разрешения。добавлять Разрешения Просто используйте+@переписываться Разрешения。
Проверьте результаты ниже:
127.0.0.1:6479> AUTH u2 pwd_u2
OK
127.0.0.1:6479> set k1 1
OK
127.0.0.1:6479> get k1
"1"
127.0.0.1:6479> info
NOPERM this user has no permissions to run the 'info' command or its subcommand
2.3 Восстановить разрешения Тогда утилизируйте пользователей u2 и напишите Разрешения, Восстановить разрешенияиспользовать-@Разрешения Вот и все ACL SETUSER u2 allkeys -@write
После переработки войдите в систему как пользователь u2, и вы обнаружите, что можете просматривать, но не можете писать.
2.4 Выполнять управление разрешениями для указанных типов ключей.
Создайте пользователя u1, а затем добавьте ему разрешения на операции для ключей строкового и хэш-типа.
127.0.0.1:6479> ACL SETUSER u1 on >pwd_u1
OK
127.0.0.1:6479> ACL GETUSER u1
1) "flags"
2) 1) "on"
2) "allchannels"
3) "passwords"
4) 1) "21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544"
5) "commands"
6) "-@all"
7) "keys"
8) (empty array)
9) "channels"
10) 1) "*"
127.0.0.1:6479> ACL SETUSER u1 allkeys +@string +@hash
OK
127.0.0.1:6479> ACL GETUSER u1
1) "flags"
2) 1) "on"
2) "allkeys"
3) "allchannels"
3) "passwords"
4) 1) "21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544"
5) "commands"
6) "-@all +@string +@hash"
7) "keys"
8) 1) "*"
9) "channels"
10) 1) "*"
127.0.0.1:6479>
Проверьте разрешения
127.0.0.1:6479> ACL GETUSER u1
1) "flags"
2) 1) "on"
2) "allkeys"
3) "allchannels"
3) "passwords"
4) 1) "21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544"
5) "commands"
6) "-@all +@string +@hash"
7) "keys"
8) 1) "*"
9) "channels"
10) 1) "*"
127.0.0.1:6479> AUTH u1 pwd_u1
OK
127.0.0.1:6479> set s1 1
OK
127.0.0.1:6479> get s1
"1"
127.0.0.1:6479> hset h1 f1 'a'
(integer) 1
127.0.0.1:6479> hgetall h1
1) "f1"
2) "a"
127.0.0.1:6479> info
NOPERM this user has no permissions to run the 'info' command or its subcommand
127.0.0.1:6479> SMEMBERS set1
(error) NOPERM this user has no permissions to run the 'smembers' command or its subcommand
2.5 Авторизовать указанный ключ
Добавьте к ключу все разрешения на операции, начиная с указанного, например
127.0.0.1:6479> ACL GETUSER u3
1) "flags"
2) 1) "on"
2) "allchannels"
3) "passwords"
4) 1) "8064ac564c2512d07af567e7de8714bc194abe6afefef26370f44e33593d6179"
5) "commands"
6) "-@all"
7) "keys"
8) (empty array)
9) "channels"
10) 1) "*"
127.0.0.1:6479> ACL SETUSER u3 ~a* +@all
OK
127.0.0.1:6479> ACL GETUSER u3
1) "flags"
2) 1) "on"
2) "allchannels"
3) "allcommands"
3) "passwords"
4) 1) "8064ac564c2512d07af567e7de8714bc194abe6afefef26370f44e33593d6179"
5) "commands"
6) "+@all"
7) "keys"
8) 1) "a*"
9) "channels"
10) 1) "*"
127.0.0.1:6479>
Результаты проверки:
127.0.0.1:6479> set s2 222
(error) NOPERM this user has no permissions to access one of the keys used as arguments
127.0.0.1:6479> set a2 222
OK
127.0.0.1:6479> hset set2 f2 222
(error) NOPERM this user has no permissions to access one of the keys used as arguments
127.0.0.1:6479> hset aset2 f2 222
(integer) 1
127.0.0.1:6479> 5
3. Заключение
Создать пользователя и настроить соответствующие Разрешения.,Может использоваться для изоляции пользовательских операций.,Избегайте рискованных операций и т. д.,Тем самым снижается вероятность неправильного использования Redis или его эксплуатации с риском.,Повышение безопасности и стабильности. Вы также можете протестировать несколько комбинаций,Настройте подходящую вам комбинацию Разрешения.