Làm cách nào để thêm dữ liệu kết nối nguồn hoặc mạng người dùng vào các mục lịch sử?


8

Tôi muốn sửa đổi cài đặt lịch sử cho tất cả người dùng trên các hệ thống mà tôi quản lý. Tôi muốn nó chứa thông tin từ thiết bị đầu cuối kết nối như từwho

sysadmin:/ # who
sysadmin  pts/0        Mar 26 07:11 (sysadmin.doofus.local)

Tôi hiện đang sửa đổi lịch sử của mình theo những cách sau. Tôi biết rằng nhiều trong số các cài đặt này đã được đề cập ở đây nhiều lần. Tuy nhiên, tôi đã lấy mã này từ " Công thức quản trị hệ thống Linux của: Juliet Kemp " từ lâu.

shopt -s histappend
PROMPT_COMMAND='history -n;history -a'
HISTSIZE=100000
HISTFILESIZE=100000
HISTTIMEFORMAT="%m/%d/%y %T  "

shopt -s histappend khắc phục sự cố khi bạn có nhiều thiết bị đầu cuối mở thông tin có thể bị mất.

PROMPT_COMMAND='history -n;history -a' mở rộng để cung cấp thêm thời gian thực vào lịch sử trên nhiều thiết bị đầu cuối.

HISTSIZE=100000 HISTFILESIZE=100000 kéo dài thời gian historyduy trì

HISTTIMEFORMAT="%m/%d/%y %T "mở đầu cho mỗi dòng lịch sử bằng dấu thời gian

Những gì bạn thường nhận được với history

835  ls
836  cd ..

historyKết quả hiện tại đã sửa đổi của tôi

5853  03/26/12 07:16:49  ls
5854  03/26/12 07:16:50  ll

Sự trở lại từ historytôi muốn xem

5853  03/26/12 07:16:49  sysadmin.doofus.local    ls
5854  03/26/12 07:16:50  sysadmin.doofus.local    ll

001  03/26/12 05:11:29  demo_user.doofus.local    cd
002  03/26/12 05:11:30  demo_user.doofus.local    ll

Tôi không "kết hôn" để nhìn thấy DNStên. Tôi chỉ muốn nó ở đó nếu nó kéo nó từ whohoặc một vị trí khác mà không cần phải thực hiện tra cứu hoặc truy vấn dưới bất kỳ hình thức nào. Tôi sẽ rất vui với địa chỉ IP.

002  03/26/12 05:11:30  192.168.0.2    ll

Tại sao? Tôi quản lý một số hệ thống trong đó một userid mà một số người dùng cùng nhóm chia sẻ để thực hiện các nhiệm vụ hàng ngày của họ. Điều này sẽ cho phép tôi tương quan vị trí thực tế & người dùng thực tế của họ trong tổ chức với những gì họ đã làm trong lịch sử.

Tôi biết rằng điều này là không tối ưu và muốn thay đổi nó, nhưng, khi bạn đang ở trên một con tàu có kích thước của một tàu du lịch, bạn không cố gắng thực hiện lần lượt kẹp tóc. (Lưu ý: khi bạn làm hành khách cố gắng ném bạn quá mức)

Dù sao, cho đến khi tôi có thể di chuyển chúng sang một giải pháp tốt hơn, tôi muốn có khả năng theo dõi này.

Ngoài ra, nếu bạn có bất kỳ đề xuất nào về những gì tôi hiện đang sử dụng cho các historysửa đổi của mình, tôi rất muốn nghe nó.

Cảm ơn,

Chỉnh sửa: 1

Tôi không muốn chạy các chương trình khác hoặc phải định cấu hình bất cứ điều gì bổ sung "trong lý do."

Tôi muốn thêm 0chi phí, nếu tôi phải thêm nó cần phải nhỏ.

