@ The Cafe
Retro Projects and More
Chartreuse
Home
Projects
Transistor Cafe
Fennec 6800
Vulpis 2 (68010)
Bondwell B310 RAM
About
Personal Site
GitHub
Twitter
Resources
Homebrew Computers
Vintage Computing
Web Design
Programming
Misc
Return back to the
Visit the Transistor Cafe!
The Transistor Cafe Web-space
Screenshot of transistorcafe.net homepage

The Transistor Cafe web-space is an exercise in a creating a 'classic' web-host. Kind of in the vein of Geocities, Tripod, or the vast plethora of consumer ISP provided web hosting that existed from the mid to late 90s up until circa 2010. These were spaces were people were granted simple ftp access to a directory that was then shared directly on the web. Typically these hosts granted in the range of 1-20MB of quota space per user, though the further back you go the less space was granted.

These hosts generally provided static hosting, meaning the user could not make use of PHP or CGI scripts in the construction of their page. This meant you couldn't host stuff like forums, storefronts, or really anything that would require the user to log on. Some did offer features such as Microsoft FrontPage extensions, which allowed for some limited server side features such as guest-books, hit counters, or similar. Others may have a global cgi-bin folder with some scripts that the user could include in an iframe, or img to say allow hit-counters to work. In general, static hosting was a simple experience for the end user. You edit the html files on your computer, make them look how you wanted, then upload them to the server where they're then shared with the world, looking just like they did on your own computer.

For the Transistor Cafe I went with arguably the simplest route; a linux based server with an Apache web server, where each user is given a corresponding linux account and home directory. This means we can rely on the operating system access control to handle logins and security, and simply make use of the built in Apache UserDir module to handle translating each user account into a /~username/ sub-folder on the site. The directory was changed from public_html to www in the user’s home folder for simplicity.

As a layer of security, each web user is set up with their shell as nologin, preventing them from obtaining shell access to the server. In addition for web users the ssh server is configured to only run the sftp-server for their accounts, and for the users to be chrooted to their home directories. For plaintext FTP, which is provided mainly for legacy tools and hardware, a similar lockdown is configured. Users are again chrooted to their home directories, and only allowed write access to the www subfolder.

For further protection against a class of potential attacks against chroot, the rather odd setup of setting the user's home directory to be owned by root was taken. As well the user is denied write access to the home directory, preventing them from creating any files or folders within that space. However they do own and are given permission on the www subfolder, allowing them to create and delete files within there at will. This kind of setup is to prevent possible attacks where the ftp or sftp server is run within the chroot context and tries to execute other programs, where the user could then be in control of /usr/bin or /usr/lib (really /home/someuser/usr/bin or /home/someuser/usr/lib) and cause a some form of privilege escalation.

Currently we do not impose a quota on users due to it being a small community and there being a degree of trust. However the general implication is that sites should be reasonably small, and if hosting grows out of control we could step in and impose them. This would be as simple as enabling quota on the file system and setting hard quota limits for each of the web users.

The final part of the setup is the homepage. The homepage is designed in a rather classic way using a table layout. We have a simple left column navigation bar, and a right column contents pane. To give it a more enhanced look the navigation bar is actually made up of 3 columns, the left and right most columns are blank except for a background image. The background image is used to give a rounded off border effect to the navigation bar. The look is somewhat inspired by early Mac OS X 10.2 with the stripes and glass look.

For the navigation bar, each user of the server is listed in alphabetical order, and is represented by an 80x15 "Brilliant Button" image of their choosing. A placeholder is used if they have not yet created one. This size was chosen as it was one of the classic button sizes for websites, being quite common in the early-mid 2000s. The more common 88x31 button was also considered, but was rejected due to the vertical height that having all these stacked in the navigation bar would be required.