Thứ Năm, 29 tháng 6, 2017

Phần 1/2: PrivacyIDEA giải pháp xác thực 2 bước, chứng thực-quản lý tập trung. (update 20190712)

PrivacyIDEA giải pháp xác thực 2 bước, chứng thực-quản lý tập trung.
Giới thiệu:
- Bạn đã bao giờ thấy Google/Microsoft/Skype gửi cho bạn 1 đoạn mã qua SMS/Email để đăng nhập chưa? . 
- Bạn đã dùng thiết bị tạo key OTP của 1 số ngân hàng để thanh toán giao dịch chưa? (vd: techcombank)- Bạn đã dùng mã OTP để đăng nhập wifi, đăng nhập web, login linux/window với pass bằng otp...
- Bạn đã dùng ssh-key để login vào server bao giờ chưa?. Quản lý ssh-key tập trung, muốn gán vào server tùy ý.
- Bạn đã dùng thiết bị OTP (One Time Password - Mật khẩu thay đổi theo thời gian) bao giờ chưa?

PrivacyIDEA có rất nhiều plugin hỗ trợ đăng nhập ứng dụng: từ PAM, Radius, ssh OTP, basic-authen OTP cho đến REST API để viết code gọi vào. Ta sẽ đi lần lượt các phần sau:

Ở Bài viết này. Chúng ta sẽ đi xây dựng hệ thống server xác thực 2 bước và các ứng dụng của nó.

Đứng về mặt system-admin. Ta sẽ có sơ đồ sau
PrivacyIDEA đang hỗ trợ những cách thức đăng nhập sau:



Phần 1 : Cài đặt PrivacyIDEA server

