|
5.1.4 Security Concerns
Security problems are, fortunately, rather rare on
MUCKs. Most MUCKs function quite
successfully in a climate of trust, but giving thought to
security issues is one of your responsibilities as an administrator. The
issues are magnified if you become an administrator on a large
MUCK, or if your MUCK attracts a sizeable
player base.
In this section, `security' is meant as `protection against unauthorized
modification or destruction of the database itself, or of database objects'.
This is somewhat different than the related issue of privacy. Privacy
issues are discussed in Section 5.2.4.
Access to the MUCK Account:
Being able to log onto the server account the MUCK is
run from is the trump card of all security concerns. With access to this
account, someone bent on mischief or destruction can do anything: change
God's password, alter logs, or destroy the database and all backups.
Someone bent on safeguarding the MUCK can undo any damage:
no matter what has gone wrong or been destroyed on the
MUCK, the world can be restored to sane and healthy
condition by restoring from back ups.
So, control over and awareness of who has access to this account is
the foremost security concern. If you own the machine the
MUCK runs on, and are able and willing to do all site
administration tasks, the issue is considerably simplified: don't give
anyone else the password to the account.
For most MUCKs, the situation is a bit more murky. Often
someone else owns the machine. Sometimes the site administrator is a
wizard on the MUCK, but only marginally involved in its
day-to-day affairs. Sometimes several staff members end up having access
to the account: God has access because it is, after all, her world; the
site admin has access because it is, after all, his computer; the player
relations and security wiz ends up getting access so he can review logs
in situations where one player has charged another with some kind of
offense; the wiz responsible for creating new characters gets access so
she can check email for char requests; perhaps another wizard is given
access so he can update news, info, and help files. (For some things,
you can enlist server-side help from staff members without giving them
access to the account. For example, a separate account could be set up
for the security wiz, and you could copy the log back ups to a directory
in that account, rather than game/logs. A separate account
can be set up for the wizard who does character creation, with char
requests to be mailed there, or mail can be forwarded to her.)
If this is a team of trustworthy people, then things are grand. Work
is shared among several people, and any one of them could log on to deal
with an emergency, such as restarting the MUCK after a
power failure. But, be aware: if you share access to the
MUCK account, you no longer have total assurance that the
MUCK is safeguarded. It is conceivable that one of these
people will get mad at you, or at life, the universe, and everything,
and destroy the MUCK, or that one will give the account
password to someone you don't know.
Keeping Backups
The server does a certain measure of backup on its own. At
restart (assuming you are using the standard database filenames) the
database used at the previous restart, std-db.db, is copied
to std-db.old, and the most current form of the database
(std-db.new, created from the most recent dump) is copied
to std-db.db. So, at any given moment, you have three
versions of the database on hand.
You may want to take this a step further. Copying the most recent
database file to another file and compressing it gives you a safe copy.
Depending on your energy level and disk space, you may want to do a
rotating swap of database back ups similar to the one suggested for
logs.
mv backup2.gz backup3.gz
mv backup1.gz backup2.gz
cp std-db.new backup1
gzip -9 backup1
The reason for keeping older backups is that it's possible for a
database to become corrupt during normal operation: some bug in the
server or on-line programs creates inconsistencies in the database file.
In this situation, the most recent backup file is not necessarily the
best one: it too could be affected.
Also, to safeguard against hardware or access problems, you may want to
do an offsite back up. With File Transfer Protocol, this is a simple
(but potentially time-consuming) process. FTP your most
recent backup to some other host. If your server goes down, or one of
your wizards goes bonkers and deletes the backups, you can set up on an
alternate site.
Access to #1:
Next in the hierarchy of security issues is access to the God
character. If the MUCK is compiled with God privileges,
only God can set players W or !W, or change
wizards' passwords. Also, only God can use the utilities for analyzing
and repairing the database, @sanity and
@sanfix.
On most established MUCKs, God is not used as an actual
player. The primary wizard of the MUCK will create a wizard
character for daily use, and only log onto #1 to only set
or unset players' wizbits or to use the database utilities. In part this
is for security: just as UNIX sysadmins do their normal
work from an account other than root, MUCK Gods do their
normal work from a different character. In part it is simply a
convenience: wizards sometimes need to force themselves, or use programs
that force them, and #1 can't be forced. Also,
#1 always gets the full-data WHO screen (which
wizards see when typing WHO* ), whether she wants it or not.
And in part it's a matter of facilitating administration of the
MUCK. Sometimes the de facto God of the
MUCK (the overall administrator who appoints wizards,
determines policy, etc.) and the most technically accomplished staff
member (the person who would handle matters such as running
@sanfix ) are two different people, so both have reason for
using #1. Or a rather common situation there
is no single wizard with total control; rather, leadership is shared
among a core group of wizards, each having access to the God
character.
Whatever set up you use, the password to #1 is an
important piece of information, and should only be given out on a
need-to-know basis.
Wizards:
Most wizards are committed to their worlds, and would never directly
harm it, but the possibility exists. It's not unheard of for an immature
wizard to get angry and destroy a world. The MUCK can
recover from this by restoring from back ups, but obviously this is an
unpleasant chore.
More common problems come about inadvertently. Most are minor: a
wizard with wayward fingers mistypes #321 for
#312, and recycles some important room or command. So, you
fix it.
Sometimes players @force lock themselves to each other.
Wizards shouldn't. When you appoint a new wizard, check his force lock.
When he was a player, it was fine for his roommate to be able to force
his sleeping body downstairs when she had visitors, but it's not fine
for her to be able to force him once he is a wizard.
Wizards should also be aware of a specific line of attack that can be
used to modify objects with the wizard's permissions. You can set
properties on objects you control (you control everything). Also,
objects you control can set properties on other objects you
control (and you control everything). And, properties can include
MPI that causes programs or other properties to execute.
(This is true for players too, but the implications are less threatening.)
For wizards, these events are carried out with wizard permissions. In short,
and without providing specific recipes, a naughty player can make objects which
if they are owned by a wizard can do naughty things. Whenever
you @chown an object, examine its properties, with particular
attention to MPI that stores values or calls properties or
programs ({store}, {exec}, {lexec},
{muf}, and the like).
Programs:
Wizard programs can do pretty much anything a wizard can do, and
M3 programs are quite powerful as well. As with security
issues regarding wizards, the trick is to identify and support
trustworty people (and programs), and to be aware of the issues, rather
than trying to anticipate and safeguard against every possible
threat.
Your best defense against security breaches through programs is to
appoint a good MUF wizard. This staff member determines who
gets Mucker bits, with special attention to M3's, and
reviews global and public programs, with special attention to programs
that players ask to port from elsewhere. If you are not particularly
MUF savvy, or if you are a good coder but lack the sneaky
mindset necessary to be a good hacker or anti-hacker, you should recruit
someone with these qualities. (Surprisingly, it is
possible to find honest sneaky people.)
Some general points...
The apparent purpose of a program is no guarantee of its potential
threat or lack thereof. If someone asks you to port a 2000-line Poker
program that needs to be set Wizard so it can keep scores
in a protected .scores/ directory, approach it as a wizbitted program
large enough to hide some Trojan horse feature, and not as `just a card
game'.
*
Programs set Link_OK are public: they can be listed,
linked to, and called by other programs. Many are a little too
trusting: they assume that you (the person using the program) are who
you're supposed to be. And, if you use them in the normal way, you are.
But it is a trival matter to concoct a small stub program that stores an
incorrect dbref in the `me' variable, puts an argument
string on the stack, and then calls a public program. An M2
morphing program may seem perfectly safe after all, people won't
put harmful things in their own descs but consider:
JoeHacker(#666PBJM2) might be able to store #1
or the dbref of some other wizard in `me', put a string
holding naughty MPI onto the stack, and then call the morph
program, creating a situation where the next time someone looks at the
wizard, untoward things will happen.
Fortunately, there is a rather simple way to plug this hole. Check all
Link_OK programs; if they don't guard against such
assualts, edit them, adding a line that does so. Before the first line
of the last function in the program, insert the following line:
"me" match me !
This explicitly matches the dbref of the triggering player or puppet,
and stores it in the `me' variable.
*
In general, any program should be run with with the lowest
permissions level that will work. If a program will run at
M2, set it M2, not M3 or
W. If a program doesn't need to be owned by a wizard,
consider chowning it to some mortal, possibly an NPC you
use for just this purpose.
*
You owe it to yourself and your players to make your policies on
security and privacy concerns as they pertain to programming explicit.
Providing a document stating this policy, readable through the
`news' or `info' command, is a very good idea.
A sample policy is provided in Appendix B.
The sample policy may be freely copied and edited to meet your
MUCK's needs.
prev|
toc|
top|
next
|
|