当前位置:  技术问答>linux和unix

LINUX下如果记录登录用户的操作和操作结果

    来源: 互联网  发布时间:2016-05-08

    本文导语:  要求如下; 用户使用命令行,SSH,telnet等方式登录LINUX后,本程序自动运行,并开始记录用户操作 用户执行的每一条命令和执行结果,都会被记录下来,并加上时间等信息后写入LOG 比如我登录后执行ls -l,结果是 A.TXT B.TXT 那...

要求如下;
用户使用命令行,SSH,telnet等方式登录LINUX后,本程序自动运行,并开始记录用户操作
用户执行的每一条命令和执行结果,都会被记录下来,并加上时间等信息后写入LOG

比如我登录后执行ls -l,结果是
A.TXT
B.TXT

那么ls -l和A.TXT B.TXT都会被记录,并保存成以下形式:
ls

A.TXT
B.TXT

登录的用户不能结束本程序,也不能修改,伪造LOG文件

有什么思路请指点一下,十分感谢!

|
1.
  用户登录时,bash首先自动执行系统管理员建立的全局登录script :/ect/profile。然后bash在用户起始目录下按顺序查找三个特殊文件中的一个:/.bash_profile、/.bash_login、/.profile,但只执行最先找到的一个。 
  因此,只需根据实际需要在上述文件中加入命令就可以实现用户登录时自动运行某些程序(类似于DOS下的Autoexec.bat)。
2. 在运行该程序后可以,记录键盘输入,例如通过C的输入函数

3.至于把输入的命令结果也记录下来,那个暂时没有想到

最后.有个问题,ROOT可以强行关闭该程序。

|
linux的进程日志很全面的,我正好在写日志分析的程序,如果你需要的话可以发给你,其实满简单的,每个统计日志都有自己的数据结构(也有的是直接储存文本),按照头文件的数据结构加以分析就是了。
另外fedora好像默认是不安装pacct的那应该没法用accton命令,自己去下一个rpm包吧,我这有,发给你也行,不过是老版本了..倒是还可以用。
安装完pacct包之后用accton命令指定一个日志,然后用lastcomm命令就可以查看所有用户执行过的命令了。不过执行结果记录..这个暂时没想到好方法。

|
strace命令用法 
  
调用:  
strace [ -dffhiqrtttTvxx ] [ -acolumn ] [ -eexpr ] ...  
[ -ofile ] [ -ppid ] ... [ -sstrsize ] [ -uusername ] [ command [ arg ... ] ]  
 
