Cách truy cập vào hoạt động người dùng trên Linux

Nếu đang sử dụng một Linux server, bạn có thể sử dụng một số lệnh sau để kiểm tra hoạt động của người dùng - khi người dùng hệ thống đăng nhập và tần suất sử dụng, họ thuộc nhóm nào, dung lượng ổ đĩa họ đang tiêu thụ, họ đang chạy lệnh gì, chiếm bao nhiêu dung lượng ổ đĩa,...

Lệnh finger

Một lệnh tiện dụng để theo dõi hoạt động người dùng là finger. Lệnh này cho phép bạn xem ai đã đăng nhập hoặc chỉ tập trung vào thông tin hoạt động của một người dùng, xem lần cuối đăng nhập là khi nào, đăng nhập từ đâu, v.v. Trong ví dụ này, chúng ta sẽ theo dõi hoạt động của người dùng tên nemo.

$ finger nemo
 Login: nemo                             Name: Nemo Demo
 Directory: /home/nemo                   Shell: /bin/bash
 On since Fri Jun 19 12:58 (EDT) on pts/1 from 192.168.0.6
    7 minutes 47 seconds idle
 New mail received Wed Jun 17 18:31 2020 (EDT)
      Unread since Sat Jun 13 18:03 2020 (EDT)
 No Plan.

Chúng ta có thể thấy tên đầy đủ, thư mục chính và shell của nemo. Chúng ta cũng có thể thấy hoạt động đăng nhập và email gần đây nhất của nemo. Văn phòng, điện thoại văn phòng và điện thoại nhà chỉ xuất hiện nếu chúng được xác định trong tệp /etc/passwd với trường tên đầy đủ. Ví dụ:

nemo:x:1001:1001:Nemo Demo,11,540-222-2222,540-333-3333:/home/nemo:/bin/bash).

Output ở trên cũng chỉ ra rằng nemo không có "plan" nào cả, nhưng điều này chỉ có nghĩa người dùng này đã không tạo tệp .plan và đặt một số văn bản vào đó; không có gì khác thường.

Không có đối số, lệnh finger sẽ hiển thị danh sách các thông tin đăng nhập hiện tại theo định dạng hiển thị bên dưới. Bạn có thể thấy khi họ đăng nhập, địa chỉ IP họ đã dùng, terminal đang sử dụng (ví dụ: pts/1)

