Hi all,

I am looking at securing a web server using the FreeBSD MAC Framework.

To make things clear I will call the hosted users "web users". Those are the 
issues I am dealing with:

** Network Security **
- Web users shouldn't be able to connect to reserved local ports apart from 
25(smtp); 80(http); 443(https) and 3306(MySQL)
   Solution:
        run the web server and web users shell in a jail, use ipfw to limit the 
jail access to localhost
        Those are the rules I have set:
                ${fwcmd} add 60 pass ip from any to any dst-port 25 jail 1 via 
lo0
                ${fwcmd} add 61 pass ip from any to any dst-port 80 jail 1 via 
lo0
                ${fwcmd} add 62 pass ip from any to any dst-port 443 jail 1 via 
lo0
                ${fwcmd} add 63 pass ip from any to any dst-port 3306 jail 1 
via lo0
                ${fwcmd} add 80 deny ip from any to any jail 1 via lo0
        Here, I allow 80 and 443 in case the users want to locally use some web 
APi. MySQL and smtp use are obvious.

- Web users shouldn't be able to open any socket, but, they should still be 
able to connect to the outside
    This is where I do not have a solution.
        I think the use of mac_bsdextended would work here, but there are no 
clear way of doing this.
        Anyone has a good configuration in place ?


** Resources Security **
    Solution:
        This is a straight forward one, configure login.conf and the virtual 
hosts with resources limits.
        This can be adjusted for specific user who may need more than usual.


** File System Security **
- Jail Security
    Solution:
        Build the jail with only required files, this is done via make.conf
        Deny access

- Web users and executed web scripts shouldn't be able to read other users data
    Solution:
        run suPHP for php scripts as well as suEXEC for cgi-scripts
        implement ufs_acl so that the www (Web Server) user can access any user 
directory
        Add a ufs_acl to the Web users home directory which says:
                read-write-exec only from $owner and www
        Those rights should have priority on any traditional unix file system 
rights.

- For the user's own security, prevent them from writing to /tmp
    Solution:
        add a ufs_acl rule to /tmp, this should be read only (for mysql socket 
and other things that might reside here)

- As much as possible, web users should have a limited view of the systems
   Solution:
        use the follwing sysctl variable
                security.bsd.see_other_uids=0
                security.bsd.unprivileged_read_msgbuf=0
        Since the web users are in a jail, set restricted devfs ruleset (this 
is easily done via rc.conf)
                jail_web_devfs_enable="YES"
                jail_web_devfs_ruleset="devfsrules_jail"

- Web users and executed web scripts shouldn't be able to read important system 
files
    Solution:
        use ufs_acl to prevent the users from accessing the following:
                /boot /root
                /sbin /usr/sbin /usr/local/sbin
                /var
                /etc/(apart from resolv.conf, group, hosts, pwd.db, 
nsswitch.conf, services, mailer.conf, ssh/ssh_config and mail/)
                /usr/local/etc (appart from tools/configs which are normally 
required by the user. eg: nss-ldap)
        Those rights should have priority on any traditional unix file system 
rights.
        I could make a longer list, this one's just ot get started.
        I am sure there's a better way to do that, maybe a MAC ruleset already 
exists for that, has anyone done that already?

- Web users should be able to access their own crontab
    Solution: use ufs_acl to give rights to the crontab directory

- Web users should be able to send emails
    Solution: use ufs_acl to give rights to the mail spool

- Web users shouldn't be able to install binaries but still be able to install 
CGi scripts
    This is where I do not have a solution.
        Has anyone implemented such policy?


This setup gives a lot of rights to the users, which is good for a flexible 
hosting.
This gives a lot of available tools to the users as well as the possibility to 
have a wide open php.ini (let's say register_gobals stays off). And thanks to 
suPHP, you can even make multiple php.ini for different users.


** What i am looking for is a simpler solution to the file system security. 
ufs_acl is difficult to implement, so perhaps the use of a MAC module would be 
better.
** Suggestion on this would be highly appreciated.


Those are my thoughts on the subject, do not hesitate to let me know if you 
have comments and/or better ideas on how to make a secure setup for shared web 
hosting.

All the best,
--
Alexis Susset
_______________________________________________
freebsd-security@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-security
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to