[CentOS] bash file direct execution

Tue Aug 2 13:41:50 UTC 2005
dan1 <dan1 at edenpics.com>

Hello, John.

>Since /home/user is probably not on your path (for good security reasons),
>I would not expect this to run anyway.
>
>Try moving it to /home/user/bin or a directory that is in your path.
>
>On my CentOS4.1 system, putting it in /root does not make it work - I
>still have to do ./test.sh.  /root is not in the path.  QED.

Yes, but I tested those scripts with the complete path, or with './test.sh' 
when being in the directory, so it doesn't seem to be related to a path 
problem.


>What are the directory permissions as well?  ls -ld /home/user and compare
>with ls -ld /root or wherever it runs OK.  You only need execute access on
>a directory to be able to use it but you need read access if you want to
>find a file in it.
>
These are the permissions for those files:

[root at box /]# ls -ld /home
drwxr-xr-x  6 root root 4096 Aug  2 14:58 /home
[root at box /]# ls -ld /root
drwxrwx---  10 root root 4096 Aug  2 14:58 /root

/home is where the script is buggy, and /root is where the script works. Now 
for any reason the script works also in the / directory if I create a new 
one. If I copy the buggy file from /home to / it works there. If I move the 
buggy file from /home to / it doesn't work there... go figure..


>Have you tried strace?
>
>strace ./test.sh 2>&1 > test.trace (or whatever)
>

No, I haven't. I have done this right now with both the buggy and correct 
files. Here is the output of the difference between both strace files. It 
seems that there is something interesting about failing to open the 
/dev/tty, but I don't know how to solve that:


[root at box /]# diff /test.trace /home/test.trace
3c3
< brk(0)                                  = 0x977b000
---
> brk(0)                                  = 0x9cd1000
35,38c35,38
< open("/dev/tty", O_RDWR|O_NONBLOCK|O_LARGEFILE) = 3
< close(3)                                = 0
< brk(0)                                  = 0x977b000
< brk(0x979c000)                          = 0x979c000
---
> open("/dev/tty", O_RDWR|O_NONBLOCK|O_LARGEFILE) = -1 ENXIO (No such device 
> or address)
> ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbfe4aa40) = -1 ENOTTY 
> (Inappropriate ioctl for device)
> brk(0)                                  = 0x9cd1000
> brk(0x9cf2000)                          = 0x9cf2000
48c48
< time(NULL)                              = 1123010862
---
> time(NULL)                              = 1123011577
70c70
< stat64("/", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
---
> stat64("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
72c72
< getpid()                                = 3144
---
> getpid()                                = 3168
77,78c77,78
< getppid()                               = 3143
< getpgrp()                               = 3143
---
> getppid()                               = 3167
> getpgrp()                               = 3167
82c82
< ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbff0f1c8) = -1 ENOTTY 
(Inappropriate ioctl for device)
---
> ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbfe4ab58) = -1 ENOTTY 
> (Inappropriate ioctl for device)
96c96,97
< fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0
---
> fstat64(1, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
> ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbfe4a28c) = -1 ENOTTY 
> (Inappropriate ioctl for device)


It seems that we are getting nearer this time ..

Thanks,
Daniel