Linux Căn Bản – Bài 4: Lấy mật khẩu Shiba2, lệnh file, whoami, su và operators >, >>

Chào mừng các bạn đã trở lại với series Linux Căn Bản, mình là Vincent Nguyễn.

Hôm nay chúng ta sẽ cùng nhau giải thử thách ở task 11 để lấy mật khẩu cho account shiba2 cũng như học thêm về các lệnh như file, whoami và su và các operators như “>” và “>>” nhé.


1/ Lấy mật khẩu Shiba2 (Task 11)

Yêu cầu của task 11 như sau:

” Now that you’ve learned basic file operations, you can solve the first challenge! This challenge is pretty simple, create a file called noot.txt.

Once you’re done run the binary and you’ll be given the password for the user shiba2!

Note: the name of the binary is shiba1, as shown in the title”

Có nghĩa là task 11 yêu cầu bạn tạo một file tên là noot.txt. Sau khi tạo xong file, chúng ta sẽ chạy (thực thi) một file binary có tên là shiba1 để lấy mật khẩu đăng nhập shiba2

Vận dụng những gì chúng ta đã học từ những tasks trước, chúng ta sẽ vượt qua thử thách này như sau.

B1: Tạo file noot.txt

touch noot.txt

B2: Kiểm tra xem file noot.txt đã được tạo ra chưa, cũng như kiểm tra để biết file binary shiba1 có nằm trong directory hiện tại hay không bằng lệnh sau:

ls -la
H1

Chúng ta thấy file noot.txt đã được tạo và có một file được hightlight đỏ tên shiba1, có thể đó là file binary đã được đề cập. Để kiểm tra xem shiba1 là loại file gì chúng ta sẽ dùng lệnh file.

Bạn nào chưa biết lệnh file có thể sử dụng lệnh bên dưới để nghiên cứu cách sử dụng nhé.

man file 
H2: Cách sử dụng lệnh file

Khi dùng lệnh file với flag -i, các bạn sẽ có thể kiểm tra được dạng file (file type)

file -i shiba1
H3

Các bạn có thể thấy là lệnh file với flag -i cho ta biết shiba1 là một application với character set/dạng ký tự (charset) là binary. Đến đây chúng ta có thể xác định shiba1 chính là file chúng ta cần phải chạy.

B3: Chạy file shiba1 bằng lệnh

./shiba1

Password cho shiba2 sẽ hiện ra (mình không công bố mật khẩu để các bạn có thể tự luyện tập nhé).

Lưu ý với lệnh file

Khi sử dụng lệnh file, bạn phải nhìn toàn bộ kết quả chứ không phải chỉ nhìn vào giá trị charset để ra quyết định xem liệu đây có phải là file mình cần chạy hay không. Ví dụ

H4

Các bạn có thể thấy, khi dùng lệnh file -i với file trống noot.txt vừa tạo, chúng ta sẽ có giá trị ở giữa là inode/x-empty và charset là binary. Nhưng khi chúng ta thêm dòng chữ “hello world” vào file noot.txt và dùng lệnh file -i kiểm tra lại lần nữa, chúng ta sẽ thấy kết quả đã thay đổi với giá trị thứ 2 là text/plain (ký tự bình thường) và charset ở dạng us-ascii (tìm hiểu thêm về ascii tại đây).

Lý do theo mình tìm hiểu là do những ký tự được gọi là NUL. Ký tự NUL không thể đọc bằng mắt thường mà chỉ có hệ thống máy tính mới thấy được. Ký tự NUL có giá trị binary bằng 0 và được dùng để đánh dấu vị trí kết thúc của những chuỗi ký tự (character strings).

Trong một file trống không có ký tự bình thường nào, sẽ chỉ có ký tự NUL mà thôi, do đó, khi dùng lệnh file để check, lệnh file sẽ nhầm tưởng file text là một file binary do ký tự NUL được hiển thị dưới dạng binary. Khi bạn thêm nội dung vào file, lúc này trong file sẽ có cả ký tự thường và ký tự NUL, lệnh file sẽ bỏ qua ký tự NUL và dùng những ký tự mà bạn đã thêm vào để xác định dạng file. Do đó, bạn sẽ thấy giá trị thứ 2 và 3 đã thay đổi như ảnh bên trên.

Nên nếu không kiểm tra cả 3 giá trị được đưa ra, chúng ta sẽ nhầm tưởng rằng đây là file binary cần chạy.

Một lưu ý khác, đó là nếu file được viết bằng các ngôn ngữ scripting ví dụ như Python hoặc file viết bằng C trước khi compile, khi bạn dùng lệnh file -i, sẽ có kết quả như hình bên dưới

H5

Ví dụ trong hình mình có 2 file simple.py và simple.c được mình code đơn giản để in ra dòng “Hello World”. Khi dùng lệnh file -i, bạn sẽ thấy ở giá trị thứ 2, sẽ hiện ra ngôn ngữ lập trình đã được dùng trong file ví dụ python hoặc c chứ không phải là application như hình H3 bên trên.

Tổng kết lại, để xác định file type khi dùng lệnh file -i các bạn nên căn cứ tất cả các giá trị được hiện ra như:

  • Tên file + extension ví dụ (.txt, .c, .php, .python, v.v.)
  • File là application hay text, nếu là text thì là plain hay được viết bằng ngôn ngữ lập trình nào
  • Giá trị charset

2/ Đăng nhập account shiba2 (Task 12)

