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à...

Hiển thị các bài đăng có nhãn security. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn security. Hiển thị tất cả bài đăng

20 tháng 6, 2014

Cấu trúc tập tin /etc/shadows trong Linux

Tập tin /etc/shadow là một phương thức khác của Linux để lưu thông tin mật khẩu đăng nhập của người dùng hệ thống.
Thông tin được lưu tại đây sẽ an toàn hơn so với cách lưu trong tập tin /etc/passwd do tập tin này chỉ có tài khoản root hoặc có quyền sudo mới có thể truy cập.
Dưới đây là định dạng mỗi dòng trong tập tin /etc/shadow:
hduser:$6$nRDJ.w8b$wqH4G72KtYbUs:16038:0:99999:7:::
  •  Các trường trong /etc/shadow được phân cách với nhau bằng dấu ":"
  • Trường đầu tiên là username.
  • Trường thứ 2 là mật khẩu đã được mã hóa; nó có thể bắt đầu bằng ký tự $, khi đó ký tự tiếp theo sẽ là thuật toán mã hóa áp dụng cho mật khẩu.
    • $1 = MD5 hashing algorithm. 
    • $2 = Blowfish Algorithm is in use. 
    • $2a = eksblowfish Algorithm
    •  $5 = SHA-256 Algorithm 
    •  $6 = SHA-512 Algorithm
  • Trường thứ 3 là khoảng thời gian (tính bằng ngày) tính từ 1/1/1970  cho tới lần đổi mật khẩu gần nhất.
  • Trường thứ 4 là thời gian tối đa còn cho phép người dùng đổi mật khẩu, nếu là 0 tức là người dùng có thể đổi mật khẩu bất cứ khi nào, nếu là số khác 0, ví dụ 9, tức là người dùng còn 9 ngày nữa có thể đổi mật khẩu.
  • Trường thứ 5 là thời gian hiệu lực tối đa của mật khẩu, nếu là 99999 có nghĩa là vô hạn.
  • Trường thứ 6 là khoảng thời gian trước khi mật khẩu hết hạn, hệ thống sẽ cảnh báo cho người dùng, ở đây là 7, tức là trước khi hết hạn 7 ngày, hệ thống sẽ cảnh báo.
  • Trường thứ 7 là khoảng thời gian mà tài khoản đã hết hạn đăng nhập, ví dụ nếu là 2 tức là người dùng đã hết hạn đăng nhập 2 ngày.
  • Trường thứ 8 là khoảng thời gian mà tài khoản đã hết hạn đăng nhập tính từ ngày 1/1/1970 (đơn vị tính là ngày)
Ngoài ra trong file /etc/shadow còn có thể có chứa một số ký tự đặc biệt để dùng vào một số mục đích riêng như sau:
  • Nếu trường password rỗng tức là người dùng không có mật khẩu đăng nhập.
  • Nếu trường password là "!" tức là đăng nhập bằng mật khẩu của người dùng bị chặn nhưng có thể đăng nhập bằng phương thức khác, ví dụ sử dụng ssh key.
  • Nếu trường password là "*LK*" hoặc "*" tức là tài khoản bị khóa, không thể đăng nhập bằng mật khẩu nhưng vẫn có thể đăng nhập bằng phương thức khác.

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