Professional Documents
Culture Documents
Addc With Samba
Addc With Samba
Giới thiệu.
Nói đến Active Directory, bạn sẽ nghĩ ngay tới Microsoft, vì MS chính là người tạo nên AD. Bản thân
mình cũng hay dùng AD với mục đích chính SSO (Single Sign On), 1 account đăng nhập mọi service trong
hệ thống (tính cả windows và linux).
Tuy nhiên với Windows OS thì có 1 bất lợi khá lớn là nó dùng resource khá nhiều, nên nhiều khi để chạy
lên đầy đủ service Windows có thể tốn nhiều thời gian hơn. Vì vậy mình cần 1 hướng thay thế khác.
Và thật may mắn khi samba từ version 4 đã support AD. Bài viết này dành cho bạn nào thích dùng AD mà
ngại bản quyền và mức độ ngốn resource của Windows.
Cấu hình
Để cài đặt được từ source bạn phải có những thư viện quan trọng, câu lệnh:
Sau khi cài đặt hoàn tất, ta sẽ download 2 bộ source của SAMBA và BIND9 và giải nén, câu lệnh:
# wget https://downloads.isc.org/isc/bind9/9.11.24/bind-9.11.24.tar.gz -O
/usr/src/bind-9.11.24.tar.gz \
&& tar xvzf /usr/src/bind-9.11.24.tar.gz -C /usr/src \
&& rm -f /usr/src/bind-9.11.24.tar.gz \
&& wget https://download.samba.org/pub/samba/stable/samba-4.11.15.tar.gz -O
/usr/src/samba-4.11.15.tar.gz \
&& tar xvzf /usr/src/samba-4.11.15.tar.gz -C /usr/src \
&& rm -f /usr/src/samba-4.11.15.tar.gz
Bạn nhớ kiểm tra xem trong thư mục /usr/src xem đã có 2 directory với tên là samba-xxx và bind-xxx.
# cd /usr/src/bind-9.11.24 \
&& ./configure --enable-threads --with-libtool --with-dlopen=yes --prefix=/usr \
--sysconfdir=/etc/bind --with-gssapi=/usr --with-lmdb=/usr --with-openssl=/usr \
--mandir=/usr/share/man --infodir=/usr/share/info --with-python=python3 \
--with-randomdev=/dev/urandom --with-dlz-filesystem=yes --with-dlz-ldap=yes \
--with-zlib --with-openssl --enable-filter-aaaa \
&& make && make install && cd ~
Cài đặt sẽ mất 1 khoản thời gian để hoàn thành nên bạn đi kiếm gì uống đi nhé.
Sau khi hoàn thành, chúng ta nên kiểm tra xem app đã được cài đặt thành công hay không. Sử dụng
# which named
hoặc
# named -V
Sau đó chúng ta nên tạo directory run để chứa pid và session file (thường nếu chạy service dưới quyền
khác root sẽ hay bị lỗi permission denied, vì thế tốt nhất là lưu file pid vào chỗ mà mình có thể quản lý),
thêm 1 directory nữa tên master để chứa file cấu hình zone.
Kế tiếp, ta cần cấu hình zone localhost, mục đích là cho server có thể hiểu chính nó (localhost), câu lệnh:
Tới đây ta phải set lại permission của tất cả các file vừa mới tạo.
Hiện tại, BIND đã được cấu hình mà chưa cho phép IP nào có thể chạy query, câu lệnh dưới đây sẽ cho
phép bạn thêm 1 dãy IP vào bên trong BIND service.
Ví dụ:
Tới đây thì bạn đã xong phần cấu hình cho BIND, kế tiếp tạo 1 file service trong systemd, file này có tác
dụng quản lý service BIND.
[Service]
ExecStart=/usr/sbin/named -4 -f -u named
ExecReload=/usr/sbin/rndc reload
ExecStop=/usr/sbin/rndc stop
[Install]
WantedBy=multi-user.target
EOT
# cd /usr/src/samba-4.11.15 \
&& ./configure --with-system-mitkrb5 --with-experimental-mit-ad-dc \
--with-systemd --enable-fhs --datarootdir=/usr/share \
--sysconfdir=/etc --prefix=/usr --libdir=/usr/lib --localstatedir=/var \
--pythondir=/usr/lib/python3.7/site-packages \
--pythonarchdir=/usr/lib/python3.7/site-packages \
&& make && make install && cd ~
Tiếp tục kiếm gì uống nhé, cài đặt sẽ mất một khoản thời gian đó. Sau khi hoàn thành, nhớ kiểm tra xem
SAMBA đã được cài thành công hay chưa, câu lệnh:
# samba -b
Giờ mình chỉ cần tạo thêm file service dành cho systemd.
[Service]
Type=forking
ExecStart=/usr/sbin/samba -D
PIDFile=/var/run/samba/samba.pid
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
EOT
Sau khi tạo xong file service, tiện thể cho enable service đó luôn
Tuy nhiên chỉ enable thôi, chưa start ngay nhé, vì mình cần phải setup DC trước.
Sau đó ta chỉ cần start ntp service lên và kiểm tra xem thời gian có chính xác không.
# date
Các bước chuẩn bị trước khi tạo hoặc tham gia DOMAIN.
Trước khi chúng ta tạo mới hoặc tham gia DOMAIN, tất cả các bước liên quan sao nên được hoàn thành,
để tránh bị xung đột khi tạo hoặc join Domain.
Thực hiện câu lệnh dưới đây rồi kill tất cả process nếu câu lệnh trả về giá trị.
# ps ax | egrep "samba|smbd|nmbd|winbindd"
# rm -f /etc/krb5.conf
Sau khi hoàn thành tạo domain mới, bạn nên thực hiện thêm câu lệnh dưới đây.
# cp /var/lib/samba/private/krb5.conf /etc/krb5.conf \
&& chown -R root:named /var/lib/samba/bind-dns
Bạn có thể start samba service lúc này hoặc có thể tiến tới mục tiếp theo.
Kế tiếp, chúng ta thực hiện việc join domain của server hiện tại, sau câu lệnh này bản thân server này
cũng sẽ trở thành DC, thực thi:
Tiếp tục, ta chỉnh quyền của thư mục bind-dns để DNS service có thể truy cập thông tin của record.
Package này đã có sẵn trong REPO nên ta chỉ cần thực thi:
Bạn có thể xem 1 số tài liệu về setting DHCP server, ở đây mình chỉ hướng dẫn cách để DHCP có thể
update dns name của client lên DNS server.
Đầu tiên bạn phải tạo 1 user cho phép dhcp gởi thông tin về DNS của client vào AD, sau đó setting thêm
user này ko bao giờ bị expire luôn.
Sau đó xuất thông tin người dùng dhcpduser ra keytab, khi dùng keytab thì khi chạy sẽ ko cần password.
Kế tiếp, bạn download file này "dhcp-dyndns" rồi giải nén và lưu vào /usr/local/bin, nhớ chmod 775 file
thực thi này nhé.
Các bước thực hiện sau khi tạo hoặc tham gia DOMAIN
Sau khi hoàn thành cài đặt domain, bạn nên bổ sung thêm 1 số config vào SAMBA để:
• Bạn có thể đăng nhập vào domain server dưới danh nghĩa DOmain account.
• Ngăn chặn tính năng CUPS (printer mangement).
• Cho phép update DNS từ SAMBA tới BIND
Thực thi:
# sed -i 's/\[global\]/&\n\
\tallow dns updates = nonsecure\
\tdisable spoolss = Yes\
\tdns update command = \/usr\/sbin\/samba_dnsupdate --use-samba-tool\
\tprintcap name = \/dev\/null\
\ttemplate homedir = \/home\/%D\/%U\
\ttemplate shell = \/bin\/bash\
\twinbind refresh tickets = Yes\
\twinbind use default domain = Yes\
\tserver role check:inhibit = Yes\
\tidmap_ldb:use rfc2307 = Yes\
/g' /etc/samba/smb.conf
Tinh chỉnh BIND để cho phép DNS service truy cập thông tin record từ SAMBA, câu lệnh
Đến đây thì mọi thứ đã hoàn thành, cái bạn cần làm bây giờ là start tất cả service có liên quan.
Domain service
DNS service.
# systemctl restart bind9