- vừa được xem lúc

Phần 4: Access List Redis (tính năng mới ở bản 6)

0 0 12

Người đăng: Dương Anh Tuấn

Theo Viblo Asia

Seri Redis của chúng ta gồm những phần sau:

Phần 1: Cài đặt redis cơ bản + Turning redis.
Phần 2: Lệnh quản trị redis cơ bản
Phần 3: Bảo mật cho redis. (redis security)
Phần 4: Access List Redis (tính năng mới ở bản 6)
Phần 5: Các mô hình Redis replication
Phần 6: Cài đặt Redis Master-Salve
Phần 7: Cài đặt Redis Setinel
Phần 8: Cài đặt Redis Cluster
Phần 9: Di chuyển data từ redis đơn sang cluster.
Phần 10: Data type trong Redis, một vài ví dụ sử dụng (String/hash/sort/list/queue/pub-sub....).
Phần 11: Một số lỗi thường gặp khi quản trị hệ thống Redis.
Phần 12: Continue...

Phần 4: Access List Redis (ACL tính năng mới ở bản 6 + 7)

ACL trong Redis giống với gán Role quyền trong Database vậy. Đôi khi 1 client kết nối mà chọc được toàn bộ dữ liệu redis vẫn là quá rủi ro về bảo mật (nhẹ thì bị xóa trắng, mà nặng thì public data ngoài internet). Để enable ACL, nếu hệ thống mới ta sẽ extend quyền dần, nhưng hệ thống cũ đã chạy - bạn cần nắm rõ code đang chạy loại dữ liệu gì để giới hạn quyền thật chuẩn, tránh việc làm lỗi hệ thống. (sử dụng lệnh MONITOR đến giám sát code đang gọi redis như nào và nên trao đổi với DEV Team).

Mặc định redis luôn có user là default và không có mật khẩu:

127.0.0.1:6379> ACL LIST
1) "user default on nopass ~* &* _@.com"

Để đặt password cho user default này ta làm như sau:

127.0.0.1:6379> ACL SETUSER default on >matkhau
OK
127.0.0.1:6379> ACL LIST
1) "user default on #6445e373d7fcde106bfcb897ee8f0bb28589bd7797f54f1ef4e5d5447cfbd011 ~* &* _@.com"
127.0.0.1:6379> CONFIG REWRITE
OK

Để đăng nhập lại vào redis-cli ta cần gõ thêm mật khẩu và user để vào đc:

[_@.com conf]# redis-cli --user default --pass matkhau
hoặc
[_@.com conf]# redis-cli 127.0.0.1:6379> AUTH default matkhau
OK

Cấu trúc cơ bản của 1 lệnh ACL redis bao gồm

ACL SETUSER <username> on ... acl rules ...
ACL SETUSER <username> on >password +<quyền> ~<key> &<channel>
--------------------
Quyền sẽ được load từ trái sang phải, chi tiết như sau:
1) on / off : khóa user
2) >matkhau :đặt mật khẩu cho user. (Ví dụ >5ppW3IDwzKcS)
3) +/- : Command redis được phép chạy, ví dụ +get, +set, +info, hoặc _@.com<nhóm quyền>.
4) ~ : phạm vi key được áp dụng (để mở toàn bộ bằng ~* , )
5) & : Liên quan đến pub/sub channel của redis (để mở toàn bộ &*).
>

Step1, ta sẽ kiểm tra redis đang có user mặc định nào, và có những quyền gì bằng lệnh ACL LIST

[_@.com conf]# redis-cli 127.0.0.1:6379> ACL LIST
1) "user default on nopass ~* &* _@.com"
Giải thích: User default, trạng thái enable ON, không cần pass đăng nhập nopass, full quyền với các key ~*, full quyền với channel &*, full câu lệnh được sử dụng _@.com

Step 2: Ta cần biết redis có những nhóm quyền nào _@.com<nhóm quyền> , để dễ gán nhóm quyền cho user. Ta dùng lệnh ACL CAT

127.0.0.1:6379> ACL CAT 1) "keyspace"
...
...
...
...
4) "set"
18) "dangerous"

Bài Toán 1:

Tôi muốn phân quyền cho developer1 đăng nhập cần password là matkhau1. Áp dụng các quyền trên cho toàn bộ data type redis và channel: quyền sử dụng toàn bộ lệnh của redis, bỏ những quyền hệ thống admin, quyền sử dụng câu lệnh nguy hiểm.

