Xem pass user trong linux

List user và file /etc/passwd trên Linux

Trên linux OS có những user nào? Trường hợp muốn xem danh sách user thì có thể confirm qua file /etc/passwd

1. Cách xem file /etc/passwd

Thông tin của user có thể confirm dựa trên file /etc/passwd. User name, password, user ID, group ID, comment (Tên thật hoặc số đt…) Home directory, Login shell sẽ được ghi lại.
Nội dung file /etc/passwd hình dung như sau:

[hogehoge@localhost ~]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
・・・
hogehoge:x:500:501:KAZMAX_ADMIN:/home/hogehoge:/bin/bash

hogehoge: là User name
x : 「 x 」tức là encrypted password. 「 x 」mang ý nghĩa là 1 shadow password
500: User ID
501: Group ID
KAZMAX_ADMIN: Comment (Tên thật, số đt), trường hợp không có comment thì sẽ không có gì
/home/hogehoge: Home directory (Folder home) của user
/bin/bash: login shell của user

** Note:
Nếu password được để trống thì có thể login vào không cần password. Hãy set password cho user. Ngược lại, từ file /etc/passwd nếu xoá đi phần 「 x 」của thông tin user thì sẽ trở thành trạng thái chưa thiết lập password, khi đó thì có thể login mà không cần password. (Nếu môi trường cho phép login mà không cần password)

2. /etc/passwd và /etc/shadow

Trong bản cập nhật mới nhất thì hầu hết「 x 」được ghi lại ở vị trí password
Trước đó, password sẽ được mã hoá và ghi lại ở file /etc/passwd
General user có thể tham khảo File /etc/paswd và cũng có thể có khả năng phân tích được password đã bị mã hoá. Vì thế, nếu thiết lập sao cho general user không thể read được file /etc/passwd thì user sẽ không thể login được nữa.
Do đó, có thể sử dụng shadow password, trong file /etc/passwd chỉ lưu password dạng 「 x 」. Thay vào đó, trong file /etc/shadow sẽ chứa password đã được encrypted.
Ngoài ra, setting file /etc/shadow là root readonly.

[root@localhost ~]# ls -l /etc/shadow
-r——– 1 root root 1559 4月 14 00:25 /etc/shadow

3. Output list user từ file /etc/passwd

Có thể output list user từ file /etc/passwd như sau:

[hogehoge@localhost ~]$ cut -d: -f1 /etc/passwd
root
bin
daemon
adm
lp
・・・
** Note:

Có thể dùng command “alias” để đăng ký trước 1 số thực thi thì khá là tiện. Do ở UNIX cũng có 1 command tương tự đó là “listusers” nên để command execute ngay sau khi login vào OS thì, ở thư mục home directory có thể ghi thêm vào「.bashrc」như sau:

[hogehoge@localhost ~]$ cd
[hogehoge@localhost ~]$ vi .bashrc
alias listusers=”cut -d: -f1 /etc/passwd” ← thêm vào
・・・

[hogehoge@localhost ~]$ source .bashrc
[hogehoge@localhost ~]$ listusers
root
bin
daemon
adm
lp
・・・

** Note

Trong package glibc-common, có 1 lệnh được gọi là getent. Nếu run command đó với option「passwd」thì có thể output được danh sách user bao gồm account ldap

[hogehoge@localhost ~]$ getent passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

Tham khảo

http://kazmax.zpp.jp/linux_beginner/etc_passwd.html

Nếu bạn là người quản trị hệ thống Linux thường xuyên thì việc login/logout vào hệ thống là điều mặc định hiển nhiên. Trên màn hình đăng nhập, Linux yêu cầu bạn nhập username/password, nếu bạn nhập chính xác thì bạn đăng nhập thành công vào hệ thống. Vậy điều gì đã xảy ra khi bạn nhập username/password, Linux xử lý dữ liệu đó như thế nào? mật khẩu người dùng lưu ở đâu? cơ chế xác thực như thế nào?

Trong bài viết này, tôi tập trung vào tìm hiểu cách linux lưu trữ mật khẩu người dùng.