Tôi tin tưởng người dùng của mình, tôi chỉ muốn (nếu có chuyện gì đó xảy ra) để xem ai trong số 10 người dùng đã đăng nhập vào hệ thống có cùng người dùng: mật khẩu đã làm điều đó. Hoặc, nó có thể không phải là người dùng mà nó có thể bị lãng quên crontrên một hệ thống thực hiện kết nối với tư cách là người dùng để làm gì đó. Hoặc một ứng dụng Ex: BMC Control-Mkết nối sshvà chạy các tác vụ. Nó không phải là quá nhiều về việc tìm kiếm "người dùng xấu" như có thể theo dõi nó với nỗ lực tối thiểu.

Chỉnh sửa 2:

Các hệ thống đang chạy SLES và RHEL


1
Âm thanh như kế toán quá trình có thể hữu ích. Lịch sử shell không bao giờ được thiết kế để ghi nhật ký và nếu bạn muốn sử dụng nó, bạn phải tin tưởng tất cả người dùng của mình. Xem câu hỏi liên quan về hoạt động giám sát và một câu trả lời liên quan .
jw013

@ jw013 Cảm ơn bạn đã bình luận. Tuy nhiên, điều đó phải được cấu hình và quản lý cộng với việc tôi đã cung cấp thông tin mà tôi đã đọc, tốt nhất nên loại trừ các thư mục như /proc /dev/homethư mục người dùng . Điều này thêm chi phí. Trong khi đó historyđã được ghi lại và thông tin kết nối của họ được biết đến với hệ thống kết nối IP, v.v ... Thông tin này nếu không có sẵn "tĩnh" có thể được đặt theo cách đó hoặc được lưu trữ trong một biến hoặc tệp và nhập vào historybản ghi và nhấn hiệu suất sẽ rất nhỏ hoặc 0.
2bc

Nếu đây là trên Linux, hãy xem xét sử dụng auditd. Tôi không chắc nếu nhật ký của nó sẽ cung cấp cho bạn đủ thông tin. Khó khăn của những gì bạn muốn là chính xác lý do tại sao các tài khoản được chia sẻ quá nhiều.
Gilles 'SO- ngừng trở nên xấu xa'

Đó là trên Linux, tôi sẽ chỉnh sửa câu hỏi của mình để làm rõ điều đó. auditdgiống như inotifybạn phải nói với nó những gì cần theo dõi để thay đổi. Các tệp, thư mục riêng lẻ, v.v. Tôi không muốn đi đến mức cấu hình đó. Thực tế (tôi làm) nhưng về cơ bản là không quan tâm lắm. Tôi phải puppetxử lý những thứ đó. auditdđi kèm với tải bổ sung và thời gian để thiết lập là tốt. Nếu một tài khoản đang sửa đổi một cái gì đó tôi vẫn muốn nhìn lại lịch sử và xem ai hoặc cái gì đang đăng nhập và thử.
2bc

2
hm, vì PROMPT_COMMAND=chỉ chạy các lệnh bình thường trước dấu nhắc tiếp theo, bạn không thể viết hàm gọi sed / awk hoạt động trên dòng cuối cùng của tệp lịch sử để thêm thông tin. sau đó gọi hàm đó vào PROMPT_COMMAND=để nối thêm dữ liệu? Nó sẽ là hackish nhưng nên làm công việc.
llua

Câu trả lời:


1

Từ đề xuất của llua, chúng ta có thể làm việc nhiều hơn một chút với lịch sử. Nối một dòng vào tệp BASH RC trên toàn hệ thống, có lẽ là /etc/bash.bashrc.

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Thiết lập ghi nhật ký cho "local6" trong bộ ghi hệ thống của bạn. Có lẽ một cái gì đó như thế này:

local6.*    /var/log/commands.log

Khởi động lại hệ thống logger. Có lẽ thiết lập xoay vòng tệp nhật ký. Đăng xuất; đăng nhập; và, lịch sử hiện được ghi vào /var/log/commands.log theo định dạng như sau:

logger tên máy chủ thời gian ngày: tên người dùng [aud_pid]: lệnh [return_val]

Điều này có thể được điều chỉnh thêm để hương vị.


1

