Pier Fumagalli wrote:
> 
> "jean-frederic clere" <[EMAIL PROTECTED]> wrote:
> 
> > Pier Fumagalli wrote:
> >>
> >> "jean-frederic clere" <[EMAIL PROTECTED]> wrote:
> >>
> >>> Pier Fumagalli wrote:
> >>>>
> >>>> "Remy Maucherat" <[EMAIL PROTECTED]> wrote:
> >>>>
> >>>>> Thanks for the report Pier. I had been wondering for AGES why the CL would
> >>>>> reload the webapp "randomly" after accessing a JSP, telling that a bean
> >>>>> class had been modified. I couldn't find a reason why it was a bug (the
> >>>>> logging I added to investigate this displayed different dates which didn't
> >>>>> appear bogus), but I failed to undestand why it happened.
> >>>>
> >>>> Yeah, I wonder why noone actually noticed this before... Am I the only
> >>>> idiot
> >>>> using TC4 in a secure production environment? (Meaning, chrooted JVM and
> >>>> suid execution, with access only to the "work" directory)?
> >>>
> >>> Last time I have tried this I noted that it did not work: TC tries to
> >>> write in several places (at least conf and webapps).
> >>
> >> Conf works... I'll never give him access to my configurations directory...
> >> :) One trick is _never_ to put any source .java file anywhere in the WEB-INF
> >> directory, so that the "useBean" thing won't try to compile them (or at
> >> least, it seems to be working this way)
> >
> > What are you using to make chroot, setuid and co?
> 
> Oh, not that hard... This works on Solaris, the trick is set up your entire
> CHROOTED environment (finding library dependancies, and that kind of crap).

I am trying to use jakarta-commons-sandbox/daemon (so that the TC runs on port
80 or 88).
Probably that adds some dependancy to the JVM...

> 
>     Pier
> 
> #include <sys/types.h>
> #include <unistd.h>
> #include <string.h>
> #include <errno.h>
> #include <stdio.h>
> #include <pwd.h>
> 
> int main(int argc, char *argv[]) {
>     struct passwd *user=NULL;
>     char **args=NULL;
>     int x;
> 
>     if (argc<4) {
>         fprintf(stderr, "Usage: %s [user] [chroot] [command]
> [...]\n",argv[0]);
>         return(1);
>     }
> 
>     if ((user=getpwnam(argv[1]))==NULL) {
>         fprintf(stderr, "%s cannot retrieve user \"%s\"
> profile\n",argv[0],argv[1]);
>         return(2);
>     }
> 
>     if (chroot(argv[2])!=0) {
>         fprintf(stderr, "%s cannot chroot to \"%s\"\n",argv[0],argv[2]);
>         return(2);
>     }
> 
>     if (setgroups(1,&user->pw_gid)!=0) {
>         fprintf(stderr, "%s cannot set groups id\n", argv[0]);
>         return(2);
>     }
> 
>     if (setgid(user->pw_gid)!=0) {
>         fprintf(stderr, "%s cannot set effective group id\n", argv[0]);
>         return(2);
>     }
> 
>     if (setegid(user->pw_gid)!=0) {
>         fprintf(stderr, "%s cannot set real group id\n", argv[0]);
>         return(2);
>     }
> 
>     if (setuid(user->pw_uid)!=0) {
>         fprintf(stderr, "%s cannot set effective user id\n", argv[0]);
>         return(2);
>     }
> 
>     if (seteuid(user->pw_uid)!=0) {
>         fprintf(stderr, "%s cannot set real user id\n", argv[0]);
>         return(2);
>     }
> 
>     args=(char **)malloc((argc-2)*sizeof(char *));
>     for (x=3; x<argc; x++) args[x-3]=argv[x];
>     args[argc-2]=NULL;
> 
>     execvp(argv[3], args);
>     fprintf(stderr, "%s: %s: %s\n", argv[0], argv[3], strerror(errno));
> }
> 
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to