Bài đăng nổi bật

Hướng dẫn thay đổi thư mục root mặc định của Docker trên Linux

Hoàn cảnh: người viết gặp một trường hợp như này Được team hạ tầng cấp cho một máy chủ gồm 2 phân vùng lưu trữ, 1 phân vùng 20GB được gắn và...

25 tháng 4, 2012

Chặn địa chỉ mail không mong muốn bằng Postfix

Có 2 cách để chặn 1 địa chỉ mail không mong muốn trong Postfix.
Cách 1: chặn bằng postfix
  • Tạo một file mà postfix có thể truy cập được:
    ví dụ: vi /etc/postfix/conf/postfix_firewall
  • Nhập nội dung file vừa tạo như sau:
    user@domain.com REJECT
    Trong đó:
    user@domain.com là địa chỉ cần chặn
    REJECT là thao tác thực hiện, ở đây nghĩa là từ chối và gửi thư thông báo cho người gửi (Có thể chọn DISCARD để hệ thống âm thầm loại bỏ thư này đi mà không báo lại cho người gửi)
  • Gõ lệnh:
    postmap hash:postfix_firewall 
  • Chạy lệnh:
    postconf -e smtpd_sender_restrictions="check_sender_access hash:/etc/postfix/conf/postfix_firewall"
  • Khởi động lại postfix bằng lệnh:
    postfix reload.
Xem thêm tại đây để biết cách cấu hình các tham số: http://www.postfix.org/access.5.html
Cách 2: áp dụng cho hệ thống postfix có sử dụng spam assassin
  • Mở file cấu hình của spam assassin:
    vi /etc/mail/spamassassin/local.cf (Đường dẫn này tùy lúc cài spam assassin quản trị đã cài như thế nào)
  • Thêm dòng sau:
    blacklist_from user@domain.com
    Trong đó: user@domain.com là địa chỉ cần chặn
  • Khởi động lại spam assassin:
    /etc/init.d/spamassassin restart
  • Khi đó mọi thư gửi từ địa chỉ user@domain.com sẽ bị hệ thống đưa vào thư rác.

20 tháng 4, 2012

Các tạo virtual IP (VIP) cho các máy chạy Linux

VIP là chức năng cho phép 1 card mạng có thể có nhiều ip.
Với khả năng này, một máy chủ duy nhất có thể triển khai nhiều webserver với nhiều địa chỉ ip khác nhau hoặc dùng vào mục đích cluster,...
Cách 1: sử dụng lệnh ifconfig.
Để tạo VIP, ta dùng lệnh sau:
ifconfig eth0:0 192.168.1.3
Lệnh này sẽ tạo thêm một VIP với tên thiết bị là eth0:0 và địa chỉ IP là 192.168.1.3.
Để kiểm tra lại ta gõ lệnh:
ifconfig eth0:0
eth0:0 Link encap:Ethernet HWaddr 00:14:6C:83:39:92
inet addr:192.168.1.28 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:33442 errors:0 dropped:0 overruns:0 frame:0
TX packets:38225 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:20240563 (19.3 Mb) TX bytes:3483829 (3.3 Mb)
Interrupt:18
Sau khi tạo ra, VIP có thể được sử dụng như một card mạng thông thường.
Để xóa VIP ta dùng lệnh sau:
ifconfig down eth0:0
Cách 2: sử dụng lệnh iproute.
Để tạo VIP ta dùng lệnh sau:
ip addr add 192.168.1.28 dev eth1
với addr, add, dev là từ khóa.
192.168.1.28 là địa chỉ ip cần gán.
eth1: tên thiết bị thực tế sẽ thiết lập cho VIP.
Sau đó chạy lệnh:
ip show addr
để enable VIP đã tạo ra.
Kiểm tra lại bằng lệnh:
ifconfig
3: eth1: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:14:6c:83:39:92 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.10/24 brd 192.168.1.255 scope global eth1
inet 192.168.1.28/32 scope global eth1
Để xóa VIP ta dùng lệnh:
ip addr del 192.168.1.28/32 dev eth1
với addr, del và dev là từ khóa
192.168.1.28/32 là địa chỉ ip của VIP (không cần phải dùng /32)
eth1 là tên card đã tạo VIP.
Link tham khảo: How to creating virtal ip address on linux
http://www.tecmint.com/create-multiple-ip-addresses-to-one-single-network-interface/