strace -c [ -eexpr ] ... [ -Ooverhead ] [ -Ssortby ] [ command [ arg ... ] ]  
功能:  
跟踪程式执行时的系统调用和所接收的信号.通常的用法是strace执行一直到commande结束.  
并且将所调用的系统调用的名称、参数和返回值输出到标准输出或者输出到-o指定的文件.  
strace是一个功能强大的调试,分析诊断工具.你将发现他是一个极好的帮手在你要调试一个无法看到
或者源码无法在编译的程序.  
你将轻松的学习到一个软件是如何通过系统调用来实现他的功能的.而且作为一个程序设计师,你可以
解到在用户态和内核态是如何通过系统调用和信号来实现程序的功能的.  
strace的每一行输出包括系统调用名称,然后是参数和返回值.这个例子:  
strace cat /dev/null  
他的输出会有:  
open("/dev/null",O_RDONLY) = 3  
有错误产生时,一般会返回-1.所以会有错误标志和描述:  
open("/foor/bar",)_RDONLY) = -1 ENOENT (no such file or directory)  
信号将输出喂信号标志和信号的描述.跟踪并中断这个命令"sleep 600":  
sigsuspend({}  
--- SIGINT (Interrupt) ---  
+++ killed by SIGINT +++  
参数的输出有些不一致.如shell命令中的 ">>tmp",将输出:  
open("tmp",O_WRONLY|O_APPEND|A_CREAT,0666) = 3  
对于结构指针,将进行适当的显示.如:"ls -l /dev/null":  
lstat("/dev/null",{st_mode=S_IFCHR|0666},st_rdev=makdev[1,3],...}) = 0  
请注意"struct stat" 的声明和这里的输出.lstat的第一个参数是输入参数,而第二个参数是向外传值.  
当你尝试"ls -l" 一个不存在的文件时,会有:  
lstat(/foot/ball",0xb004) = -1 ENOENT (no such file or directory)  
char*将作为C的字符串类型输出.没有字符串输出时一般是char* 是一个转义字符,只输出字符串的长度.  
当字符串过长是会使用"..."省略.如在"ls -l"会有一个gepwuid调用读取password文件:  
read(3,"root::0:0:System Administrator:/"...,1024) = 422  
当参数是结构数组时,将按照简单的指针和数组输出如:  
getgroups(4,[0,2,4,5]) = 4  
关于bit作为参数的情形,也是使用方括号,并且用空格将每一项参数隔开.如:  
sigprocmask(SIG_BLOCK,[CHLD TTOU],[]) = 0  
这里第二个参数代表两个信号SIGCHLD 和 SIGTTOU.如果bit型参数全部置位,则有如下的输出:  
sigprocmask(SIG_UNBLOCK,~[],NULL) = 0  
这里第二个参数全部置位.  
 
参数说明:  
-c 统计每一系统调用的所执行的时间,次数和出错的次数等.  
-d 输出strace关于标准错误的调试信息.  -f 跟踪由fork调用所产生的子进程.  
-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号.  
-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.  
-h 输出简要的帮助信息.  
-i 输出系统调用的入口指针.  
-q 禁止输出关于脱离的消息.  
-r 打印出相对时间关于,,每一个系统调用.  
-t 在输出中的每一行前加上时间信息.  
-tt 在输出中的每一行前加上时间信息,微秒级.  
-ttt 微秒级输出,以秒了表示时间.  
-T 显示每一调用所耗的时间.  
-v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出.  
-V 输出strace的版本信息.  
-x 以十六进制形式输出非标准字符串  
-xx 所有字符串以十六进制形式输出.  
-a column  
设置返回值的输出位置.默认为 40.  
-e expr  
指定一个表达式,用来控制如何跟踪.格式如下:  
[qualifier=][!]value1[,value2]...  
qualifier只能是 trace,abbrev,verbose,raw,signal,read,write其中之一.value是用来限定的符号或数字.默
认的qualifier是 trace.感叹号是否定符号.例如:  
-eopen等价于 -e trace=open,表示只跟踪open调用.而-etrace!=open表示跟踪除了open以外的其他调
用.有两个特殊的符号 all 和 none.  
注意有些shell使用!来执行历史记录里的命令,所以要使用\.  -e trace=set  
只跟踪指定的系统调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用.默认的为set=a
ll.  
-e trace=file  
只跟踪有关文件操作的系统调用.  
-e trace=process  
只跟踪有关进程控制的系统调用.  
-e trace=network  
跟踪与网络有关的所有系统调用.  
-e strace=signal  
跟踪所有与系统信号有关的系统调用  
-e trace=ipc  
跟踪所有与进程通讯有关的系统调用  
-e abbrev=set  
设定strace输出的系统调用的结果集.-v 等与 abbrev=none.默认为abbrev=all.  
-e raw=set  
将指定的系统调用的参数以十六进制显示.  
-e signal=set  
指定跟踪的系统信号.默认为all.如signal=!SIGIO(或者signal=!io),表示不跟踪SIGIO信号.  
-e read=set  
输出从指定文件中读出的数据.例如:  
-e read=3,5  
-e write=set  
输出写入到指定文件中的数据.  
-o filename  将strace的输出写入文件filename  
-p pid  
跟踪指定的进程pid.  
-s strsize  
指定输出的字符串的最大长度.默认为 32.文件名一直全部输出.  
-u username  
以username的UID和GID执行被跟踪的命令.  

|
不知道屏幕记录是否满足你的需求,不管telnet还是putty,你都可以根据他登陆的终端,把他屏幕上的显示的东西保存下来。

|
用户屏幕的变化是你的服务器给他发的数据,关键词:虚拟终端

|
up

|
man accton sa lastcomm

|
用strace吧

|
没有遇到过这种问题,学习一下

|
学习一下

|

strace不是干这个的。

|
学习

|
学习

|
学习。
不过strace貌似不合适

|
说说如何不满意,大家再讨论?

    
 
 

您可能感兴趣的文章:

  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • linux 怎么也能用鼠标操作?? 我的系统是Ubuntu ,不是说linux都用代码操作么??
  • mount命令(linux操作系统)挂载卸载文件系统(cifs,光驱,nfs等)方法介绍
  • 请问各位,我想学习linux,是装linux操作系统还是在虚拟机下装操作系统呢?那种好点啊
  • linux下不使用sudo命令执行docker的操作步骤
  • 请问LINUX操作系统是怎样对外围设备进行操作的
  • Linux下GCC内置原子操作函数(多线程资源访问)介绍
  • 请问命令行操作下怎么改Linux操作系统的日期和时间?
  • Linux下u盘文件系统相关操作
  • 在linux操作系统上向ftp服务器(linux系统)上上传文件,我要纪录操作日志,得到上传到ftp服务器上的文件的路径问题?
  • Mysql服务器登陆,启动,停止等基本操作命令介绍(Linux/Centos环境)
  • 基于linux操作系统之上操作LCD问题,急???
  • linux 操作系统下ps命令介绍
  • Linux操作系统和Hurd操作系统
  • Linux和windows下用mysql c++ library操作Mysql数据库
  • 哪位大侠知道Linux里的有名管道传送数据快不快?有名管道操作的过程是否有读写硬盘的操作?
  • 我想格式掉linux操作系统,但这样会把引导区也格式掉,在format linux操作系统之前,该怎么设置引导区??
  • 已安装了Windows操作系统,还想安装Linux。却还想在开机选择操作系统时由Windows引导,请问如何操作。在线等待
  • 1哪位大侠知道Linux里的有名管道传送数据快不快?有名管道操作的过程是否有读写硬盘的操作?
  • ARM系列开发板是不是一定要用LINUX操作系统。windows操作系统可以吗?
  • linux 的命令操作和 windows的命令提示行有什么不同呢?? 为什么windows一般都不用命令提示行操作呢??
  • telnet登录时,普通用户可以登录成功,但用root用户为什么登录不上?Linux初学者,请高手赐教
  • 求助!为什么linux下FTP允许windows登录而不允许linux登录?在线等
  • 用Telnet怎么登录不了Redhat9.0,却可一登录6.2版的Linux呢?是不是9.0的远程登录功能没有启用啊?怎样起用呢?(网络没问题,可以访问Int
  • 请问在linux9.0下怎样设计root帐号不能直接远程登录,只能用普通用户登录再su!
  • Web服务器/前端 iis7站长之家
  • 如何从linux登录到另一台linux的Xwindow
  • Linux系统登录的问题,很急!!!
  • 虚拟机上的linux一个星期后开启只能root方式登录
  • 如何远程使用图形方式登录LINUX?
  • linux用户登录的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux下top命令详解包括top命令参数使用及结果(virt,res,shr)排序举例说明
  • linux 命令执行结束后,想查看结果,但部分结果已经被覆盖,如何查看?
  • linux由于设置错了ip地址结果无法启动!
  • linux脚本中命令运行结果判断
  • linux: wc -m统计字符数,为什么结果比实际多一个?
  • LINUX删掉后,重新恢复引导区;结果WIN2000不出现启动画面,怎么办那
  • linux下c++调用数学函数后,编译正确但不出结果
  • linux下如何合并命令结果
  • linux服务器被电信重新分配了IP,结果proftp不能启动了。
  • 请教关于linux Shell字符串比较 结果与预期不一样??
  • linux 下怎样把函数结果导出到excel
  • linux 下的lilo 源代码 我尝试用gcc -O3 lili.c 结果出错
  • snmp中的执行linux系统命令如uname的函数,其返回的结果怎么得到啊????
  • 一个在linux/unix开发区问了2天没有结果的问题
  • 原来装了linux和window2K两个系统,今天又装了个winxp,结果找不到启动linux的菜单呢?请问如何解决,先谢了!
  • 第一次装Linux,结果出问题了:(
  • linux 中du的输出结果可能比df还大么
  • 我的linux服务器,cpu总是30-50%,top,ps出来的结果看不到哪个进程,怎么办?
  • 如何知道linux命令执行结果各项的含义
  • suse linux三条命令查看僵死进程结果不一样的问题
  • 在linux C 调用 shell 语句 如何才能不回显执行结果
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • secureCRT下Linux终端汉字乱码解决方法
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • Linux c字符串中不可打印字符转换成16进制
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • linux命令大全详细分类介绍及常用linux命令文档手册下载
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3