免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2230 | 回复: 0
打印 上一主题 下一主题

用脚本代替vi后,调用visudo出现问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-23 07:17 |只看该作者 |倒序浏览
用一个脚本代替原来的vi,用户调用vi时进行一些条件检查,如果通过检查则调用原来的vi
但是运行visudo时遇到下面的问题:

运行visudo时有如下错误:
pp2db01#/usr/local/sbin/visudo
/usr/local/sbin/visudo: unable to run /usr/bin/vi: Exec format error
/usr/local/sbin/visudo: sudoers file unchanged.

替换vi的脚本:
pp2db01#cat /usr/bin/vi
#
#

#!/usr/bin/sh
ED=/usr/bin/.oldvi
VARTMP=/stand/var_tmp
STD_SPACE=50000 # kbytes , needed min size of /stand
MAX_FZ=10000 # kbytes , allowed max size of vi file
TMPDIR=$VARTMP;export TMPDIR

# if call by view, just run more
myname=`basename $0`
if [ $myname = "view" ]
then
  /usr/bin/more $*
  exit
fi

# check if directory exist
if [ ! -d "$VARTMP" ]
then
  echo "ERROR : /stand/var_tmp not found !"
  exit
fi

# check /stand's avail space
avail=`/usr/bin/bdf /stand | /usr/bin/tail +2 | /sbin/awk '{print $4}'`
if [ ${avail} -lt "STD_SPACE" ]
then
  echo "ERROR : $VARTMP avail space is not enough !"
  exit
fi