$ finger
 Login    Name                  Tty      Idle  Login Time   Office     Office Phone
 nemo     Nemo Demo             pts/1    1:24  Jun 19 12:58 (192.168.0.6)
 shs      Sandra Henry-Stocker  pts/0          Jun 19 12:57 (192.168.0.60

Lệnh w

Lệnh w cũng cung cấp một danh sách được định dạng độc đáo của người dùng hiện đang hoạt động bao gồm cả thời gian trống và lệnh nào họ chạy gần đây nhất. Nó cũng hiển thị thời gian hệ thống đã hoạt động ở dòng trên cùng và cung cấp mức trung bình tải để biết mức độ hoạt động của hệ thống. Trong trường hợp này (0,00 cho đến cuối phút 1, 5 và 15), hệ thống phần lớn sẽ là để không. 

$ w
  14:23:19 up 1 day, 20:24,  2 users,  load average: 0.00, 0.00, 0.00
 USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
 shs      pts/0    192.168.0.6      12:57    0.00s  0.14s  0.01s w
 nemo     pts/1    192.168.0.6      12:58    1:24m  0.03s  0.03s -bash

Lệnh id

Với lệnh id, bạn có thể xem số ID của người dùng và ID nhóm (ID của từng thành viên trong nhóm). Thông tin này được lấy từ các file /etc/passwd/etc/group. Không có đối số, lệnh id báo cáo thông tin cho tài khoản của bạn.

$ id
 uid=1000(shs) gid=1000(shs) groups=1000(shs),4(adm),11(admin),24(cdrom),27(sudo),30(dip),46(plugdev),118(lpadmin),128(sambashare),500(devops)
 $ id nemo
 uid=1001(nemo) gid=1001(nemo) groups=1001(nemo),16(fish)

Lệnh auth.log

Bạn có thể lấy thông tin từ file /var/log/auth.log bằng các lệnh như grep. Để hiển thị hoạt động đăng nhập gần đây nhất bằng dữ liệu auth.log, dùng một lệnh như sau:

$ grep "New session" /var/log/auth.log | awk '{print $1,$2,$3,$11}' | tail -5
 Jun 17 17:22:38 shs.
 Jun 17 17:58:43 gdm.
 Jun 17 18:09:58 shs.
 Jun 19 12:57:36 shs.

Lệnh last

Lệnh last là phương pháp tốt nhất để xem các lần đăng nhập gần đây của tất cả người dùng hoặc một cá nhân. Hãy nhớ rằng hoạt động gần đây nhất sẽ được hiển thị đầu tiên vì đây là thông tin mà hầu hết các quản trị viên quan tâm nhất.

$ last | head -5
 nemo     pts/1        192.168.0.6      Fri Jun 19 12:58   still logged in
 shs      pts/0        192.168.0.6      Fri Jun 19 12:57   still logged in
 shs      pts/0        192.168.0.6      Wed Jun 17 18:10 - 18:42  (00:32)
 reboot   system boot  5.4.0-37-generic Wed Jun 17 17:58   still running
 shs      pts/2        192.168.0.6      Wed Jun 17 17:22 - 17:57  (00:34)
 
 $ last nemo | head -5
 nemo     pts/1        192.168.0.6      Fri Jun 19 12:58 - 16:21  (03:22)
 nemo     pts/2        192.168.0.6      Sat Jun 13 17:49 - 19:05  (01:16)
 nemo     pts/1        192.168.0.6      Thu Jun  4 17:33 - 17:44  (00:10)
 nemo     pts/1        192.168.0.19     Mon May 11 19:04 - 19:57  (00:52)
 nemo     pts/1        192.168.0.19     Tue May  5 12:46 - 17:49  (05:02)

Lệnh du

Lệnh du sẽ báo cáo mỗi thư mục home directory của người dùng đang sử dụng bao nhiêu dung lượng nếu chạy riêng từng mục trong /home như thế này:

$ sudo du -sk /home/*
 289     /home/dorothy
 116     /home/dory
 88      /home/eel
 28      /home/gino
 28      /home/jadep
 12764   /home/nemo
 732     /home/shark
 418046  /home/shs
 108     /home/tadpole

Theo mặc định, kích thước được báo cáo theo đơn vị 1024 byte.

Lệnh ps và history

Đối với người dùng hiện đang đăng nhập, bạn luôn có thể sử dụng các lệnh như ps -ef | grep ^nemo để xem những lệnh và quy trình nào mà người dùng hiện đang chạy. Để xem các lệnh đã chạy trước đó, bạn có thể thử xem các file history của người dùng (ví dụ: .bash_history), nhưng lưu ý rằng người dùng có thể thiết lập tài khoản của mình để các lệnh nhất định không xuất hiện trong file history và họ cũng có thể chỉnh sửa các file này nếu muốn.

Đếm số đăng nhập

Nếu bạn muốn xem số lần mỗi người dùng của bạn đã đăng nhập kể từ khi file /var/log/wtmp chạy lần cuối, hãy sử dụng một lệnh như thế này:

$ for USER in `ls /home`
 > do
 >   cnt=`last $USER | grep ^$USER | wc -l`        # count logins
 >   echo $USER: $cnt                              # show login count
 > done

Output sẽ trông giống như thế này:

dorothy: 0
 dory: 0
 eel: 8
 gino: 0
 jadep: 102
 nemo: 39
 shark: 50
 shs: 105
 tadpole: 0

Nếu muốn biết thêm chi tiết, bạn có thể đặt một tập lệnh phức tạp hơn, có thể thêm một số thông tin bổ sung như chi tiết đăng nhập và định dạng.

#!/bin/bash
 
 sepline="===================="
 
 for USER in `ls /home`
 do
   len=`echo $USER | awk '{print length($0)}'`   # get length of username
   echo $USER
   sep="${sepline:1:$len}"                       # set separator
   echo $sep                                     # print separator
   cnt=`last $USER | grep ^$USER | wc -l`        # count logins
   echo logins: $cnt                             # show login count
   last $USER | grep ^$USER | head -5            # show most recent logins
   echo

Script ở trên đang giới hạn dữ liệu được hiển thị trong năm lần đăng nhập gần đây nhất, nhưng có thể dễ dàng thay đổi điều đó nếu muốn. Đây là cách dữ liệu cho một người dùng sẽ được định dạng:

shs === logins: 105 shs pts/0 192.168.0.6 Fri Jun 19 12:57 still logged in shs pts/0 192.168.0.6 Wed Jun 17 18:10 - 18:42 (00:32) shs pts/2 192.168.0.6 Wed Jun 17 17:22 - 17:57 (00:34)
 shs      pts/0        192.168.0.25     Wed Jun 17 17:20 - 17:57  (00:36)
 shs      pts/1        192.168.0.6      Wed Jun 17 15:19 - 17:57  (02:38)
Thứ Tư, 08/07/2020 08:17
31 👨 350
0 Bình luận
Sắp xếp theo