Hi Paul,

This looks great! I've read through it and understand. I'll give it a try
later today. From my initial scan of you email, it looks like the
../CGI-Executables directory is there for just the executables (hence the
name) and all data files accessed by the executables should be in a separate
directory, and not a sub-directory or the CGI-Executables. So, after making
the changes, when a script in CGI-Executables trys to open a file for
appending/writing in the CGI-Data directory, and there is no file by that
name, Perl will create one, yes?

Thanks again for your help,

Mark

----- Original Message ----- 
From: "Paul Hoffman" <[EMAIL PROTECTED]>
To: "Mark Wheeler" <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>
Sent: Thursday, September 25, 2003 9:08 AM
Subject: Re: File write/read problem


> Mark,
>
> Leave the permissions on httpd.conf as they are, in case you're tempted
> to change them.  :-)  After you've read this message, I suggest you
> read up on UNIX permissions -- maybe someone else can recommend a good
> source of information.
>
> The key is that your CGI script runs as user www and group www.  All
> the permissions have to take that into account.  I'll describe one way
> to accomplish what (I think) you want; there may be others.
>
> What you need to do is change the owner and/or group of any directories
> to which your CGI script will be adding files, and of any *existing*
> files which your CGI script will be modifying.
>
> It sounds like you have the following setup:
>
>    /
>      Library/
>        WebServer/
>          CGI-Executables/
>            write.cgi
>            file1.txt
>            file2.txt
>            ...
>
> First, it's not a good idea to create or modify files within the
> CGI-Executables (a.k.a. cgi-bin) directory, so I would *definitely* put
> any data files in a separate directory, called (say) CGI-Data:
>
>      % cd /Library/WebServer
>      % chmod o-w .    # make sure permissions on /Library/WebServer are
> sane
>      % sudo mkdir CGI-Data
>      % ls -l
>      drwxr-xr-x    2 root     admin     68 Sep 25 11:40 CGI-Data
>
> (I'll continue to edit the output of `ls -l' as I've done here.)
>
> If there are any existing files to move here, go ahead and move (or
> copy) them now:
>
>      % sudo mv file1.txt file2.txt CGI-Data
>
> As it stands now, your CGI script won't be able to do anything in this
> directory or to its files -- you created it as root so, by default,
> root is its owner.  I'm assuming that you want to be able to read and
> write things in this directory yourself, so what you can do is make
> yourself the owner and www the group.  Let's say by some strange chance
> your user id is the same as mine, nkuitse:
>
>      % sudo chown -R nkuitse:www CGI-Data
>      % ls -l
>      drwxr-xr-x   2 nkuitse  www      68 Sep 25 12:05 CGI-Data
>
> OK, so now you (nkuitse) can do anything you want to do in this folder,
> and (because of the -R option, which means "and do the same to the
> directory's contents, recursively") you can do anything to the files
> within it.
>
> But your CGI script still can't touch them, because the group
> permissions are still r-x.  That's easy to fix:
>
>      % chmod -R 775 CGI-Data
>      % ls -l
>      drwxrwxr-x   2 nkuitse  www      68 Sep 25 12:05 CGI-Data
>
> Note two things:
>
>    1. sudo wasn't needed because now you're the owner, and you have
> write permission (unless you took away write permission from the files
> you moved, before you moved them)
>
>    2. chmod also has an -R option with the same effect as chown's
>
> Now all you have to do is modify your script so it writes to
> ../CGI-Data/file1.txt, etc. instead of just file1.txt, etc.  Or you can
> use absolute paths like /Library/WebServer/CGI-Data/file1.txt if you
> prefer (this is less portable but that may not matter in your case).
>
> If you want to get fancy, you can set up individual subdirectories
> within CGI-Data, setting the permissions for one so your CGI script can
> only modify *existing* files, and setting them for the other so your
> CGI script can modify existing files *and* add files.
>
> HTH,
>
> Paul.
>
> On Thursday, September 25, 2003, at 10:08  AM, Mark Wheeler wrote:
>
> > In just checked the httpd.conf file and, yes, the user/group is set to
> > www/www. So I need to change it to what?
> >
> > Mark
> >
> > ----- Original Message -----
> > From: "Paul Hoffman" <[EMAIL PROTECTED]>
> > To: "John Delacour" <[EMAIL PROTECTED]>
> > Cc: <[EMAIL PROTECTED]>
> > Sent: Thursday, September 25, 2003 5:23 AM
> > Subject: Re: File write/read problem
> >
> >
> >> On Wednesday, September 24, 2003, at 10:44 PM,
> >> [EMAIL PROTECTED] wrote:
> >>
> >>> OK, that makes perfect sense, but it is not working here. Here is a
> >>> basic script which, when run, should create a new file called
> >>> example.txt because it is not there when the open statement is used.
> >>>
> >>> #!/usr/bin/perl
> >>>
> >>> print "Content-type: text/html\n\n";
> >>>
> >>> print "Creating new file...";
> >>>
> >>> my $newtext = "newtext from old";
> >>>
> >>> open (USER,"> example.txt");
> >>> print USER $newtext;
> >>> close USER;
> >>>
> >>> exit;
> >>>
> >>> As you've said, it should create the file in the same directory, in
> >>> this case the cgi-bin, as the script (which is called write.cgi). I
> >>> run the call the script from the browser and the script runs fine,
> >>> except, no file is created. I added a "|| die ($!)" at the file open
> >>> call and add the CGI::CARP qw(fatalToBowser) at the top and get the
> >>> following.
> >>>
> >>> Permission denied at /Library/WebServer/CGI-Executables/write.cgi
> >>>
> >>> All the permissions for each of these directories are 755. Something
> >>> is a miss. So what can I do?! I'm very confused.
> >>
> >> Who owns the directories?  The Web server runs as user www (unless
> >> you're not running the stock httpd).  That's probably your problem.
> >>
> >> HTH,
> >>
> >> Paul.
> >>
> >> --
> >> Paul Hoffman :: Taubman Medical Library :: Univ. of Michigan
> >> [EMAIL PROTECTED] :: [EMAIL PROTECTED] :: http://www.nkuitse.com/
> >>
> >
> >
> --
> Paul Hoffman :: Taubman Medical Library :: Univ. of Michigan
> [EMAIL PROTECTED] :: [EMAIL PROTECTED] :: http://www.nkuitse.com/
>

Reply via email to