Đoạn văn sau đây mô tả ý tưởng nói chung và lỗi thời trong một số khía cạnh, nhưng bạn có thể sử dụng sau đó sử dụng mới nhất từ này trang. Cho phép sử dụng một tệp lớn ~ / .bash_history.archive (tách biệt với HISTFILE = ~ / .bash_history). Và sau đó khi thoát khỏi mỗi phiên bash cho phép nối các dòng lịch sử mới vào nó.

Vấn đề đầu tiên với cách tiếp cận này là: làm thế nào để tạo bash để gọi tập lệnh này trên mỗi lần thoát? Chắc chắn nếu bạn thoát nó bằng cách gõ 'exit' thì bạn có thể bí danh chức năng 'exit' nhưng tôi sử dụng phím tắt Ctrl-D cho điều đó và tôi không thể tìm ra cách nào để gán lại nó cho một cái gì đó nhưng không được tích hợp chức năng thoát.

Vì vậy, nỗ lực đầu tiên là: cấm Ctrl-D

export IGNOREEOF=10

và xác định kết hợp Ctrl-X kép để gọi chức năng thoát.

Nhưng cách tiếp cận đúng là sử dụng thoát tramp của bash, đây là một giải pháp hoàn hảo vì nó được gọi bất kể cách bạn thoát bash: Ctrl-D, exit, đóng cửa sổ xterm.

trap 'archive_history' EXIT

Bước tiếp theo là xác định một dòng bắt đầu trong bash_history của chúng tôi để chúng tôi chỉ có thể lưu các dòng mới và đảm bảo rằng chúng tôi sẽ thêm vào một tệp lịch sử.

export CURBASHSTART=`grep -v "^[ \t]*$" $HISTFILE | wc -l | awk '{print $1}'` CURBASHDATE=`date`

shopt -s cmdhist histappend

Đó là tất cả những gì chúng ta cần khi bắt đầu bash - bây giờ chúng ta biết lịch sử hiện tại (lịch sử) mới bắt đầu. Để lưu lịch sử, hãy thêm phần tiếp theo vào ~ / .bashrc của bạn.

archive_history()
{
    HISTORYOLD=${HISTFILE}.archive
    CURTIME=`date`
    CURTTY=`tty`
    if  [ x$HISTDUMPPED = x ]; then
      echo "#-${HOSTNAME}-- ${CURBASHDATE} - ${CURTIME} ($CURTTY) ----" >>   $HISTORYOLD

      history $(($HISTCMD-${CURBASHSTART-0})) | sed -e 's/^[ ]*[0-9][0-9]* [ ]*//g'  >> $HISTORYOLD
      export HISTDUMPPED=1
    fi
}

exit ()
{
   archive_history
   builtin exit

}

Tệp ~ / .inputrc phải chứa các dòng tiếp theo để xác định lại lối tắt thoát sang Ctrl-x x. Trong lần thử đầu tiên, bạn có thể cảm thấy rằng đó là lối tắt khủng khiếp, nhưng sau đó bạn đã quen với nó - tin tôi đi.

$if Bash
# to exit through calling exit function which will archive the history
"\C-x\C-x": "exit\n"
# to dump history we have so far
"\C-x\C-w": "archive_history\n"

$endif

Ngoài ra nếu phiên bash của bạn là phiên đăng nhập và bạn thoát bằng cách gọi ' logout', thì bạn có thể thêm dòng tiếp theo vào~/.bash_logout

archive_history

Sau khi hoàn thành tất cả các hành động được đề cập, bạn có thể tìm thấy ~/.bash_history.archivetệp của mình chứa các phần như thế này

#-belka-- Sun Oct 12 21:52:13 EDT 2003 - Sun Oct 12 21:53:25 EDT 2003 (/dev/pts/13) ----
exit
aptitude
exit
#-washoe-- Sun Oct 12 18:03:16 EDT 2003 - Sun Oct 12 23:06:48 EDT 2003 (/dev/pts/3) ----

exit
cd progr/letters/resume/
e resume.tex

mà nói chung có thể được đọc như tập tin lịch sử thông thường nếu bạn muốn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.