18 tháng 4, 2012

Các thủ thuật sử dụng trên Firefox (Cập nhật 18/04/2012)

Dưới đây là một số thủ thuật hay và hữu ích đối với người dùng Firefox.
1 - Tự động điền địa chỉ lên thanh địa  chỉ:
Khi đang gõ một địa chỉ trên thanh địa chỉ, bạn có thể:
Nhấn ctrl + enter: để có tên miền .com, ví dụ gõ "google" --> sẽ có "www.google.com"
Nhấn shift + enter: để có tên miền .net
2 - Phím tắt để đóng tab đang mở:
Khi đang xem một tab, nếu muốn đóng tab đó ngay lập tức hãy nhấn ctrl + w

09 tháng 4, 2012

Lập trình hướng đối tượng trong javascript

Một số lưu ý trước khi đọc bài viết:
  • Bài viết không hướng tới mục đích hướng dẫn người lập trình đi từng bước từ cơ bản tới nâng cao trong việc lập trình javascript.
  • Nội dung bài viết chỉ mang tính gợi nhớ, như một note list giúp người lập trình dựa theo đó mỗi khi cần sử dụng kỹ thuật lập trình hướng đối tượng trên javascript.
1 - Hàm khởi tạo đối tượng
function name_object(variables){
 }
2 - Kế thừa trong javascript:
Đặt hàm này phía sau hàm khởi tạo của đối tượng:
name_object.prototype = new parent_object();
name_object.prototype.constructor = name_object
3 - Biến private, biến public:
  • Biến private: là các biến được định nghĩa với từ khóa var ở bên trong hàm khởi tạo của một Object
    var variable;
    Lưu ý: khai báo như thế này cũng có thể coi là một biến private của Object
    function Car(param){
       this.member = param;//param là biến private
    }
    Một biến private chỉ có thể truy cập được từ một hàm private và hàm privileged (không thể truy cập được từ ngoài và cũng không thể truy cập được từ public method của chính Object đó)
  • Biến public: là biến được khai báo với từ khóa this.
    this.variable;
  • Trong một Object, ta dùng từ khóa this khi truy cập một thuộc tính để chỉ ra rằng ta đang muốn truy cập vào thuộc tính của chính Object này.
4 - Hàm private, hàm public:
  • Hàm private: là hàm được khai báo bên trong của hàm khởi tạo của Object, chỉ có thể được gọi thông qua hàm privileged
    var function_name = function(variables){
        function dec(){
       //đây là hàm private
       }

    }
  • Hàm public: là hàm được khai báo với từ khóa prototype

    Classname.prototype.method = function(){}
5. Static properties:
  • Là thuộc tính được khai báo theo mẫu Classname.propertyName = value 
6. Static method
  • Là method được khai báo theo mẫu Classname.methodName = function(){}
  • Có thể sử dụng static method mà không cần khởi tạo đối tượng.
5. Prototype là gì?
6. Một số lưu ý thú vị khi dùng javascript "Object "
  • Khi khởi tạo một đối tượng, nếu không dùng từ khóa new thì trong đối tượng nếu dùng this, this này sẽ là một global object (nếu dùng thì new thì this sẽ chính là đối tượng đó)
  • Thực chất các hàm trong lập trình hướng đối tượng của javascript cũng chỉ là một thuộc tính được gán giá trị là một hàm.
  • Prototype thường được dùng để tạo public method và trong việc kế thừa.
Tham khảo thêm tại:
Muốn nắm nhanh hơn thì bạn vui lòng chuyển qua bài này:
 http://dalmate-tech.blogspot.com/2013/05/lap-trinh-huong-oi-tuong-voi-javascript.html

