Từ Windows Active Directory sang hạ tầng Linux
Bảng so sánh dịch vụ AD ↔ Linux · Hướng dẫn triển khai Samba AD DC & FreeIPA · Phương án migration khi đang chạy full Windows AD với client hỗn hợp Windows + Linux · Lộ trình chuyển đổi hoàn toàn sang client Linux. Mọi lệnh trích dẫn từ tài liệu chính thống của hãng (Samba, Red Hat, Canonical, ISC, Microsoft).
Tổng quan & Cách đọc tài liệu
Hai "stack" thay thế AD trên Linux · Nguyên tắc chọn
Trên Linux không có một sản phẩm duy nhất làm được đúng mọi vai trò của Windows AD. Thay vào đó có hai stack chính, chọn theo loại client bạn sẽ giữ lại:
Triển khai chính giao thức AD DC (LDAP + Kerberos + DNS + SYSVOL + SMB + FSMO). Client Windows join domain y hệt AD thật, quản lý GPO qua RSAT/GPMC.
Chọn khi còn nhiều client Windows hoặc muốn thay 1-1 Domain Controller.
Nguồn: wiki.samba.org
Ngăn xếp 389 DS + MIT Kerberos + Dogtag CA + BIND + SSSD + HBAC/sudo. Tối ưu cho máy Linux; hỗ trợ cross-forest trust với AD để chạy song song trong giai đoạn migration.
Chọn khi đích đến là client Linux (Phần IV).
Nguồn: freeipa.org · Red Hat IdM
- AD CS (PKI): Samba AD DC không chạy được Certificate Services — cần dùng FreeIPA Dogtag, step-ca hoặc EJBCA riêng.
- SYSVOL replication: Samba không hỗ trợ DFS-R gốc; nhiều DC phải đồng bộ SYSVOL bằng rsync/osync.
- Sửa GPO: chỉ làm được bằng RSAT/GPMC trên máy Windows — không có công cụ CLI tương đương.
Bảng so sánh dịch vụ Windows AD ↔ Linux
Mọi vai trò trong "full AD" và giải pháp mã nguồn mở tương đương
| Dịch vụ Windows AD | Vai trò | Linux tương đương | Mức độ / Ghi chú |
|---|---|---|---|
| AD DS (Directory) | Kho identity trung tâm | Samba AD DC · FreeIPA (389 DS) | Tương đương cao |
| LDAP | Truy vấn thư mục | 389 Directory Server · OpenLDAP · Samba LDAP | LDAPv3, gần như 1-1 |
| Kerberos KDC | SSO / xác thực | MIT Kerberos · Heimdal (tích hợp trong Samba/FreeIPA) | Cần đồng hồ lệch < 5 phút |
| AD DNS | Phân giải tên + SRV | Samba INTERNAL_DNS · BIND9 (bind-dyndb-ldap / DLZ) | Không hỗ trợ zone-transfer ra DNS non-AD (INTERNAL) |
| Group Policy (GPO) | Áp cấu hình/khóa client | SSSD GPO + ADSys (Win client) · FreeIPA HBAC/sudo/ID Views + Ansible (Linux) | Không 1-1 — ghép nhiều công cụ |
| DHCP | Cấp IP động | ISC Kea DHCP | ISC dhcpd đã EOL → dùng Kea |
| Time (W32Time) | Đồng bộ giờ | chrony | Bắt buộc cho Kerberos. Không dùng ntpsec với Samba |
| AD CS (PKI) | Cấp/thu hồi chứng chỉ | FreeIPA Dogtag CA · step-ca · EJBCA | Samba KHÔNG có — dịch vụ riêng |
| File server (SMB) | Chia sẻ file | Samba (file server / domain member) | SMB2/3, ACL Windows |
| Print server | Quản lý in ấn | CUPS (+ Samba bridge cho client Windows) | Mỗi queue CUPS = 1 SMB share |
| RADIUS / NPS | 802.1X / VPN auth | FreeRADIUS (backend AD/LDAP + ntlm_auth) | PEAP/MSCHAPv2 cần domain-join + ntlm_auth |
| AD FS (Federation) | SAML / OIDC SSO | Keycloak | User federation → LDAP/AD |
| WSUS | Quản lý bản vá | apt-mirror · dnf reposync+createrepo · Landscape · Foreman/Katello | WSUS ngừng thêm tính năng từ 9/2024 |
| GP Client (agent) | Agent phía client | SSSD (+ realmd để join) | Caching, offline login |
| FSMO roles | 5 vai trò master | Samba AD DC (đủ 5 roles) | samba-tool fsmo |
Triển khai các dịch vụ Linux tương đương
Step-by-step từ tài liệu Samba / Red Hat / Canonical / ISC
II.1 · Samba Active Directory Domain Controller (Ubuntu 24.04)
1. Cài package & dọn service xung đột
# Ubuntu 24.04 LTS — cài Samba AD DC và công cụ
sudo apt update
sudo apt install -y samba-ad-dc krb5-user bind9-dnsutils winbind smbclient
# Dừng & mask smbd/nmbd/winbind — dịch vụ samba-ad-dc tự quản lý chúng
sudo systemctl disable --now smbd nmbd winbind
sudo systemctl mask smbd nmbd winbind
# Xóa smb.conf và DB cũ để provision tạo mới sạch
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.orig
sudo rm -rf /var/lib/samba/private/*.ldb /var/lib/samba/private/*.tdb
Nguồn: ubuntu.com — Provision Samba AD Controller · wiki.samba.org — Managing Samba AD DC Service
2. Provision domain
sudo samba-tool domain provision \
--server-role=dc \
--use-rfc2307 \
--realm=COMPANY.LOCAL \
--domain=COMPANY \
--dns-backend=SAMBA_INTERNAL \
--adminpass='StrongAdminPassword123!'
# --realm : Kerberos realm (VIẾT HOA, là FQDN của domain)
# --domain : tên NetBIOS (tối đa 15 ký tự)
# --use-rfc2307: bật ánh xạ UID/GID Unix cho tài khoản Linux
# --dns-backend: SAMBA_INTERNAL (nhỏ) hoặc BIND9_DLZ (nhiều DC / zone ngoài)
Nguồn: wiki.samba.org — Setting up Samba as an AD DC
3. Cấu hình Kerberos, DNS resolver, chrony & khởi động
# Copy krb5.conf do provision sinh ra (KHÔNG symlink — thư mục private chỉ root đọc)
sudo cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
# Trỏ DNS resolver về chính DC (sửa /etc/resolv.conf hoặc netplan)
# nameserver 10.99.0.1 (IP của DC)
# search company.local
# Đồng bộ giờ — bắt buộc cho Kerberos (chrony, KHÔNG dùng ntpsec)
sudo apt install -y chrony
# Bật & khởi động dịch vụ AD DC
sudo systemctl unmask samba-ad-dc
sudo systemctl enable --now samba-ad-dc
sudo systemctl status samba-ad-dc
Nguồn: wiki.samba.org — Time Synchronisation
4. Kiểm tra sau cài
# Kerberos: lấy vé TGT
kinit [email protected] && klist
# Bản ghi SRV (quyết định việc client tìm thấy domain)
host -t SRV _ldap._tcp.company.local.
host -t SRV _kerberos._udp.company.local.
# SMB: phải thấy NETLOGON & SYSVOL
smbclient -L localhost -N
II.2 · FreeIPA / Red Hat IdM (Rocky/RHEL 9)
/etc/hosts, IPv6 kernel bật, giờ đồng bộ. Log cài: /var/log/ipaserver-install.log.1. Cài server (kèm DNS tích hợp)
sudo dnf install -y ipa-server ipa-server-dns
sudo ipa-server-install \
--realm=COMPANY.LOCAL \
--domain=company.local \
--ds-password='DirMgrPass123' \
--admin-password='AdminPass123' \
--setup-dns \
--forwarder=8.8.8.8 \
-U
# Mở firewall
sudo firewall-cmd --permanent --add-service={freeipa-4,dns}
sudo firewall-cmd --reload
Nguồn: Red Hat — Installing Identity Management (RHEL 9) · freeipa.org — Quick Start
2. Thêm replica & enroll client
# Trên máy đã là client IPA, nâng lên replica (multi-master)
sudo ipa-replica-install --principal admin --admin-password 'AdminPass123'
sudo ipa-ca-install # thêm vai trò CA (nếu muốn)
# Enroll một client Linux vào domain IPA
sudo dnf install -y ipa-client # hoặc: apt install freeipa-client
sudo ipa-client-install \
--domain=company.local \
--realm=COMPANY.LOCAL \
--server=ipa1.company.local \
--principal=admin --password='AdminPass123' \
--mkhomedir -U
Nguồn: freeipa.org — Replica Setup · freeipa.org — Client
3. HBAC + sudo = thay Group Policy
# Tắt rule allow_all mặc định, xây quyền tối thiểu
ipa hbacrule-disable allow_all
ipa hostgroup-add webservers --desc="Web servers"
ipa hostgroup-add-member webservers --hosts=web1.company.local
ipa group-add webadmins --desc="Web admins"
ipa hbacrule-add ssh_webadmins --desc="SSH web servers cho admin"
ipa hbacrule-add-user ssh_webadmins --groups=webadmins
ipa hbacrule-add-host ssh_webadmins --hostgroups=webservers
ipa hbacrule-add-service ssh_webadmins --hbacsvcs=sshd
ipa hbactest --user=alice --host=web1.company.local --service=sshd # -> ALLOW
# sudo tập trung (thay cho /etc/sudoers cục bộ)
ipa sudorule-add sysadmin_reboot
ipa sudorule-add-user sysadmin_reboot --groups=sysadmins
ipa sudorule-add-host sysadmin_reboot --hostgroups=webservers
ipa sudorule-add-allow-command sysadmin_reboot --sudocmds='/usr/sbin/reboot'
Nguồn: FreeIPA workshop — HBAC · Sudo rules
II.3 · Dịch vụ hạ tầng phụ trợ (deploy nhanh + nguồn)
sudo nano /etc/kea/kea-dhcp4.conf
sudo systemctl enable --now kea-dhcp4-server
JSON config, subnet4 + pools. Nguồn: kea.readthedocs.io
# /etc/chrony/chrony.conf:
server 10.99.0.1 iburst
allow 192.168.1.0/24
Lệch < 5 phút cho Kerberos. Nguồn: chrony-project.org
# Samba: SAMBA_INTERNAL hoặc BIND9_DLZ
Nguồn: isc.org/bind · Samba DNS Admin
# PEAP/MSCHAPv2 -> ntlm_auth -> AD
Cần domain-join + ntlm_auth. Nguồn: freeradius.org
# hoặc FreeIPA CA tích hợp (Dogtag)
Nguồn: smallstep.com/step-ca · FreeIPA CA
-e KEYCLOAK_ADMIN_PASSWORD=pass \
quay.io/keycloak/keycloak start-dev
User Federation → LDAP/AD. Nguồn: keycloak.org
lpadmin -p May_In -E -v smb://srv/queue
Nguồn: samba.org · Ubuntu CUPS
# Ubuntu apt-mirror | Canonical Landscape
Nguồn: Canonical Landscape · Red Hat local mirror
Migration khi đang chạy full Windows AD (client Windows + Linux)
Giữ hệ thống chạy liên tục · Không gián đoạn client
III.1 · Chọn 1 trong 2 chiến lược
Client Windows vẫn join domain bình thường (Samba nói đúng giao thức AD).
Client Linux join bằng realm join (SSSD).
GPO cũ tiếp tục dùng qua RSAT/GPMC.
Không có AD CS & DFS-R gốc (xem giới hạn).
➜ Khi CÒN NHIỀU client Windows.
Windows client & user ở nguyên trên AD.
Linux client join FreeIPA; user AD đăng nhập được nhờ trust.
Có sẵn PKI (Dogtag), HBAC, sudo tập trung cho Linux.
Vẫn phụ thuộc Windows AD cho tới Phần IV.
➜ Khi ĐÍCH ĐẾN là Linux, muốn tách dần.
III.2 · Các bước thực hiện (Phương án A — thay thế DC)
repadmin /replsummary # tất cả DC phải 0 lỗi
dcdiag /v # sức khỏe DC: DNS, FSMO, replication
Sửa hết lỗi TRƯỚC khi thêm/bớt DC. Nguồn: Microsoft Learn — Diagnose AD replication failures
Trước khi join: /etc/resolv.conf trỏ về Windows DC, giờ đồng bộ (lệch < 5 phút), host tự phân giải FQDN.
sudo samba-tool domain join company.local DC \
--dns-backend=SAMBA_INTERNAL \
-U'COMPANY\Administrator'
# Sau ~15 phút KCC tạo agreement — kiểm tra replication
sudo samba-tool drs showrepl
Nguồn: wiki.samba.org — Joining a Samba DC to an Existing AD · Verifying Replication
sudo samba-tool fsmo show # xem ai đang giữ role
sudo samba-tool fsmo transfer --role=pdc -Uadministrator
sudo samba-tool fsmo transfer --role=rid -Uadministrator
sudo samba-tool fsmo transfer --role=infrastructure -Uadministrator
sudo samba-tool fsmo transfer --role=schema -Uadministrator
sudo samba-tool fsmo transfer --role=naming -Uadministrator
sudo samba-tool fsmo show # xác nhận Samba đã giữ
Transfer (DC cũ còn online) ưu tiên hơn seize. Nguồn: wiki.samba.org — Transferring and Seizing FSMO Roles
sudo apt install -y sssd-ad sssd-tools realmd adcli oddjob oddjob-mkhomedir
realm discover company.local
sudo realm join company.local -U Administrator
# Chỉ cho phép nhóm được đăng nhập
sudo realm permit -g '[email protected]'
# Kiểm tra
id [email protected]
kinit [email protected] && klist
Bật auto tạo home dir + offline login trong /etc/sssd/sssd.conf (cache_credentials=True). Nguồn: ubuntu.com — SSSD with Active Directory · realmd — AD Join Guide
# /etc/sssd/sssd.conf — bật GPO map quyền logon từ AD
[domain/company.local]
ad_gpo_access_control = permissive # chạy thử; đổi 'enforcing' khi ổn
Bắt đầu bằng permissive để tránh khóa nhầm user, xem log rồi mới enforcing. Nguồn: sssd.io — AD GPO Integration
# Trên Windows DC — demote (PowerShell)
Uninstall-ADDSDomainController -DemoteOperationMasterRole -Force
# Xác nhận vai trò đã ở Samba
netdom query fsmo
Nguồn: Microsoft Learn — Uninstall-ADDSDomainController · Transfer/seize FSMO roles
company.local chạy trên Samba AD DC. Client Windows vẫn join & nhận GPO như cũ; client Linux xác thực qua SSSD. Chưa đổi gì phía người dùng cuối.Chuyển đổi hoàn toàn sang client Linux
Đích đến: FreeIPA + Ubuntu Desktop · Bỏ hẳn Windows
IV.1 · Ánh xạ Group Policy → công cụ Linux
| Việc GPO hay làm | Tương đương trên Linux | Nguồn |
|---|---|---|
| Quyền đăng nhập / truy cập host | FreeIPA HBAC · SSSD access_provider | HBAC |
| Quyền quản trị (Restricted Groups) | FreeIPA sudo rules | sudo |
| Khóa desktop / cấm CLI / cấm đổi cài đặt | dconf lockdown qua ADSys (GNOME) | ADSys dconf |
| Map ổ đĩa mạng (Drive maps) | pam_mount / autofs (CIFS) | CIFS mount |
| Máy in triển khai qua GPO | CUPS (lpadmin) + policy | CUPS |
| Proxy hệ thống | ubuntu-proxy-manager (ADSys) | ADSys proxy |
| Password policy / lockout | FreeIPA ipa pwpolicy-mod |
freeipa.org |
| Cấu hình phần mềm / script tùy biến | Ansible / Puppet / Salt | config mgmt |
IV.2 · Quy trình chuyển 1 máy trạm Windows → Ubuntu
- 1.Sao lưu dữ liệu user khỏi profile Windows (Documents, Downloads, bookmark, mail). Lưu ý: dữ liệu mã hóa EFS không giải mã được trên Linux — phải giải mã trên Windows trước.
- 2.Cài Ubuntu Desktop 24.04 LTS lên máy trạm.
- 3.Join domain:
ipa-client-install(nếu đích FreeIPA) hoặcrealm join(nếu Samba AD DC). - 4.Home directory + drive maps: bật auto-mkhomedir; map thư mục mạng bằng pam_mount/autofs.
- 5.Máy in: thêm queue qua CUPS (
lpadmin). - 6.Khóa desktop & proxy: cài
ubuntu-adsys, đẩy dconf lockdown + proxy từ GPO template Ubuntu. - 7.Khôi phục dữ liệu user vào
~/Documents, import bookmark/mail (Firefox/Evolution).
# B3 — join FreeIPA
sudo apt install -y freeipa-client
sudo ipa-client-install --domain=company.local --realm=COMPANY.LOCAL \
--server=ipa1.company.local --mkhomedir -U
# B4 — tự tạo home dir khi đăng nhập lần đầu
sudo pam-auth-update --enable mkhomedir
# B4 — map ổ mạng (autofs CIFS), ví dụ /etc/auto.smb
# documents -fstype=cifs,credentials=/etc/creds,uid=%U ://fileserver/%U
# B5 — thêm máy in mạng qua CUPS
sudo lpadmin -p May_In_Tang3 -E -v smb://fileserver/HP_M404 -m everywhere
# B6 — khóa desktop qua ADSys (dconf)
sudo apt install -y ubuntu-adsys
Nguồn: FreeIPA Client · Red Hat — pam_mkhomedir · Ubuntu Autofs · ADSys docs
- Ứng dụng chỉ chạy Windows (.exe, phần mềm kế toán, thiết bị chuyên dụng) → cân nhắc Wine, VM Windows, hoặc bản web/Linux thay thế.
- MS Office → LibreOffice / OnlyOffice / Microsoft 365 web (kiểm tra tương thích macro, template).
- Dữ liệu EFS, chứng chỉ trong Windows cert store → export trước khi xóa máy.
- Đào tạo người dùng cuối — chi phí lớn nhất thường là con người, không phải kỹ thuật.
Triển khai chi tiết dịch vụ + Policy + Tạo OU
Config đầy đủ copy-paste · Chặn USB / cài phần mềm / share · OU trên Linux
company.local, LAN 192.168.1.0/24. Đổi tên interface (eth0/ens33), IP, MAC theo môi trường thực tế. Lệnh viết cho Ubuntu 24.04, có ghi chú khác biệt RHEL/Rocky 9.V.1 · DHCP Server — ISC Kea
Cài đặt (repo chính thức ISC)
# Ubuntu 24.04 — thêm repo ISC Kea rồi cài dhcp4
curl -1sLf 'https://dl.cloudsmith.io/public/isc/kea-3-2/setup.deb.sh' | sudo -E bash
sudo apt install -y isc-kea-dhcp4-server
# RHEL/Rocky 9
# curl -1sLf 'https://dl.cloudsmith.io/public/isc/kea-3-2/setup.rpm.sh' | sudo -E bash
# sudo dnf install -y isc-kea-dhcp4
Nguồn: kb.isc.org — Kea packages
File /etc/kea/kea-dhcp4.conf (đầy đủ, có reservation)
{
"Dhcp4": {
"interfaces-config": { "interfaces": [ "eth0" ] },
"lease-database": {
"type": "memfile", "persist": true,
"name": "/var/lib/kea/dhcp4.leases"
},
"valid-lifetime": 28800,
"renew-timer": 14400,
"rebind-timer": 21600,
"option-data": [
{ "name": "domain-name-servers", "data": "192.168.1.10, 192.168.1.11" },
{ "name": "domain-name", "data": "company.local" },
{ "name": "routers", "data": "192.168.1.254" }
],
"subnet4": [
{
"id": 1,
"subnet": "192.168.1.0/24",
"pools": [ { "pool": "192.168.1.100 - 192.168.1.200" } ],
"reservations": [
{
"hw-address": "aa:bb:cc:dd:ee:ff",
"ip-address": "192.168.1.50",
"hostname": "printer.company.local"
}
]
}
],
"loggers": [
{ "name": "kea-dhcp4",
"output-options": [ { "output": "/var/log/kea/kea-dhcp4.log" } ],
"severity": "INFO" }
]
}
}
Khởi động & kiểm tra
# Kiểm tra cú pháp config trước
sudo kea-dhcp4 -t /etc/kea/kea-dhcp4.conf
sudo systemctl enable --now isc-kea-dhcp4-server
sudo systemctl status isc-kea-dhcp4-server
journalctl -u isc-kea-dhcp4-server -f # theo dõi cấp lease
V.2 · DNS Server — BIND9 (authoritative + forwarder)
# Cài đặt
sudo apt install -y bind9 bind9-utils # RHEL: dnf install bind bind-utils
/etc/bind/named.conf.options
acl trusted_clients { localhost; 192.168.1.0/24; };
options {
directory "/var/cache/bind";
listen-on port 53 { any; };
allow-query { trusted_clients; };
allow-recursion { trusted_clients; };
recursion yes;
forwarders { 8.8.8.8; 8.8.4.4; };
forward first;
dnssec-validation auto;
};
zone "company.local" IN {
type primary;
file "/etc/bind/zones/db.company.local";
allow-update { none; };
};
zone "1.168.192.in-addr.arpa" IN {
type primary;
file "/etc/bind/zones/db.1.168.192";
allow-update { none; };
};
Zone thuận /etc/bind/zones/db.company.local
$TTL 3600
@ IN SOA ns1.company.local. admin.company.local. (
2026070701 ; serial (YYYYMMDDnn — tăng mỗi lần sửa)
12h 15m 4d 2h )
IN NS ns1.company.local.
ns1 IN A 192.168.1.10
dc1 IN A 192.168.1.5
www IN A 192.168.1.20
Zone nghịch + kiểm tra
# /etc/bind/zones/db.1.168.192 (PTR)
# 5 IN PTR dc1.company.local.
# 20 IN PTR www.company.local.
# Validate cú pháp + zone
sudo named-checkconf
sudo named-checkzone company.local /etc/bind/zones/db.company.local
sudo systemctl restart bind9 # RHEL: named
# Test
dig @localhost www.company.local +short
dig @localhost -x 192.168.1.20 +short
Nguồn: bind9.readthedocs.io — Zone files · isc.org/bind. Nếu thay AD DNS trực tiếp: cân nhắc Samba SAMBA_INTERNAL / BIND9_DLZ (xem Phần II.3).
V.3 · Đồng bộ giờ — Chrony (server + client)
Server LAN — /etc/chrony/chrony.conf
pool 0.ubuntu.pool.ntp.org iburst
server ntp.company.local iburst
allow 192.168.1.0/24
local stratum 10 orphan
rtcsync
makestep 0.1 3
driftfile /var/lib/chrony/drift
Client — trỏ về DC
server dc1.company.local iburst
server dc2.company.local iburst
rtcsync
makestep 0.1 3 # giữ lệch < 5 phút
driftfile /var/lib/chrony/drift
sudo systemctl enable --now chronyd
chronyc sources -v # nguồn thời gian
chronyc tracking # độ lệch hiện tại
sudo chronyc clients # (trên server) client đang đồng bộ
Nguồn: ubuntu.com — Serve NTP with chrony · chrony-project.org — chrony.conf. Lệch giờ > 5 phút = Kerberos báo "clock skew too great".
V.4 · Samba File Server (domain member)
Cài + join domain
sudo apt install -y realmd samba samba-common-bin samba-dsdb-modules \
samba-vfs-modules winbind krb5-user
sudo hostnamectl hostname fileserver.company.local
# Join làm MEMBER (winbind), không phải DC
sudo realm join -v --membership-software=samba --client-software=winbind \
company.local -U Administrator
sudo systemctl enable --now winbind smbd nmbd
/etc/samba/smb.conf — global + share (ACL theo nhóm AD)
[global]
workgroup = COMPANY
security = ads
realm = COMPANY.LOCAL
kerberos method = secrets and keytab
winbind use default domain = no
idmap config * : backend = tdb
idmap config * : range = 10000-999999
idmap config COMPANY : backend = rid
idmap config COMPANY : range = 2000000-2999999
template shell = /bin/bash
usershare max shares = 0 # CẤM user tự tạo share (xem V.9)
[data]
path = /srv/data
read only = no
valid users = +"COMPANY\Finance Team" # nhóm AD dùng dấu '+'
vfs objects = acl_xattr recycle
acl_xattr:ignore system acls = yes
sudo testparm -s # kiểm tra cú pháp
sudo systemctl restart smbd nmbd winbind
wbinfo -u | head # liệt kê user AD
getent passwd 'COMPANY\administrator' # phân giải user AD → UID
Nguồn: ubuntu.com — Samba member server · samba.org — smb.conf(5)
V.5 · Print Server — CUPS (+ chia sẻ qua Samba)
sudo apt install -y cups
sudo systemctl enable --now cups
# Bật quản trị từ xa + chia sẻ máy in
sudo cupsctl --remote-admin --share-printers
# Thêm máy in mạng (driverless IPP)
sudo lpadmin -p HP_M404 -E -v ipp://192.168.1.50/ipp/print -m everywhere -o media=A4
sudo lpadmin -d HP_M404 # đặt làm mặc định
lpstat -p -v # kiểm tra
sudo ufw allow 631/tcp # Web UI: http://<server>:631
Chia sẻ cho client Windows — thêm vào smb.conf:
[global]
printing = cups
printcap name = cups
load printers = yes
[printers]
path = /var/spool/samba
printable = yes
browsable = yes
guest ok = no
Nguồn: ubuntu.com — CUPS print server · ubuntu.com — Samba print server
V.6 · FreeRADIUS — 802.1X PEAP/MSCHAPv2 backend AD
ntlm_auth xác thực mật khẩu.sudo apt install -y freeradius freeradius-utils samba winbind
sudo realm join company.local -U Administrator # nếu chưa join
# /etc/freeradius/3/mods-available/mschap — trỏ ntlm_auth về winbind
mschap {
use_mppe = yes
require_encryption = yes
ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --allow-mschapv2 \
--username=%{mschap:User-Name} --domain=COMPANY \
--challenge=%{mschap:Challenge:-00} \
--nt-response=%{mschap:NT-Response:-00}"
}
# /etc/freeradius/3/mods-available/eap — chọn PEAP → inner MSCHAPv2
eap { default_eap_type = peap
peap { default_eap_type = mschapv2
virtual_server = inner-tunnel } }
# Khai báo switch/AP trong /etc/freeradius/3/clients.conf
# client 192.168.1.2 { secret = SuperSecret123! }
sudo freeradius -X # chạy debug, xem Access-Accept
sudo systemctl enable --now freeradius
# Test MSCHAP nội bộ:
radtest -t mschap user 'MatKhau' 127.0.0.1:18120 0 testing123
Nguồn: freeradius.org — AD / ntlm_auth MSCHAP · EAP-PEAP tutorial
V.7 · Chặn USB (ổ lưu trữ di động)
Cho/khoá theo allow-list từng thiết bị. Kiểm soát tốt nhất.
Nhẹ, chặn toàn bộ; kém linh hoạt (không allow-list).
Chặn theo Vendor/Product ID (lsusb). Thô hơn USBGuard.
V.8 · Chặn tự ý cài phần mềm
Cách 1 — polkit (chặn PackageKit cho non-admin)
# /etc/polkit-1/rules.d/00-deny-packagekit.rules
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.packagekit.package-install" ||
action.id == "org.freedesktop.packagekit.package-remove" ||
action.id == "org.freedesktop.packagekit.package-update") {
return polkit.Result.NO;
}
});
# Áp dụng & test
sudo systemctl restart polkit
pkcheck -a "org.freedesktop.packagekit.package-install" -u $(whoami) # → no
Chặn cài/gỡ/update qua GNOME Software, apt/dnf-PackageKit cho user thường; admin (sudo) vẫn cài được. Nguồn: freedesktop — polkit
Cách 2 — khoá desktop qua dconf (chặn terminal, repo lạ)
# /etc/dconf/db/local.d/00_lock-software
[org/gnome/software]
allow-user-repos=false
[org/gnome/desktop/lockdown]
disable-command-line=true
# /etc/dconf/db/local.d/locks/00_lock-software (khoá không cho user đổi)
/org/gnome/software/allow-user-repos
/org/gnome/desktop/lockdown/disable-command-line
sudo dconf update
Đẩy tập trung qua ADSys (Ubuntu + Samba AD GPO). Client Windows: AppLocker / Software Restriction Policy qua GPO. Nguồn: GNOME — dconf lockdown · Microsoft — AppLocker
sudo/wheel (sudo deluser user sudo) — user không elevate được cho bất kỳ việc gì. Ưu tiên polkit để kiểm soát chọn lọc.V.9 · Chặn user tự ý share folder
# 1) Samba: cấm usershare (net usershare add sẽ bị từ chối)
# trong [global] của /etc/samba/smb.conf:
usershare max shares = 0
sudo testparm -s && sudo systemctl restart smbd
# 2) Desktop: tắt chia sẻ file GNOME/Nautilus
sudo systemctl disable --now gnome-user-share.service 2>/dev/null
sudo apt purge -y nautilus-share gnome-user-share
# 3) Chặn service không dùng + firewall cổng SMB/NFS
sudo systemctl mask nfs-server
sudo ufw deny 445/tcp
sudo ufw deny 2049/tcp
sudo chmod 700 /var/lib/samba/usershares
Kết quả: user thường không tạo được share mới; chỉ share do admin định nghĩa trong smb.conf tồn tại. Nguồn: samba.org — smb.conf(5) usershare
V.10 · Tạo OU trên Linux & áp policy theo OU
samba-tool ou) — dùng khi còn client Windows + GPO. Trên FreeIPA KHÔNG có OU — thay bằng hostgroup/usergroup + automember + HBAC/sudo.A · Samba AD DC — OU thật + link GPO
# Tạo OU
sudo samba-tool ou create "OU=Sales,DC=company,DC=local"
sudo samba-tool ou create "OU=Desktops,DC=company,DC=local"
sudo samba-tool ou list --full-dn
# Chuyển user / máy tính vào OU
sudo samba-tool user move jdoe "OU=Sales,DC=company,DC=local"
sudo samba-tool computer move PC01 "OU=Desktops,DC=company,DC=local"
# Liệt kê GPO đã tạo
sudo samba-tool gpo list
sudo samba-tool gpo info <GPO-GUID>
Client Linux áp GPO của OU qua SSSD
# /etc/sssd/sssd.conf [domain/company.local]
ad_gpo_access_control = permissive # test trước → đổi 'enforcing'
sudo systemctl restart sssd
sudo journalctl -u sssd -f # xem GPO cho phép/chặn
Nguồn: samba.org — samba-tool(8) · wiki.samba.org — Group Policy
B · FreeIPA — "OU" = hostgroup + automember + HBAC
# Nhóm host (thay vai trò OU cho máy Linux)
ipa hostgroup-add sales-hosts --desc="May phong Sales"
ipa hostgroup-add-member sales-hosts --hosts=pc01.company.local
# Tự động gán host theo tên FQDN
ipa automember-add --type=hostgroup sales-hosts
ipa automember-add-condition --type=hostgroup sales-hosts \
--key=fqdn --inclusive-regex='^sales[0-9]+\.company\.local$'
ipa automember-rebuild --type=hostgroup
# Áp quyền theo nhóm (thay GPO): HBAC + sudo
ipa hbacrule-add sales-login
ipa hbacrule-add-host sales-login --hostgroups=sales-hosts
ipa hbacrule-add-user sales-login --groups=sales-users
ipa hbacrule-add-service sales-login --hbacsvcs=sshd
FreeIPA không có GPO khoá desktop — dconf/USBGuard vẫn đẩy bằng Ansible/ADSys, còn quyền đăng nhập/sudo do HBAC quản. Nguồn: freeipa.org — Automember · HBAC
permissive/audit trước, kiểm tra log, rồi mới enforcing. Test trên 1 máy pilot mỗi OU trước khi áp rộng. Ghi lại allow-list USB & whitelist phần mềm để tránh khoá nhầm.
Nguồn tài liệu chính thống
Toàn bộ lệnh & quy trình trích từ tài liệu hãng