- 论坛徽章:
- 0
|
用一个脚本代替原来的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) |
|