1) Để xem nhóm quyền admin, dangerous có những lệnh nào
127.0.0.1:6379> ACL CAT admin
127.0.0.1:6379> ACL CAT dangerous 2) Xử lý bài toán
127.0.0.1:6379> ACL SETUSER developer1 on >matkhau1 ~* &* _@.com _@.com _@.com _@.com
127.0.0.1:6379> CONFIG REWRITE

Bài Toán 2:

Redis của tôi chỉ có 2 loại dữ liệu là String và Hash (bao gồm GET/HGET/HGETALL). Tôi muốn bạn developer2 mới vào , đăng nhập bằng matkhau2, chỉ đọc được dữ liệu string và hash. Ngoài ra không được chạy lệnh nào khác.

1) Đặt quyền
127.0.0.1:6379> ACL SETUSER developer2 on >matkhau2 ~* &* _@.com +get +hget +hgetall
127.0.0.1:6379> CONFIG REWRITE 2 )Thử đăng nhập vào user developer2. Có quyền get nhưng ko cho set.
127.0.0.1:6379> AUTH developer2 matkhau2
127.0.0.1:6379> get tuanda
"111"
127.0.0.1:6379> set tuanda newvalue
(error) NOPERM this user has no permissions to run the 'set' command or its subcommand 3) kiểm tra với Hash:
127.0.0.1:6379> hgetall user:tuanda
1) "id"
2) "100"

Bài Toán 3:

Tôi muốn developer3 đăng nhập bằng matkhau3 (accout này sẽ cho code chạy). Phạm vi quyền là set/get theo các key "user:XXXXXXXXXXXXX", không có quyền can thiệp vào các key value khác.

127.0.0.1:6379> ACL SETUSER developer3 on >matkhau3 ~user:* _@.com +get +set 127.0.0.1:6379> CONFIG REWRITE
127.0.0.1:6379> AUTH developer3 matkhau3
127.0.0.1:6379> get user:tuanda
"9999"
127.0.0.1:6379> get category:tuanda
(error) NOPERM this user has no permissions to access one of the keys used as arguments
127.0.0.1:6379> get test
(error) NOPERM this user has no permissions to access one of the keys used as arguments
127.0.0.1:6379> set user:newuser2 8888
OK

Chú ý cách đặt thứ tự quyền:

Lệnh 1_ 127.0.0.1:6379> ACL SETUSER developer4 on >matkhau4 ~* -set _@.com Lệnh 2_127.0.0.1:6379> ACL SETUSER developer4 on >matkhau4 ~* _@.com -set hai lệnh này sẽ khác nhau. Vì redis load ACL từ trái qua phải:

  • Với lệnh 1 khi -set xong ta lại +all thế hóa ra cuối cùng là Full quyền bao gồm cả set.
  • Với lệnh 2 ta đã cho all quyền, nhưng lại -set > nên cuối cùng không có quyền SET.

Chi tiết thêm về nhiều ví dụ về ACL, mời các bạn đọc

https://redis.io/topics/acl

https://redis.io/commands#server

Bình luận

Bài viết tương tự

- vừa được xem lúc

Caching đại pháp 2: Cache thế nào cho hợp lý?

Caching rất dễ. Mình không nói đùa đâu, caching rất là dễ. Ai cũng có thể làm được chỉ sau 10 phút đọc tutorial. Nó cũng giống như việc đứa trẻ lên 3 đã có thể cầm bút để vẽ vậy.

0 0 114

- vừa được xem lúc

Caching đại pháp 1: Nấc thang lên level của developer

Bí quyết thành công trong việc đáp ứng hệ thống triệu user của những công ty lớn (và cả công ty nhỏ). Tại sao caching lại là kỹ thuật tối quan trọng để phù phép ứng dụng rùa bò của chúng ta thành siêu phẩm vạn người mê.

0 0 67

- vừa được xem lúc

Cache dữ liệu Nodejs với Redis

Một tí gọi là lý thuyết để anh em tham khảo. Cache là gì. Lợi ích của việc cache data. .

0 0 97

- vừa được xem lúc

Nguyên tắc hoạt động của redis server

Sự ra đời của Redis. . Câu chuyện bắt đầu khi tác giả của Redis, Salvatore Sanfilippo. (nickname: antirez), cố gắng làm những công việc gần như là không.

0 0 81

- vừa được xem lúc

Viết ứng dụng chat realtime với Laravel, VueJS, Redis và Socket.IO, Laravel Echo

Xin chào tất cả các bạn, đây là một trong những bài post đầu tiên của mình. Sau bao năm toàn đi đọc các blog tích luỹ được chút kiến thức của các cao nhân trên mạng.

0 0 905

- vừa được xem lúc

Tìm hiểu tổng quan về Redis

1. Lời mở đầu.

0 0 352