05 tháng 4, 2012

Một số nguyên tắc bảo mật cơ bản cho máy chủ chạy Linux


  1. Bảo mật tài khoản đăng nhập
  • Không enable tài khoản root của hệ thống. Không cần thiết phải disable các account mặc định của hệ thống bởi vì với các hệ điều hành Linux hiện tại thì hacker không thể lợi dụng các tài khoản này để xâm nhập vào hệ thống nữa.
    Gõ lệnh: sudo passwd root -l trên Ubuntu để lock lại tài khoản root nếu bạn đã "lỡ" mở ra.
  • Hãy tạo ra một account của riêng bạn để đăng nhập vào hệ thống theo nguyên tắc sau:
    Tên account: là một tên ngẫu nhiên, không nên là tên bạn hoặc những gì thân quen với bạn(viết tắt, viết biến tấu, người yêu, thằng ngồi bên trái, ..), ví dụ nên đặt một cái tên đăng nhập là: omaynaythatlabaomat --> nguyên tắc đặt tên này sẽ giúp kẻ tấn công không thể dò ra được account login là gì (đa phần các vụ brute force sẽ dò theo một danh sách những account có sẵn, mà account như này thì chắc chắn không có trong danh sách của kẻ tấn công rồi)
    Mật khẩu: hãy cố gắng đặt càng dài càng tốt, có kết hợp các biến tấu theo quy tắc chỉ bạn nghĩ ra. Ví dụ đơn giản thế này: matkhaunaythatladaivaphuctap -->MaTkHaUnAyThAtLaDaIvAPhUcTaP (biến lần 1 theo nguyên tắc 1 hoa 1 thường) -->M@TkH@uN@yTh@tL@D@!v@PhUcT@p (biến lần 2 bằng cách thay a = @) --> MaTkH2uN@yTh2tL@Da!v2PhucT2p (biến lần 3, trộn lẫn giữa số ,chữ và ký tự !) --> Điều này đảm bảo làm khó ngay cả cho những kẻ tấn công kiên trì nhất cũng phải nản lòng (tôi đảm bảo kể cả kẻ tấn công có đứng nhìn bạn gõ mật khẩu hắn cũng không thể nhớ được là bạn đã gõ những gì)
     2. Ngăn không cho người dùng đăng nhập hệ thống.
  • Xóa public key trong file ~/.ssh/authorized_key
  • Xóa không cho người dùng dùng password sudo: passwd -d username (Xóa password của user) hoăc passwd -l username (Lock password của user)
  • Dùng visudo: xóa tất cả các user có quyền NOPASSWD

Một số thủ thuật hay trên Linux (Cập nhật ngày 25/03/2019)

Bài viết này tôi muốn mang tới cho các bạn một số thủ thuật thú vị khi làm việc trên môi trường Linux. Thiết nghĩ, nội dung bài này sẽ có ích nhiều cho các bạn đang và có mong muốn bước chân vào thế giới lập trình shell, perl trên các hệ thống Linux nhiều hơn. Cụ thể hơn, nội dung sẽ được trình bày theo dạng Hỏi - Đáp để  thuận tiện cho các bạn tra cứu sau này.
1 - Làm thế nào để liệt kê các thư viện đã được cài trong máy?
Bạn chạy lệnh này để liệt kê các thư viện đã được cài:
/sbin/ldconfig -p
2 - Làm thế nào để xác định có những chương trình nào đã cài trên máy chạy linux?
Tùy theo hệ điều hành, bạn có thể dùng các lệnh sau:
Với các dòng RPM based:
rpm -qa
Với các dòng Debian hoặc Ubuntu
dpkg --list
Với các dòng OpenBSD
pkg_info  
3 - Làm thể nào để liệt kê có các cổng nào đang mở và các chương trình nào đang chiếm giữ cổng đó?
Chạy với quyền root lệnh sau:
netstat -tulpn 
Hoặc:
nmap -sT -O localhost 
4 - Tôi muốn biết thông tin về một hostname hoặc một địa chỉ ip?
Để biết thông tin về hostname hãy gõ:
whois hostname
Để biết thông tin về địa chỉ ip hãy gõ:
dig -x ip 
5 - Tôi muốn biết thông tin về phần cứng của máy, tôi phải làm thế nào?
Để biết thông tin về CPU hãy gõ:
cat /proc/cpuinfo
Để biết thông tin về bộ nhớ hãy gõ:
free -m
Để biết thông tin về ổ cứng hãy gõ:
sudo fdisk -l
Để biết thông tin về dung lượng đã dùng của ổ cứng hãy gõ:
df -h
Để biết thông tin về các card PCI hãy gõ:
lspci
Để biết thông tin về dung lượng các tập tin sử dụng hãy gõ:
du
Để biết thông tin về các công việc đang chạy hãy gõ:
 lsdev