(Nguồn: https://privacyidea.readthedocs.io/en/latest/)
1.Cài đặt trên Ubuntu 16.04
add-apt-repository ppa:privacyidea/privacyidea
apt-get update
apt-get install python-privacyidea privacyideaadm
  • Cài đặt gói giao diện cho PrivacyIDEA
apt-get install privacyidea-apache2
Trong gói cài đặt privacyidea-apache2, sẽ bao gồm cả mysql. Vì vậy bạn cần nhập mật khẩu mysql trong lúc cài đặt.
-- Tạo tài khoản admin đăng nhập web PrivacyIDEA
pi-manage admin add admin -e admin@localhost

Truy cập vào địa chỉ https://<your_privacyidea_ip> đăng nhập với pass là admin/<password> như đã tạo ở bước trên.

Lần đầu tiên đăng nhập, bạn sẽ được hỏi tự động tạo Default Realm. Nếu chưa sử dụng bao giờ, bạn nên chọn Create Realm.

Như vậy, bạn đã hoàn tất việc cài đặt PrivacyIDEA server. Việc ứng dụng PrivacyIDEA 2factor sẽ được hướng dẫn ở các phần tiếp theo.

Phần 2: Login ubuntu sử dụng OTP token key.

(Nguồn: https://www.privacyidea.org/ssh-keys-and-otp-really-strong-two-factor-authentication/)
Mô tả: Ta có thể sử dụng mật khẩu thay đổi theo thời gian để đăng nhập vào pc/server. Như vậy việc bỏ đi mật khẩu cố định sẽ rất an toàn cho hệ thống cũng như máy cá nhân.

Bước 1: Cài Đặt
add-apt-repository ppa:privacyidea/privacyidea
apt-get update
apt-get install privacyidea-pam
Kiểm tra UsePAM đã được enable chưa
#vim /etc/ssh/sshd_config 
UsePAM yes
Đổi config của PAM
# vim /etc/pam.d/sshdĐổi: 
@include common-auth
Thành:
@include common-auth-pi
Thay đổi config:
# vim /etc/pam.d/common-auth-pi 
auth    [success=2 default=ignore]      pam_unix.so nullok_secure
auth    [success=1 default=ignore]      pam_python.so /lib/security/privacyidea_pam.py url=https://ĐỊA_CHỈ_PRIVACYIDEA_SERVER  auth  nosslverify debug
auth    requisite             pam_deny.so
auth    required              pam_permit.so
auth    optional              pam_cap.so
Chú ý đổi địa chỉ về privacy-server của bạn. Khi bạn nhập mật khẩu token key, PAM sẽ dùng python để lấy mật khẩu được đồng bộ ở trên server privacy về.
/etc/init.d/ssh restart
Bước 2:
Tạo token key trên server. Vào mục User chọn user nào được chỉ định

Chọn Enroll New Token

Ta chọn TOTP

Cài đặt phần mềm trên điện thoại: Google authenticator



Như vậy là trên màn hình điện thoại, ta đã có password cho user FRAMGIA thay đổi theo thời gian. Khi đăng nhập, ta có thể dung pass này .
(Note:
- Nếu bạn muốn bảo mật thêm cho OTP, như chèn 1 đoạn pass TEXT{otp} thì ta chỉ việc điền text vào dòng PIN khi Enroll new Token
- Trường hợp đăng nhập bằng OTP không được, bạn hãy theo dõi log /var/log/auth.log . Và nhớ kiểm tra giờ Server đúng với giờ điện thoại nhé (nên dùng ntp-time để đồng bộ).
Đây là log auth.log cho user danhtuan trên privacyidea (update 20190712).


Có một thắc mắc hỏi? tại sao ko dùng google authenticator có sẵn trên ppa của ubuntu, mà phải mất công đi cài privacyIDEA. Đó là vì PrivacyIDEA hỗ trợ quản lý user tập trung, dùng 1 mã OTP cho tất cả server đều được. Khi cần ta có thể cấp mã cho user. Khi loại bỏ quyền thì rất dễ dàng có thể xóa đoạn authen ngay trên giao diện web quản lý…..

Phần 3: Quản lý tập trung ssh-key bằng privacyIDEA.

Mời bạn theo dõi tiếp bài sau của tôi.
FRAMGIA : https://viblo.asia skype: tuanduong122 , Blogspot:  tuanduong122
Do kiến thức của người viết có hạn. Nếu bài viết thấy có lỗi hoặc sai sót. Mong các bạn comment/contact giúp bài viết hoàn thiện hơn. Xin cảm ơn

Phần 3: Quản lý tập trung ssh-key bằng privacyIDEA.

Phần 3: Quản lý tập trung ssh-key bằng privacyIDEA.
Mô tả: Khi 1 user yêu cầu admin cho phép ssh vào server A. Admin sẽ gán sshkey trên PrivacyIDEA thay bằng việc gán key vào thư mục .ssh . việc quản lý rất dễ dàng. Ko cần phải login vào từng server để cài đặt. Admin thông qua PrivacyIDEA sẽ quản lý được toàn bộ ssh vào các server.
Trên máy client:
add-apt-repository ppa:privacyidea/privacyidea
apt-get update
apt-get install privacyideaadm
Tạo file config mới cho privacyidea-sshkey.
#vim  /etc/privacyidea/authorizedkeyscommand
[Default]
url=https://your-ip-server-privacyIDEA
admin=admin
password=********password-server-privacyIDEA
nosslcheck=False
Note: Các bạn thấy ở đây ta dùng user là [ admin/**** ] Chính là user đăng nhập website privacyIDEA server. Như vậy sẽ không bảo mật chút nào. Mời các bạn theo dõi Phần 6, set policy cho từng user. Ta sẽ tạo user admin riêng, và user get key ssh riêng.
Ta test thử get key public trên client:
privacyidea-authorizedkeys root 

sẽ báo lỗi. Đó là do ta chưa add key và define machine.
Bước 1: Tạo ssh key cho user bất kỳ (ở đây tôi test trên user root)
Ta tạo 1 public/private key bất kì. Rồi gán cho user root. (dùng lệnh ssh-keygen -t rsa , để cẩn thận, ta ko chạy lệnh này trên client, có thể là 1 máy bất kì nào đó)
Tạo **Enroll New Token **

Bước 2:Tạo Machine resolvers:


Bước 3: Define hosts cho SSH-KEY vừa gán ở Bước 1.
Chọn token-ssh key
Tìm đến phía cuối và chỉnh sửa (define host)


Save lại rồi test thử lại bước cũ
privacyidea-authorizedkeys root 

OK. Đã get được key từ client. Giờ ta sẽ chèn key này vào ssh config.
Bước 5: Chèn privacy vào ssh, để ssh get key từ PrivacyIDEA
#vim /etc/ssh/sshd_config
AuthorizedKeysCommand /usr/bin/privacyidea-authorizedkeys
# You also should run the command with lower privileges.
# The low_priv_user needs to have read access to /etc/privacyidea/authorizedkeyscommand.
AuthorizedKeysCommandUser root
Restart ssh.
Như vây ta có thể login vào 1 server bất kì nào đã được thiết lập. Việc quản lý tập trung này rất dễ dàng với công ty nhiều người sử dụng. Có thể cho phép hoặc bỏ quyền bất cứ lúc nào thông qua giao diện PrivacyIDEA
Ngoài ra ta có thể thiết lập đăng nhập 2 bước. Khi login ngoài việc chèn sshkey, ta vẫn phải nhập mật khẩu lần thứ 2 nữa mới có thể đăng nhập đc vào server.

Phần 8: HA cho PrivacyIDEA

Phần 8: HA cho PrivacyIDEA
Tác giả có đưa ra 2 phương pháp để chạy HA cho PrivacyIDEA:
A: 2 server privacyidea dung chung 1 DB



B: 2.Hai privacyIDEA chạy độc lập, nhưng DB chạy Master-Master

Với phương án A, ta chỉ cần trỏ config /etc/privacyidea/pi.cfg vào cùng 1 Db
Phương án B, các bạn cài mysql chạy master-master theo hướng dẫn sau
https://www.digitalocean.com/community/tutorials/how-to-set-up-mysql-master-master-replication
Đây là option my.cnf của tôi
server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
replicate-do-db=pi
replicate-do-table=pi.admin
replicate-do-table=pi.alembic_version
replicate-do-table=pi.caconnector
replicate-do-table=pi.caconnectorconfig
replicate-do-table=pi.challenge
replicate-do-table=pi.clientapplication
replicate-do-table=pi.config
replicate-do-table=pi.dummy
replicate-do-table=pi.eventhandler
replicate-do-table=pi.eventhandlercondition
replicate-do-table=pi.eventhandleroption
replicate-do-table=pi.machineresolver
replicate-do-table=pi.machineresolverconfig
replicate-do-table=pi.machinetoken
replicate-do-table=pi.machinetokenoptions
replicate-do-table=pi.passwordreset
replicate-do-table=pi.policy
replicate-do-table=pi.radiusserver
replicate-do-table=pi.realm
replicate-do-table=pi.resolver
replicate-do-table=pi.resolverconfig
replicate-do-table=pi.resolverrealm
replicate-do-table=pi.smsgateway
replicate-do-table=pi.smsgatewayoption
replicate-do-table=pi.smtpserver
replicate-do-table=pi.subscription
replicate-do-table=pi.token
replicate-do-table=pi.tokeninfo
replicate-do-table=pi.tokenrealm




replicate-ignore-table=pi.pidea_audit
Phần 9: SSO sử dụng Privacyidea
Tôi đã cấu hình xong SimpleSAMLphp nhưng do ko có tài khoản G Suite. Nên phần này đành phải bỏ ngỏ
FRAMGIA : https://viblo.asia skype: tuanduong122
Do kiến thức của người viết có hạn. Nếu bài viết thấy có lỗi hoặc sai sót. Mong các bạn comment/contact giúp bài viết hoàn thiện hơn. Xin cảm ơn

Phần 7: Quản lý user client trong PrivacyIDEA (sqlrealm/dbrealm/ldap/Activedirectory)

Phần 7: Quản lý user client trong PrivacyIDEA (sqlrealm/dbrealm/ldap/Activedirectory)
Mô tả: Privacy hỗ trợ load user từ:
  • file : /etc/passwd
  • fiile: sqlite3
  • database: mysql, maria, wordpress, otrs, dupal .....
  • LDAP
  • Active Directory
  • Scrim

Trong phần viết này. Tôi sẽ hướng dẫn các bạn sử dụng dbfile, dbmysql, ldap, active directory AD.
Hiện tại, bản 2.19 khi cài từ ppa ubuntu, sẽ có python-flask-sqlalchemy from v1.0.3 hiện đang bị lỗi
Session' object has no attribute 'modelchanges. Các bạn cần cập nhập lên bản python-flask-sqlalchemy 2.0-1xenial1 hoặc cao hơn https://community.privacyidea.org/t/can-not-add-user-in-sql-resolver/410/10
Cách cập nhập:
wget https://launchpad.net/~privacyidea/+archive/ubuntu/privacyidea-dev/+files/python-flask-sqlalchemy_2.0-1xenial1_all.deb
dpkg -i python-flask-sqlalchemy_2.0-1xenial1_all.deb
/etc/init.d/apache2 restart

7.1 Sử dụng db SQLite file để lưu user

Ta tạo scripts như sau:
vim /opt/create_userfile.sh
#!/bin/bash
DATABASE=/etc/privacyidea/users.sqlite
echo "create table users (id INTEGER PRIMARY KEY ,\
    username TEXT UNIQUE,\
    surname TEXT, \
    givenname TEXT, \
    email TEXT, \
    password TEXT, \
    description TEXT, \
    mobile TEXT, \
    phone TEXT);" | sqlite3 $DATABASE

cat <<END > /etc/privacyidea/usersdb.install
{'Server': '/',
 'Driver': 'sqlite',
 'Database': '/etc/privacyidea/users.sqlite',
 'Table': 'users',
 'Limit': '500',
 'Editable': '1',
 'Map': '{"userid": "id", "username": "username", "email":"email", "password": "password", "phone":"phone", "mobile":"mobile", "surname":"name", "givenname":"givenname", "description": "description"}'
}
END
chown privacyidea $DATABASE
chạy scripts để tạo ra db file sử dụng sqlite3
 bash -x /opt/create_userfile.sh
Tạo user và realm bằng câu lệnh. Sẽ có cảnh bảo WARNING, ta có thể bỏ qua.
pi-manage resolver create localusers sqlresolver /etc/privacyidea/usersdb.install
pi-manage realm create localsql localusers
Add user:

Kiểm tra:

7.2 Sử dụng db MySQL để lưu user

Chức năng giống y hệt phần 7.1, nhưng lưu user trong mysql
pi-manage resolver create_internal myfirstresolver
pi-manage realm create myrealm myfirstresolver
Như vậy ta có thể create/edit/delete user dễ dàng. PrivacyIDEA sẽ tự động insert vào DB "pi.users_myfirstresolver " trường thong tin của user
Add user giống y hệt phần 7.1
Kết quả:

7.3 Load user từ LDAP

Ở đây tôi dựng 1 server LDAP và thử cho PrivacyIDEA load account từ LDAP đó.
Bind DN là Account admin của LDAP. Base DN là tree

5 User đã được load.

7.4 Load user từ AD

User : Base DN : CN=Users,DC=tuanda,DC=com
còn Machine: Base DN : CN=Computers,DC=tuanda,DC=com
(Việc set Base DN tùy thuộc vào Tree AD của các bạn)

Phần 8: HA cho privacyIDEA
Mời bạn theo dõi tiếp bài sau của tôi.
FRAMGIA : https://viblo.asia skype: tuanduong122
Do kiến thức của người viết có hạn. Nếu bài viết thấy có lỗi hoặc sai sót. Mong các bạn comment/contact giúp bài viết hoàn thiện hơn. Xin cảm ơn

Phần 6: Policy cho user trong PrivacyIDEA

Phần 6: Policy cho user
Mô tả: Policy cho phép cấp quyền view/edit/only get key ….. cho từng user. Việc phân ra như thế sẽ dễ dàng định mức quyền hạn của từng người trong nhóm.
Việc thiết lập policy cho từng user các bạn nên tự tìm hiểu.
Tại phần này tôi sẽ đưa ra giải pháp khắc phục phần 3: ClientA đã cài privacy-sshkey, khi client biết được useradmin/pass trong mục config, ClientA đó sẽ vào phá hoại WEB manager. (Có nhiều cách để chặn truy cập web, ngoài ra ta có thể dùng firewall, iptables, apache.....)
Kịch bản: Có 3 user admin/admin2/admin3. Ta set admin2 full quyền, còn admin/admin3 chỉ có quyền get key ssh mà thôi.
Tạo user th2
#pi-manage admin add admin2
Tạo user th3
#pi-manage admin add admin3
Vào mục Config / Chọn Pilicies / Chọn Create New Policy . Ta cấu hình như sau để admin2 có full quyền



Đối với admin và admin3. ta bỏ hết các lựa chọn và chỉ tick vào những phần sau:

Trường hợp bạn gán quyền policy sai. Bạn có thể chỉnh sửa/xóa trong Database pi.policy Sẽ giúp bạn lấy lại được quyền admin. Và nhớ phải restart lại apache2 thì policy mới được load lại từ Databases.
Phần 6: Policy cho user
Mời bạn theo dõi tiếp bài sau của tôi.
FRAMGIA : https://viblo.asia skype: tuanduong122
Do kiến thức của người viết có hạn. Nếu bài viết thấy có lỗi hoặc sai sót. Mong các bạn comment/contact giúp bài viết hoàn thiện hơn. Xin cảm ơn

Phần 7: Quản lý user client trong PrivacyIDEA (sqlrealm/dbrealm/ldap/Activedirectory)

Mời bạn theo dõi tiếp bài sau của tôi.
FRAMGIA : https://viblo.asia skype: tuanduong122
Do kiến thức của người viết có hạn. Nếu bài viết thấy có lỗi hoặc sai sót. Mong các bạn comment/contact giúp bài viết hoàn thiện hơn. Xin cảm ơn

Ứng cứu khi chown -R user1:user1 /etc

1. Bài toán Gõ nhầm: chown -R user1:user1 /etc 2. Giải: Cách 1: Tìm bản backup /etc cũ (tỉ lệ phục hồi gần như ~100%) Cách 2: Tìm tạm 1 thư ...