Trong Linux, file /etc/passwd là file lưu thông tin user của hệ thống, khi bạn tạo một user mới thì linux sẽ add thêm 1 bản ghi mới vào file này. Bạn dùng lệnh để show quyền truy cập file này thì thấy file này có 1 đặc điểm là tất cả người dùng trong hệ thống đều có thể đọc được (‘r’).

[root@localhost ~]# ll /etc/passwd

-rw-r--r-- 1 root root 1373 Apr  1 13:50 /etc/passwd

Điều này khá nhạy cảm vì thông tin user sẽ bị phơi bày trước bất kỳ user nào trong hệ thống. Tuy nhiên thuộc tính ‘r’ là cần thiết vì một số ứng dụng và tool hệ thống cần đọc file này thì mới chạy chính xác. Giả sử, tôi thay đổi quyền truy cập file này để chỉ có ‘root’ mới có quyền đọc.

[root@localhost ~]# chmod 600 /etc/passwd

[root@localhost ~]# ll /etc/passwd

-rw------- 1 root root 1373 Apr  1 13:50 /etc/passwd

Bây giờ, điều gì sẽ xảy ra khi tôi chuyển sang một user thường có sẵn trên hệ thống:

root@localhost ~]# su - mario

id: cannot findname foruser ID 500

id: cannot findname foruser ID 500

[I have no name!@localhost ~]$

Oh, tôi không thể thay đổi chuyển sang tài khoản có tên là mario, bới vì nó sẽ không đọc được file /etc/passwd nên không thể lấy thông tin username, home directory..của mario được lưu trữ trong file /etc/passwd.
Nếu để password lưu trữ trong /etc/passwd thì cũng rất nguy hiểm, mặc dù có thể mã hóa mật khẩu bằng 1 thuật toán băm(Vì tất cả user trong hệ thống đều đọc được).

Vì vậy, cần lưu trữ password người dùng trong 1 file mà chỉ ‘root’ mới đọc được. Giải pháp mà Linux đưa ra là bổ xung 1 file tên là /etc/shadow để lưu trữ mật khẩu người dùng. File /etc/shadow này chỉ truy cập được bởi ‘root’.

[root@localhost ~]# ll /etc/shadow

-r-------- 1 root root 897 Apr  1 13:50 /etc/shadow

Bây giờ, thử xem nội dung file /etc/shadow

Xem pass user trong linux

[root@localhost ~]# cat /etc/shadow

mario:$1$0XJ4dcSP$wpBqBzQSmIppMPEjeYP8K/:16161:0:99999:7:::

  1. 1. Trường đầu tiên, đó chính là username mario

2. Trường thứ 2 đó là trường password đã được mã hóa $1$0XJ4dcSP$wpBqBzQSmIppMPEjeYP8K/. Đây chính xác là trường tôi cần quan tâm và cần khai thác ở bài post này

Nội dung password đã được mã hóa $1$0XJ4dcSP$wpBqBzQSmIppMPEjeYP8K/ có ý nghĩa gì?

- Trường đầu tiên, cho biết thuật toán sử dụng để băm(trong ví dụ này là 1 – MD5 hashing algorithm)

 $1 = MD5 hashing algorithm.

 $2 = Blowfish Algorithm is in use.

 $2a = eksblowfish Algorithm

 $5 = SHA-256 Algorithm

 $6 = SHA-512 Algorithm

- Trường thứ 2 là một chuỗi dữ liệu ngẫu nhiên(random data hay còn gọi là salt) được sinh ra để kết hợp với mật khẩu người dùng(user password), để tăng sức mạnh băm(trong ví dụ này là 0XJ4dcSP)

- Trường thứ 3 là giá trị băm của salt + user password(trong ví dụ này là wpBqBzQSmIppMPEjeYP8K/)

Khi bạn login vào hệ thống, bạn nhập user/password. Hệ thống sẽ sử dụng giá trị salt của user + password mà bạn nhập vào để tạo ra 1 chuỗi mã hóa. Nếu chuỗi mã hóa này trùng với chuỗi mã hóa trong file /etc/shadow thì user login thành công.

Nguồn http://securitydaily.net/