linux 输入三个参数 输出运运结果,LINUX下如果记录登录用户的操作和操作结果

要求如下;

用户使用命令行,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貌似不合适

|

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值