How to add admins to a Counter-Strike: Source server with SourceMod
Install Metamod:Source and SourceMod on CS:S, add yourself as admin in admins_simple.ini, and use the admin flags and commands.
Counter-Strike: Source runs on Source 1, and that is why SourceMod works on it. SourceMod gives you a real admin system: per-person permissions, an in-game admin menu, chat commands, immunity levels and persistent bans — installed once and configured in a text file.
This is the clearest practical advantage CS:S holds over newer Counter-Strike titles. AlliedModders' own Required Versions page lists the position plainly:
| Game | Metamod:Source | SourceMod |
|---|---|---|
| Counter-Strike: Source | Current Stable | Current Stable |
| Counter-Strike: Global Offensive | Current Stable | Current Stable |
| Counter-Strike 2 | Current Development | Unsupported |
So on CS:S you install a mature, documented admin platform that has had two decades of plugins written against it. On Source 2 titles SourceMod does not run at all, and the equivalent tooling has to be assembled from newer projects. If you are choosing a Counter-Strike server to run a community on, this is the difference that shows up every day.
Metamod:Source and SourceMod are not the same thing
Metamod:Source is the loader that hooks into the game. SourceMod is the admin and scripting platform that runs on Metamod. You need both, in that order. It is worth being precise here, because Metamod:Source does support Counter-Strike 2 on its development branch — it is SourceMod specifically that does not.
For first boot and file locations, see Getting started with your Counter-Strike: Source server.
Step 1: Install Metamod:Source
SourceMod requires Metamod:Source 1.9.0 or higher, and AlliedModders recommend running the latest. The current stable line for CS:S is 1.12.
- Download Metamod:Source for Source 1 from
metamodsource.net. - Extract the package into your game folder, so that you end up with
cstrike/addons/metamod. - Restart the server.
- Type
meta versionin the server console.
A working install prints a line reading Loaded As: Valve Server Plugin. If the command is not recognised at all, the install did not take.
You almost certainly do not need a VDF file
Metamod:Source 1.10.0 and later ship a
metamod.vdffor easier installation on most games. AlliedModders are emphatic that generating a custom VDF is unnecessary for normal setups, and that people regularly break working installs by doing it anyway. Ifmeta versionwas recognised, you are done — do not do the VDF steps.
Step 2: Install SourceMod
- Download SourceMod — the stable branch, matching the current stable line (1.12).
- Extract the package into the same mod folder,
cstrike. You are unpacking anaddonsfolder that merges with the one Metamod:Source created. - Restart the server completely.
- Type
meta listin the server console.
You should see SourceMod listed, along the lines of:
Listing 1 plugin:
[01] SourceMod (1.1.0.2489) by AlliedModders LLC Once that appears, the sm root console command is available. Try sm version and sm plugins list.
Linux load messages that are not actually errors
AlliedModders document two messages that alarm people unnecessarily. A
wrong ELF class: ELFCLASS64error is normal on a 32-bit dedicated server install — as long asmeta versionis recognised, Metamod:Source is installed. A failure mentioninglibgcc_s.so.1: version GCC_7.0.0 not foundhappens because Valve ship their own copies of those libraries; the documented fix is to delete the listed file from the server install, never the one in the system path. If a load genuinely failed, look formetamod-fatal.login Metamod'sbinfolder.
Step 3: How do I make myself admin on my own CS:S server?
This is the quick start, straight from SourceMod's documentation.
- Find your Steam ID. Connect to the server and run the
statuscommand — your ID appears in the formatSTEAM_n:o:p. - On the server, open
addons/sourcemod/configs/admins_simple.ini. - Add a new line:
"STEAM_0:1:16" "99:z" - Save the file.
- Type
sm_reloadadminsin the server console. It should answer[SM] Admin cache has been refreshed. - Reconnect, open your client console and type
sm_admin, then return to the game. The admin menu appears.
99:z means immunity level 99 and the z (root) flag. Root bypasses every permission check, so it is right for the server owner and wrong for everyone else.
The file is
admins_simple.ini, not.cfgOne page of AlliedModders' own documentation refers to
admins_simple.cfg. The file isadmins_simple.ini, as used consistently on the Adding Admins page. If your editor cannot find the file you were told to edit, this is why.
What do the SourceMod admin flags mean?
Every permission in SourceMod is a single letter. These are the provided levels:
| Name | Flag | Purpose |
|---|---|---|
| reservation | a | Reserved slot access |
| generic | b | Generic admin; required for admins |
| kick | c | Kick other players |
| ban | d | Ban other players |
| unban | e | Remove bans |
| slay | f | Slay/harm other players |
| changemap | g | Change the map or major gameplay features |
| cvar | h | Change most cvars |
| config | i | Execute config files |
| chat | j | Special chat privileges |
| vote | k | Start or create votes |
| password | l | Set a password on the server |
| rcon | m | Use RCON commands |
| cheats | n | Change sv_cheats or use cheating commands |
| root | z | Enables all flags and ignores immunity values |
| custom1–custom6 | o, p, q, r, s, t | Custom groups for plugins to use |
b (generic) is the one people forget — it is required for admins, so a moderator given only c for kicking will not behave as expected without it.
How does admin immunity work?
Immunity is a numeric level, not a rank list. Each admin has an arbitrary immunity value, and whether one admin can target another depends on who has the higher number.
- An admin with immunity 10 can target an admin with immunity 3.
- The admin with immunity 3 cannot target the one with 10.
- 0 always means no immunity.
- By default, admins with the same value can target each other. Change this with
sm_immunity_modeincfg/sourcemod.cfg. - Admins with the
zflag are not subject to immunity checks at all and can always target anyone.
How do I write entries in admins_simple.ini?
The syntax is authentication info, then flags, then an optional password:
"<Steam ID/!IP/Steam name>" "[immunity level:]<flag/@group>" ["password"] Worked examples from SourceMod's documentation:
"STEAM_0:1:16" "bce" //generic, kick, unban for this steam ID. no immunity
"!127.0.0.1" "5:z" //all permissions for this IP, immunity level = 5
"BAILOPAN" "abc" "Gab3n" //name BAILOPAN, password "Gab3n": gets reservation, generic, kick
"Gaben" "@Admins" //name Gaben, group Admins SourceMod supports three authentication methods: Steam ID (unique to a Steam account), IP address (semi-unique to a machine, better for LANs), and name (which requires a password). Steam ID is the correct choice for essentially every admin on a public server.
Name-based admin is not identity
A name is not proof of anything — anyone can set theirs to match. Name authentication only becomes meaningful with a password, and the password must be set before the player changes their name or they are kicked. Use Steam IDs.
Can I define admins in a more detailed format?
Yes. configs/admins.cfg uses a KeyValues format, with each admin as a block:
Admins
{
"BAILOPAN"
{
"auth" "steam"
"identity" "STEAM_0:1:2345"
"flags" "abcdef"
"immunity" "5"
"group" "Awesome Admins"
}
} | Option | Meaning |
|---|---|
auth (required) |
One of steam, name or ip — tells SourceMod how to read identity |
identity (required) |
The unique value used to find this admin |
password |
Password the user must enter |
group |
A group to inherit; more than one group line is allowed, with no @ prefix |
flags |
Default access flags |
immunity |
Default immunity level |
The admin name at the top of the block is optional and is not used internally.
For larger communities, SourceMod also supports storing admins in SQL instead of flat files, via the admin-sql-prefetch or admin-sql-threaded plugins. Only one of the two may be enabled at a time.
How do admin passwords work?
Passwords are optional. To use them, change the PassInfoVar line in addons/sourcemod/configs/core.cfg:
"PassInfoVar" "_sm1337" The admin then sets it client-side with setinfo:
setinfo "_sm1337" "Gab3n" Players can automate this with an autoexec.cfg in their own game folder — for CS:S that is under SteamApps\common\Counter-Strike Source\cstrike\cfg.
Which admin commands do I get?
These arrive with SourceMod's base plugins and need nothing extra installed.
Basic commands
| Command | Access | Format | Description |
|---|---|---|---|
sm_admin |
admin | Displays the admin menu | |
sm_ban |
ban | <#userid|name> <minutes|0> [reason] |
Bans a client |
sm_addban |
rcon | <time> <steamid> [reason] |
Adds a Steam ID to Source's ban list |
sm_banip |
ban | <ip|#userid|name> <time> [reason] |
Adds an IP to the ban list |
sm_unban |
unban | <steamid|ip> |
Unbans a Steam ID or IP |
sm_kick |
kick | <#userid|name> [reason] |
Kicks a player |
sm_map |
map | <map> |
Changes the current map |
sm_cvar |
cvar | <cvar> [value] |
Retrieves or changes a cvar value |
sm_execcfg |
config | <filename> |
Executes a config file |
sm_rcon |
rcon | <argstring> |
Executes the argument string via RCON |
sm_reloadadmins |
config | Refreshes the admin cache from all sources | |
sm_who |
admin | [#userid|name] |
Lists users and their access rights |
sm_help |
admin | [page|search] |
Lists all admin commands |
sm_cancelvote |
vote | Cancels any vote in progress |
Moderation and fun commands
| Command | Access | Format | Description |
|---|---|---|---|
sm_slay |
slay | <target> |
Kills a player |
sm_slap |
slay | <target> [damage] |
Slaps a player, optionally for damage |
sm_gag / sm_ungag |
chat | <target> |
Blocks or restores text chat |
sm_mute / sm_unmute |
chat | <target> |
Blocks or restores voice chat |
sm_silence / sm_unsilence |
chat | <target> |
Both gag and mute together |
sm_beacon |
slay | <target> |
Adds a ring around each target |
sm_burn |
slay | <target> [time] |
Sets the target on fire |
sm_rename |
slay | <#userid|name> |
Changes a player's name |
sm_say |
chat | <message> |
Say-chat message to all players |
sm_csay / sm_tsay / sm_hsay |
chat | <message> |
Centred, top-left and hint-box messages |
sm_psay |
chat | <target> <message> |
Private message to one player |
sm_chat |
chat | <message> |
Message visible to admins only |
sm_resetcvar |
cvar | <cvar> |
Resets a cvar to its default |
sm_tsay accepts a colour before the message: white, red, green, blue, yellow, purple, cyan, orange, pink, olive, lime, violet or lightblue.
Vote commands
| Command | Access | Format | Description |
|---|---|---|---|
sm_vote |
vote | <question> [answers...] |
Starts an arbitrary vote |
sm_votekick |
vote, kick | <target> [reason] |
Vote to kick a player |
sm_voteban |
vote, ban | <target> [reason] |
Vote to ban a player for thirty minutes |
sm_votemap |
vote, map | <map> [map2] [map3] |
Vote to change the map |
sm_voteff |
vote | Vote to change mp_friendlyfire |
|
sm_votealltalk |
vote | Vote to change sv_alltalk |
|
sm_votegravity |
vote | <amount> [amount2]... |
Vote to change sv_gravity |
sm_voteslay |
vote, slay | <target> |
Vote to slay a player |
sm_voteburn |
vote, slay | <target> |
Vote to burn a player |
How do I target players with admin commands?
You do not have to type full names. SourceMod resolves targets in this order — "magic targets" beginning with # or @ are processed first, and name matches happen last.
| Target | Matches |
|---|---|
name |
Exact name, or a partial name if it is unique |
#userid |
A numeric user ID from the status command |
#steamid |
A Steam ID. With colons it must be quoted: "#STEAM_0:1:4433", or use underscores: #STEAM_0_1_4433 |
@all |
All players |
@bots |
All bots |
@humans |
All non-bot players |
@alive / @dead |
All living / all dead players |
@aim |
The player you are currently aiming at |
@me / @!me |
Yourself / everyone except yourself |
Counter-Strike adds two of its own, which are among the most useful targets on a CS:S server:
| Target | Matches |
|---|---|
@ct or @cts |
All Counter-Terrorists |
@t or @ts |
All Terrorists |
Prefer user IDs over names
Name matching breaks the moment a name contains spaces, unicode, or is a substring of another player's name.
statusgives you an unambiguous numeric user ID —sm_kick #12will always hit who you meant. Note also that@alltargets everyone even if a player is literally named "@all"; to target that player you would use#@all.
Can admins run commands from chat instead of the console?
Yes, and in practice this is how admins actually work. Any command can be issued as a chat trigger: typing !ban bail in chat runs sm_ban and sends the output to chat. Using / instead of ! runs the same command but hides your message from other players.
FAQ
How do I become admin on my own Counter-Strike: Source server?
Install Metamod:Source and SourceMod, run status to find your Steam ID, then add "YOUR_STEAM_ID" "99:z" to addons/sourcemod/configs/admins_simple.ini and run sm_reloadadmins in the server console. Reconnect and type sm_admin to open the admin menu.
Does SourceMod work on Counter-Strike: Source?
Yes. AlliedModders list CS:S as supported on the current stable release of both Metamod:Source and SourceMod. CS:S is a Source 1 game, which is exactly what SourceMod targets.
Does SourceMod work on Counter-Strike 2?
No. AlliedModders' Required Versions page lists SourceMod on Counter-Strike 2 as Unsupported. Metamod:Source does support CS2 on its development branch, but SourceMod itself does not run there, so none of the admin system, flags, menu or plugin library in this article applies to CS2.
Why is my admin menu not showing when I type sm_admin?
Work through it in order: does meta list show SourceMod loaded; did you run sm_reloadadmins and see [SM] Admin cache has been refreshed.; is your Steam ID in admins_simple.ini in the STEAM_n:o:p format that status printed; and are you typing sm_admin in your client console after reconnecting. A missing b (generic) flag also produces an admin who appears to have no access.
What is the difference between admins_simple.ini and admins.cfg?
admins_simple.ini is one line per admin and is the fastest way to get running. admins.cfg uses a KeyValues block per admin and supports named options like group and immunity explicitly. Both are read by the same admin-flatfile plugin, and larger communities often move to SQL-backed admins instead.
How do I stop admins from kicking each other?
Give them immunity values. An admin can only target someone with a lower immunity value than their own, and by default equal values can target each other — change that with sm_immunity_mode in cfg/sourcemod.cfg. Anyone holding the z root flag ignores immunity entirely, so hand z out sparingly.
Do I need RCON if I have SourceMod admins?
No, and that is rather the point. RCON is one shared password that grants complete control with no accountability. SourceMod gives each admin their own identity, their own permission flags and an immunity level, which is what you want the moment there is more than one person moderating.
Where do I get plugins once SourceMod is installed?
SourceMod ships a set of base plugins that provide everything in this article. Additional plugins come from AlliedModders' community. Installing them is covered in How to install SourceMod plugins on your Counter-Strike: Source server.
What to read next
- Getting started with your Counter-Strike: Source server — first boot, ports and connecting
- Counter-Strike: Source server.cfg configuration — where each config file lives and what executes when
- How to install SourceMod plugins on your Counter-Strike: Source server — installing, enabling and debugging plugins
- How to add and rotate maps on a Counter-Strike: Source server — map cycles, FastDL and map voting
Made with 💜 by GameServerKings
Need a Counter-Strike: Source server?
Deploy an instantly-provisioned Counter-Strike: Source server on high-clock hardware — DDoS protected, no contracts, cancel anytime.
From $4.50 /month