建站服務器
一、為什么?
在中小型企業(yè),公司不同運維人員基本都是以root 賬戶進行服務器的登陸管理,缺少了賬戶權限審計制度。不出問題還好,出了問題,就很難找出源頭。
這里介紹下,如何利用編譯bash 使不同的客戶端在使用root 登陸服務器使,記錄各自的操作,并且可以在結合elk 日志分析系統(tǒng),來收集登陸操作日志
二、環(huán)境
服務器:centos 6.5、development tools、使用密鑰認證,selinux 關閉。
客戶端:生成密鑰對,用于登錄服務器 (2臺)
三、搭建部署(服務器操作 192.168.30.72)
3.1 下載編譯bash
[root@open1~]#wgethttp://ftp.gnu.org/gnu/bash/bash-4.1.tar.gz[root@open1~]#tarxvfbash-4.1.tar.gz[root@open1~]#cdbash-4.13.2先修改下 config-top.c文件,大概94行、104行,由于c 語言中 注釋是// ,所以不要刪除錯了。修改如下:
[root@open1bash-4.1]#vimconfig-top.c#definessh_source_bashrc#definesyslog_history3.3 修改下bashhist.c 文件,讓終端上的命令記錄到系統(tǒng)messages 中,并且以指定的格式。并傳入獲得的變量。修改后的內容如下:
[root@open1bash-4.1]#vimbashhist.c#...省略部分段落voidbash_syslog_history(line)constchar*line;{chartrunc[syslog_maxlen];constchar*p;p=getenv(name_of_key);if(strlen(line)<syslog_maxlen)syslog(syslog_facility|syslog_level,history:pid=%dppid=%dsid=%duser=%suser=%scmd=%s,getpid(),getppid(),getsid(getpid()),current_user.user_name,p,line);else{strncpy(trunc,line,syslog_maxlen);trunc[syslog_maxlen-1]=\\\'\\\';syslog(syslog_facility|syslog_level,history(truncated):pid=%dppid=%dsid=%duser=%suser=%scmd=%s,getpid(),getppid(),getsid(getpid()),current_user.user_name,p,trunc);}}
3.4 配置安裝路徑,編譯安裝,編譯到/usr/local/目錄下。
[root@open1bash-4.1]#./configure--prefix=/usr/local/bash_new[root@open1bash-4.1]#make&&makeinstall...iftestbash=gettext-tools;then\\\\/bin/sh/root/bash-4.1/./support/mkinstalldirs/usr/local/bash_new/share/gettext/po;\\\\forfileinmakefile.in.inremove-potcdate.sinquot.sedboldquot.seden@quot.headeren@boldquot.headerinsert-header.sinrules-quotmakevars.template;do\\\\/usr/bin/install-c-m644./$file\\\\/usr/local/bash_new/share/gettext/po/$file;\\\\done;\\\\forfileinmakevars;do\\\\rm-f/usr/local/bash_new/share/gettext/po/$file;\\\\done;\\\\else\\\\:;\\\\fimake[1]:leavingdirectory`/root/bash-4.1/po\\\'
編譯完成后,將新的bash 追加到 /etc/shells 中,并修改root用戶的登陸shell 環(huán)境為新編譯的shell。如下
[root@open1bash-4.1]#echo/usr/local/bash_new/bin/bash>>/etc/shells[root@open1bash-4.1]#cat/etc/shells/bin/sh/bin/bash/sbin/nologin/bin/dash/usr/local/bash_new/bin/bash
[root@open1bash-4.1]#vim/etc/passwdroot:x:0:0:root:/root:/usr/local/bash_new/bin/bash注銷當前root用戶,重新登陸后,查看/var/log/messages,如下就可以看到記錄了操作命令
四、ssh客戶端生成密鑰部分
4.1 在client1上(192.168.30.99)操作,用戶zhangsan
view code
-t 加密算法
-c 注釋 (加上這個也是為了最后進行對服務器訪問人員進行辨別的一個關鍵點)
將公鑰上傳到服務器上的.ssh/authorized_keys 文件中。ssh-copy-id 命令會自動在服務器上創(chuàng)建.ssh/authorized_keys文件,即使該目錄不存在,并自動賦予600權限。
[root@rsyslog~]#ssh-copy-id-i/root/.ssh/id_rsa.pubroot@192.168.30.72root@192.168.30.72\\\'stryloggingintothemachine,withssh\\\'root@192.168.30.72\\\',andcheckin:.ssh/authorized_keystomakesurewehaven\\\'taddedextrakeysthatyouweren\\\'texpecting.
4.3 client 2(192.168.30.71) 上同樣的操作,用戶lisi
view code
上傳公鑰到服務器上
[root@swift3~]#ssh-copy-id-i/root/.ssh/id_rsa.pubroot@192.168.30.72theauthenticityofhost\\\'192.168.30.72(192.168.30.72)\\\'can\\\'tbeestablished.rsakeyfingerprintis8f:a7:1b:8d:e4:92:ad:ae:ea:1b:fb:67:0b:0b:7c:ac.areyousureyouwanttocontinueconnecting(yes/no)?yeswarning:permanentlyadded\\\'192.168.30.72\\\'(rsa)tothelistofknownhosts.root@192.168.30.72\\\'stryloggingintothemachine,withssh\\\'root@192.168.30.72\\\',andcheckin:.ssh/authorized_keystomakesurewehaven\\\'taddedextrakeysthatyouweren\\\'texpecting.
4.4 現(xiàn)在去服務器上驗證下該文件。
view code
現(xiàn)在上面兩個客戶端已經(jīng)可以免密鑰登陸了,現(xiàn)在去服務器上配置,并創(chuàng)建腳本。
五、配置服務器
5.1 在log目錄下創(chuàng)建一個 keys 文件,用于登陸時存進去公鑰,之后對其進行取出判斷的
[root@open1~]#touch/var/log/keys創(chuàng)建檢測腳本,內容如下:
view code
5.2 配置 profile,在文件末尾添加一行內容,如下:
[root@open1~]#echotest-f/etc/checkuser.sh&&./etc/checkuser.sh>>/etc/profile在/etc/bashrc 末尾添加下面內容:
[root@open1~]#tail-1f/etc/bashrctest-z$bash_execution_string||{test-f/etc/checkuser.sh&&./etc/checkuser.sh;logger-t-bash-shistory$ssh_clientuser=$name_of_keycmd=$bash_execution_string>/dev/null2>&1;}5.3 修改sshd 配置文件,開啟debug 模式,并重啟sshd 服務
[root@open1~]#sed-i\\\'s/#loglevelinfo/logleveldebug/g\\\'/etc/ssh/s