Sau khi có được mật khẩu của account shiba2, chúng ta sẽ đăng nhập vào account shiba2 với lệnh sau

su shiba2
H6

Sau khi nhập câu lệnh su shiba2, hệ thống sẽ yêu cầu mình nhập password của shiba2 để đăng nhập tài khoản, bạn copy/paste lại mật khẩu đã tìm được ở task 11, sau đó enter. Lúc này bạn để ý sẽ thấy, dòng hiển thị màu xanh lá ở đầu câu lệnh đã chuyển từ shiba1 thành shiba2. Để chắc chắn, chúng ta dùng lệnh

whoami

để kiểm tra tên account mà chúng ta đang đăng nhập, và đó đúng là shiba2. Bạn nào muốn tìm hiểu thêm về lệnh whoami, bạn có thể tự tra cứu cách sử dụng bằng lệnh

man whoami 

Về lệnh su

Khi sử dụng lệnh

man su

bạn sẽ đọc được dòng mô tả như sau:

“The su command is used to become another user during a login session. Invoked without a username, su defaults to becoming the superuser.

Nghĩa là lệnh su dùng để đăng nhập vào tài khoản người dùng khác trong cùng một phiên login (bạn không cần phải logout rồi login lại để vào tài khoản khác). Khi lệnh su được dùng mà không có tên username đi kèm, hệ thống sẽ hiểu là bạn muốn đăng nhập tài khoản superuser/root (tài khoản có quyền quản trị cao nhất).

Tuy nhiên, theo mình tìm hiểu thì không phải lúc nào chúng ta cũng có thể đăng nhập root với lệnh su. Có nhiều lúc phải dùng lệnh sudo su.

Ở task 35 chúng ta sẽ học thêm một lệnh quan trọng để đăng nhập root nữa đó là lệnh sudo, lúc đó, mình sẽ phân tích kỹ hơn sự khác biệt giữa sudo và su.

Về câu hỏi ở task 12

How do you specify which shell is used when you login?

Các bạn có thể tìm được đáp án với command

man su

3/ Operators (phần 1)

Kiến thức trọng tâm mà account Shiba2 hướng tới là operators. Có nhiều loại operators khác nhau, nhưng chúng ta sẽ chỉ tập trung học “>, >>, &, &&, |, ||, ;, và $” trong series Linux Căn Bản mà thôi. Vậy Linux operators là gì?

Linux operators là một cách thức cho phép người dùng có thể tùy ý quyết định xem câu lệnh nên được thực thi như thế nào hay dữ liệu đầu vào (input) và dữ liệu đầu ra (output) được xuất hay chuyển hướng như thế nào. Khái niệm nghe có vẻ phức tạp nhưng khi đi vào ví dụ các bạn sẽ hiểu ngay thôi. Hôm nay chúng ta sẽ học 2 operators đầu tiên là “> và >>”.

3a/ Operator “>” (Task 14)

Operator “>” có được sử dụng cho mục đích chuyển hướng kết quả xuất ra (output redirection). Các bạn hãy nhìn vào ví dụ dưới đây:

H7

Ở ví dụ bên trên, mình đã dùng lệnh echo để in ra “Hello World”. Như bạn thấy, nếu không dùng operator “>”, echo sẽ in ra nội dung “Hello World” ở dòng tiếp theo. Khi sử dụng operator “>”, nội dung cần in không được xuất ra màn hình nữa mà được chuyển vào file text-file.txt. Các bạn dùng lệnh cat để kiểm tra nội dung file sẽ thấy nội dung cần in “Hello World” ở bên trong.

Tiếp theo, chúng ta hãy nhìn vào hình bên dưới

H8

Một đặc tính khác của operator “>” là nó sẽ ghi đè (overwrite) lên dữ liệu đang được lưu giữ trong file. Hay có thể nói nó sẽ xóa nội dung đang có trong file và ghi nội dung mới vào như các bạn có thể thấy trong hình bên trên. Thay vì nội dung trong file text-file.txt phải là

Hello World
Tuhocnetworksecurity

Thì nay chỉ còn là

Tuhocnetworksecurity

Nội dung trước đó đã bị ghi đè lên rồi.

Với operator “>” bạn không chỉ có thể tạo file mới với nội dung mong muốn mà còn có thể overwrite dữ liệu trong file đã có sẵn nữa.

Các bạn tự trả lời câu hỏi của task 14 nhé

How would you output twenty to a file called test?

3b/ Operator “>>” (Task 15)

Operator “>>” có chức năng tương tự operator “>”. Điểm khác nhau duy nhất giữa “>>” và “>” đó là “>>” thay vì overwrite dữ liệu, nó sẽ viết tiếp dữ liệu phía dưới dữ liệu đã có. Ví dụ

H9

Operator “>>” có thể được dùng để thêm dữ liệu vào file đã có sẵn thay vì overwrite toàn bộ nội dung trong file đó và viết lại nội dung mới như operator “>”. Operator “>>” cũng có thể được dùng để tạo file với nội dung mong muốn


Cám ơn các bạn đã theo dõi, hẹn gặp lại trong bài tiếp theo vào tối thứ 5 nhé.

Vincent Nguyễn

Source:

https://unix.stackexchange.com/questions/19907/what-makes-grep-consider-a-file-to-be-binary
https://askubuntu.com/questions/168101/why-cant-i-access-super-user-mode-with-su

Leave a comment