Để biết thông tin về các ổ USB hãy gõ:
lsusb
Để biết thông tin phần cứng RAM, hãy gõ:
sudo dmidecode --type 17
6 - Tìm kiếm file có chứa một xâu chỉ định
Để tìm kiếm file có chứa một xâu chỉ đinh, bạn gõ:
grep -r "string" /path
7 - Tìm kiếm các file có dung lượng lớn:
Để tìm kiếm các file có dung lượng lớn trên hệ thống, ta có thể dùng lệnh sau:
find /đường_dẫn -size +dung_lượng_tối_thiểu -size -dung_lượng_tối_đa
8 - Tôi muốn xem dịch vụ nào đang chiếm port nào trong hệ thống:
Bạn sử dụng lênh:
lsof -Pnl +M -i4 : dành cho các địa chỉ IPv4.
lsof -Pnl +M  -i6: dành cho các địa chỉ IPv6
9 - Tôi gõ lệnh cat /đường_dẫn/file | grep "text" thì bị lỗi "Binary file (standard input) matches"
Bạn thử lại với lệnh: cat /đường_dẫn/file | grep "text" --text
10 - Tôi muốn chạy lệnh netstat ở chế độ thời gian thực, tôi phải làm như nào?
Trong linux có lệnh watch để chạy một lệnh nào đó lặp lại trong một khoảng thời gian nào đó. Bạn có thể tận dụng lệnh này để làm việc này. Mẫu lệnh có dạng:

watch -n 30 "netstat -ntu | awk '{print \$5}' | cut -d: -f1 | sort | uniq -c | sort -n"
 
Bạn gõ lệnh man hoặc help để biết thêm chi tiết cách sử dụng của lệnh watch 
11 - Tôi muốn tìm kiếm thông tin một process thông qua process Id:
Bạn chạy lệnh sau:
ps -p PID
12 - Tôi muốn xem trong hệ thống đang có những user nào
Để xem danh sách các user đang có trong hệ thống, bạn chạy lệnh sau:
cat /etc/passwd

02 tháng 4, 2012

Làm thế nào để độ cao của bảng đạt 100% kích thước cửa sổ

Đây là một vấn đề gặp khá phổ biến đối với người làm HTML. Độ cao của bảng không mở rộng 100% như mong muốn ngay cả khi ta đã thiết lập style của bảng như sau:
Thực tế với đoạn code trên khi xem trên trình duyệt, bảng khong hề phủ đầy 100% kích thước của màn hình trình duyệt như mong muốn.
Vậy tại sao vấn đề này xảy ra:
  • Khi thiết lập height của table là 100%, thì table sẽ phủ đầy 100% diện tích có thể về chiều cao của đối tượng chứa nó. Nếuđói trượng chứa nó không chiếm 100% kích thước trình duyệt thì table cũng không thể làm thế.
Như vậy để giải quyết vấn đề này ta cần làm như sau:
  • Thiết lập cho đối tượng chứa table phải chiếm 100% diện tích trình duyệt.
Vậy thực tế nếu muốn table có chiều cao bằng chiều cao toàn bộ trình duyệt ta phải làm như sau:

.....

....

html, body {
      height: 100%;
}