Redis權(quán)限管理體系(三): ACL 配置持久化
前面我們已經(jīng)了解了ACL用戶管理的用途及使用:
但因默認(rèn)配置中ACL的配置未持久化,因此Redis重啟后對(duì)應(yīng)的用戶(default用戶除外)將丟失,因此建議開(kāi)啟ACL配置的持久化。而ACL的持久化有兩種方式,以下分別演示。
一、配置前準(zhǔn)備工作
重啟Redis服務(wù)
127.0.0.1:6479> shutdown
not connected>
再次啟動(dòng)Redis并登錄,查看default用戶權(quán)限
127.0.0.1:6479> ACL LIST
1) "user default on #515c217eb413b6aaf09de74bf42c85a6edc09ee7008c6ebedc2981b44bbc0fd3 ~* &* +@all"
127.0.0.1:6479>
二、在服務(wù)層配置文件中配置ACL
1、關(guān)閉Redis服務(wù)
127.0.0.1:6479> shutdown
not connected>
2、在配置文件中添加default用戶的配置
登錄Redis查看
127.0.0.1:6479> ACL LIST
1) "user default on #515c217eb413b6aaf09de74bf42c85a6edc09ee7008c6ebedc2981b44bbc0fd3 ~* &* +@all"
3、添加新用戶
1) "user default on #515c217eb413b6aaf09de74bf42c85a6edc09ee7008c6ebedc2981b44bbc0fd3 ~* &* +@all"
127.0.0.1:6479> ACL SETUSER user1 on >pwd_test1 allkeys +@all
OK
127.0.0.1:6479> ACL LIST
1) "user default on #515c217eb413b6aaf09de74bf42c85a6edc09ee7008c6ebedc2981b44bbc0fd3 ~* &* +@all"
2) "user user1 on #d9e1f1341d0208467c6c88f61420284e15337d4a0be94b964d62d4b00a9e77d6 ~* &* +@all"
(error) ERR This Redis instance is not configured to use an ACL file. You may want to specify users via the ACL SETUSER command and then issue a CONFIG REWRITE (assuming you have a Redis configuration file set) in order to store users in the Redis configuration.
需要手動(dòng)將用戶信息添加在配置文件中。
也不能直接從Redis配置文件中加載配置。
127.0.0.1:6479> ACL LOAD
(error) ERR This Redis instance is not configured to use an ACL file. You may want to specify users via the ACL SETUSER command and then issue a CONFIG REWRITE (assuming you have a Redis configuration file set) in order to store users in the Redis configuration.
不過(guò)可以使用config rewrite保存到配置文件。
127.0.0.1:6479> ACL SETUSER user2 on >pwd_test1 allkeys +@all
OK
127.0.0.1:6479> CONFIG REWRITE
三、配置單獨(dú)的ACL文件
1、修改配置
為了方便管理,建議單獨(dú)使用ACL配置文件來(lái)管理用戶信息。另外,不可以同時(shí)使用服務(wù)端配置文件與單獨(dú)的配置文件共存的方式來(lái)配置,否則啟動(dòng)時(shí)會(huì)報(bào)錯(cuò)。
# Configuring Redis with users defined in redis.conf and at the same setting an ACL file path is invalid. This setup is very likely to lead to configuration errors and security holes, please define either an ACL file or declare users directly in your redis.conf, but not both.
因此,需要注釋掉原先的方式,只添加aclfile的配置。
并且在users.acl中將之前的用戶信息復(fù)制進(jìn)去。
再次啟動(dòng)Redis服務(wù)。
登錄后再次查看,相關(guān)用戶已存在。
127.0.0.1:6479> ACL LIST
1) "user default on sanitize-payload #515c217eb413b6aaf09de74bf42c85a6edc09ee7008c6ebedc2981b44bbc0fd3 ~* &* +@all"
2) "user user1 on #d9e1f1341d0208467c6c88f61420284e15337d4a0be94b964d62d4b00a9e77d6 ~* &* +@all"
3) "user user2 on #d9e1f1341d0208467c6c88f61420284e15337d4a0be94b964d62d4b00a9e77d6 ~* &* +@all"
127.0.0.1:6479>
2、創(chuàng)建新用戶
127.0.0.1:6479> ACL SETUSER u1 on >pwd_u1 allkeys +@write +@read
OK
127.0.0.1:6479> ACL LIST
1) "user default on sanitize-payload #515c217eb413b6aaf09de74bf42c85a6edc09ee7008c6ebedc2981b44bbc0fd3 ~* &* +@all"
2) "user u1 on #21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544 ~* &* -@all +@write +@read"
3) "user user1 on #d9e1f1341d0208467c6c88f61420284e15337d4a0be94b964d62d4b00a9e77d6 ~* &* +@all"
4) "user user2 on #d9e1f1341d0208467c6c88f61420284e15337d4a0be94b964d62d4b00a9e77d6 ~* &* +@all"
保存配置。
127.0.0.1:6479> ACL SAVE
OK
3、直接在配置文件中添加用戶
可以直接在用戶配置配件中添加用戶信息,再通過(guò)加載的方式加載用戶。
再次登錄Redis中通過(guò)ACL LOAD加載配置后查看。
127.0.0.1:6479> ACL LOAD
OK
127.0.0.1:6479> ACL LIST
1) "user default on sanitize-payload #515c217eb413b6aaf09de74bf42c85a6edc09ee7008c6ebedc2981b44bbc0fd3 ~* &* +@all"
2) "user u1 on #21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544 ~* &* -@all +@write +@read"
3) "user u2 on #21a1bbcd2c36cb07cd8779b3cba6ab183ecfd8b2a86e11f6dc1f674b90634544 ~* &* -@all +@write +@read"
4) "user user1 on #d9e1f1341d0208467c6c88f61420284e15337d4a0be94b964d62d4b00a9e77d6 ~* &* +@all"
5) "user user2 on #d9e1f1341d0208467c6c88f61420284e15337d4a0be94b964d62d4b00a9e77d6 ~* &* +@all"
這樣每次用戶操作后使用ACL SAVE保存操作,使用ACL LOAD加載配置即可。