# check par
if [ $# -gt "1" ]
then
  echo "ERROR : vi : illegal option "
  echo "------"
  echo "Usage : vi filename"
  exit
fi

# check files size
if [ -f $1 ]
then
filesize=`/usr/bin/du -ks $1 | /sbin/awk '{print $1}'`
if [ "$filesize" -gt "$MAX_FZ" ]
then
  echo "ERROR : $ops exceed MAX_FILESIZE !"
  exit
fi
fi

# if pass all check , run vi
if [ ! -f $1 ]
then
> $1
fi

/usr/bin/visetuid $ED $*

用tusc跟踪visudo的结果:
pp2db01#/usr/contrib/bin/tusc /usr/local/sbin/visudo
execve("/usr/local/sbin/visudo", 0x77ff0620, 0x77ff062 .............................................. = 0 [32-bit]
open("/usr/lib/dld.sl", O_RDONLY, 03014) .............................................................. = 3
read(3, "02\v010e0512@ \0\0\0\0\0\0\0\0\0".., 12 .................................................... = 128
lseek(3, 128, SEEK_SET) ............................................................................... = 128
read(3, "10\0\004\0\0\0( \002e7\ \0\0\0\0".., 4 ..................................................... = 48
mmap(NULL, 190300, PROT_READ|PROT_EXEC, MAP_SHARED|MAP_SHLIB|MAP_STATICPREDICTION, 3, 0xa000) ......... = 0xc0010000
mmap(NULL, 16392, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_SHLIB, 3, 0x39000) .................. = 0x77feb000
close(3) .............................................................................................. = 0
utssys(0x77ff2bc0, 0, 0) .............................................................................. = 0
getuid() .............................................................................................. = 0 (0)
getuid() .............................................................................................. = 0 (0)
getgid() .............................................................................................. = 3 (3)
getgid() .............................................................................................. = 3 (3)
mmap(NULL, 8192, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, NULL) ................. = 0x77fe9000
sysconf(_SC_CPU_VERSION) .............................................................................. = 532
open("/opt/graphics/OpenGL/lib/libogltls.sl", O_RDONLY, 0) ............................................ ERR#2 ENOENT
open("/usr/lib/libc.2", O_RDONLY, 0) .................................................................. = 3
fstat(3, 0x77ff30d .................................................................................. = 0
read(3, "0214010e0512@ \0\0\0\0\0\0\0\0\0".., 12 .................................................... = 128
lseek(3, 128, SEEK_SET) ............................................................................... = 128
read(3, "10\0\004\0\0\0( \01487e4\0\010\0".., 4 ..................................................... = 48
read(3, "80\0\0\v\0\0\004\0\0\0\0", 12) ............................................................... = 12
mmap(NULL, 1347584, PROT_READ|PROT_EXEC, MAP_SHARED|MAP_SHLIB, 3, 0x6d000) ............................ = 0xc0100000
mmap(NULL, 45056, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS|MAP_SHLIB, -1, NULL) ...... = 0x77fde000
mmap(0x77fd6000, 32768, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_SHLIB, 3, 0x1b6000) . = 0x77fd6000
mmap(NULL, 16384, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, NULL) ................ = 0x77fd2000
close(3) .............................................................................................. = 0
open("/usr/lib/libdld.2", O_RDONLY, 0) ................................................................ = 3
fstat(3, 0x77ff335 .................................................................................. = 0
read(3, "02\v010e0512@ \0\0\0\0\0\0\0\0\0".., 12 .................................................... = 128
lseek(3, 128, SEEK_SET) ............................................................................... = 128
read(3, "10\0\004\0\0\0( \0\0) \ \0\010\0".., 4 ..................................................... = 48
read(3, "80\0\0\v\0\0\004\0\0\0\0", 12) ............................................................... = 12
mmap(NULL, 12288, PROT_READ|PROT_EXEC, MAP_SHARED|MAP_SHLIB, 3, 0x2000) ............................... = 0xc0004000
mmap(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_SHLIB, 3, 0x5000) .................... = 0x77fd1000
close(3) .............................................................................................. = 0
open("/usr/lib/libc.2", O_RDONLY, 0) .................................................................. = 3
fstat(3, 0x77ff35d .................................................................................. = 0
close(3) .............................................................................................. = 0
mmap(NULL, 16384, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, NULL) ................ = 0x77fcd000
mmap(NULL, 120, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, NULL) .................. = 0x77fcc000
sigsetreturn(0x77fd3fbe, 0x6211988, 1392) ............................................................. = 0
getuid() .............................................................................................. = 0 (0)
sysconf(_SC_CPU_VERSION) .............................................................................. = 532
brk(0x400032d8) ....................................................................................... = 0
brk(0x400052c0) ....................................................................................... = 0
brk(0x40006000) ....................................................................................... = 0
open("/var/spool/pwgr/status", O_RDONLY, 0) ........................................................... = 3
mmap(NULL, 532, PROT_READ, MAP_SHARED|MAP_VARIABLE|MAP_FILE|MAP_ADDR32, 3, NULL) ...................... = 0xc0077000
close(3) .............................................................................................. = 0
socket(AF_UNIX, SOCK_DGRAM, 0) ........................................................................ = 3
getpid() .............................................................................................. = 28926 (28925)
unlink("/var/spool/sockets/pwgr/client28926" ......................................................... = 0
bind(3, 0x77fdfad8, 38) ............................................................................... = 0
fcntl(3, F_SETFD, 1) .................................................................................. = 0
time(NULL) ............................................................................................ = 1224672460
open("/etc/nsswitch.conf", O_RDONLY, 0666) ............................................................ = 4
brk(0x40008000) ....................................................................................... = 0
ioctl(4, TCGETA, 0x77ff2368) .......................................................................... ERR#25 ENOTTY
read(4, "# \n#   / e t c / n s s w i t c ".., 8192) ................................................... = 408
brk(0x40009000) ....................................................................................... = 0
read(4, 0x40005fa8, 8192) ............................................................................. = 0
close(4) .............................................................................................. = 0
open("/usr/lib/libnss_files.1", O_RDONLY, 0) .......................................................... = 4
fstat(4, 0x77ff22d8) .................................................................................. = 0
read(4, "0210010e0512@ \0\0\0\0\0\0\0\0\0".., 128) .................................................... = 128
lseek(4, 128, SEEK_SET) ............................................................................... = 128
read(4, "10\0\004\0\0\0( \0\08bt \0\010\0".., 48) ..................................................... = 48
read(4, "80\0\0\v\0\0\004\0\0\0\0", 12) ............................................................... = 12
mmap(NULL, 36864, PROT_READ|PROT_EXEC, MAP_SHARED|MAP_SHLIB, 4, 0x3000) ............................... = 0xc006c000
mmap(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_SHLIB, 4, 0xc000) .................... = 0x77fcb000
close(4) .............................................................................................. = 0
getuid() .............................................................................................. = 0 (0)
getuid() .............................................................................................. = 0 (0)
getgid() .............................................................................................. = 3 (3)
getgid() .............................................................................................. = 3 (3)
open("/usr/lib/libdld.2", O_RDONLY, 0) ................................................................ = 4
fstat(4, 0x77ff2558) .................................................................................. = 0
close(4) .............................................................................................. = 0
open("/etc/passwd", O_RDONLY, 0666) ................................................................... = 4
brk(0x4000b000) ....................................................................................... = 0
ioctl(4, TCGETA, 0x77ff2228) .......................................................................... ERR#25 ENOTTY
read(4, "r o o t : * : 0 : 3 : : / : / s ".., 8192) ................................................... = 2218
lseek(4, 4294965101, SEEK_CUR) ........................................................................ = 23
close(4) .............................................................................................. = 0
open("/etc/sudoers", O_RDWR|O_CREAT, 0440) ............................................................ = 4
lockf(4, 0x2, 0) ...................................................................................... = 0
fstat(4, 0x77ff0ff0) .................................................................................. = 0
open("/etc/sudoers.tmp", O_WRONLY|O_CREAT|O_TRUNC, 0600) .............................................. = 5
sigsetreturn(0x77fd3fbe, 0x6211988, 1392) ............................................................. = 0
sigaction(SIGTERM, 0x77ff11d8, NULL) .................................................................. = 0
sigaction(SIGHUP, 0x77ff11d8, NULL) ................................................................... = 0
sigaction(SIGINT, 0x77ff11d8, NULL) ................................................................... = 0
sigaction(SIGQUIT, 0x77ff11d8, NULL) .................................................................. = 0
read(4, "#   s u d o e r s   f i l e . \n".., 2048) ................................................... = 1167
write(5, "#   s u d o e r s   f i l e . \n".., 1167) .................................................. = 1167
read(4, 0x77ff0750, 2048) ............................................................................. = 0
close(5) .............................................................................................. = 0
utime("/etc/sudoers.tmp", 0x77ff11b0) ................................................................. = 0
open("/etc/sudoers.tmp", O_RDONLY, 0666) .............................................................. = 5
brk(0x4000d000) ....................................................................................... = 0
ioctl(5, TCGETA, 0x77ff1368) .......................................................................... ERR#25 ENOTTY
brk(0x4000f000) ....................................................................................... = 0
ioctl(5, TCGETA, 0x77ff16a8) .......................................................................... ERR#25 ENOTTY
read(5, "#   s u d o e r s   f i l e . \n".., 8192) ................................................... = 1167
read(5, 0x4000c4f0, 8192) ............................................................................. = 0
read(5, 0x4000c4f0, 8192) ............................................................................. = 0
ioctl(5, TCGETA, 0x77ff13e8) .......................................................................... ERR#25 ENOTTY
close(5) .............................................................................................. = 0
stat("/usr/sbin/vi", 0x77ff1258) ...................................................................... ERR#2 ENOENT
stat("/usr/bin/vi", 0x77ff1258) ....................................................................... = 0
stat("/usr/bin/vi", 0x77ff10c0) ....................................................................... = 0
stat("/usr/bin/vi", 0x77ff1058) ....................................................................... = 0
time(NULL) ............................................................................................ = 1224672460
sigprocmask(SIG_BLOCK, 0x77ff11b8, 0x77ff11d8) ........................................................ = 0
fork() ................................................................................................ = 28927
/usr/local/sbin/visudo: unable to run /usr/bin/vi: Exec format error
waitpid(28927, WIFEXITED(127), 0) ..................................................................... = 28927
  Received signal 18, SIGCLD, in sigprocmask(), [SIG_DFL], no siginfo
sigprocmask(SIG_SETMASK, 0x77ff11d8, NULL) ............................................................ = 0
stat("/etc/sudoers.tmp", 0x77ff0f88) .................................................................. = 0
open("/etc/sudoers.tmp", O_RDWR, 0666) ................................................................ = 5
lseek(5, 4294967295, SEEK_END) ........................................................................ = 1166
ioctl(5, TCGETA, 0x77ff14a8) .......................................................................... ERR#25 ENOTTY
read(5, "\n", 8192) ................................................................................... = 1
lseek(5, 0, SEEK_CUR) ................................................................................. = 1167
lseek(5, 0, SEEK_SET) ................................................................................. = 0
ioctl(5, TCGETA, 0x77ff1268) .......................................................................... ERR#25 ENOTTY
read(5, "#   s u d o e r s   f i l e . \n".., 8192) ................................................... = 1167
read(5, 0x4000c4f0, 8192) ............................................................................. = 0
read(5, 0x4000c4f0, 8192) ............................................................................. = 0
ioctl(5, TCGETA, 0x77ff13e8) .......................................................................... ERR#25 ENOTTY
close(5) .............................................................................................. = 0
/usr/local/sbin/visudowrite(2, "/ u s r / l o c a l / s b i n / ".., 22) .................................................... = 22
: sudoerwrite(2, ":   s u d o e r ", 8) ....................................................................... = 8
swrite(2, "s ", 1) ..................................................................................... = 1
file unwrite(2, "  f i l e   u n ", 8) ....................................................................... = 8
cwrite(2, "c ", 1) ..................................................................................... = 1
hanged.
write(2, "h a n g e d . \n", 8) ....................................................................... = 8
unlink("/etc/sudoers.tmp" ............................................................................ = 0
getpid() .............................................................................................. = 28926 (28925)
unlink("/var/spool/sockets/pwgr/client28926" ......................................................... = 0
exit(0) ............................................................................................... WIFEXITED(0)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP