---
title: "How to add admins to a Counter-Strike: Source server with SourceMod"
description: "Install Metamod:Source and SourceMod on CS:S, add yourself as admin in admins_simple.ini, and use the admin flags and commands."
url: "https://www.gameserverkings.com/knowledge-base/counter-strike-source/how-to-add-admins-with-sourcemod/"
category: "Counter-Strike: Source"
category_url: "https://www.gameserverkings.com/knowledge-base/counter-strike-source/"
published: "2026-08-07T08:25:09.323Z"
updated: "2026-08-07T08:32:30.456Z"
source_format: "markdown"
site: "GameServerKings"
---

# How to add admins to a Counter-Strike: Source server with SourceMod

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.

> [!NOTE] 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](/knowledge-base/counter-strike-source/getting-started-with-your-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.

1. Download Metamod:Source for Source 1 from `metamodsource.net`.
2. Extract the package into your game folder, so that you end up with **`cstrike/addons/metamod`**.
3. Restart the server.
4. Type `meta version` in 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.

> [!TIP] You almost certainly do not need a VDF file
> Metamod:Source 1.10.0 and later ship a `metamod.vdf` for 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. If `meta version` was recognised, you are done — do not do the VDF steps.

## Step 2: Install SourceMod

1. Download SourceMod — the stable branch, matching the current stable line (1.12).
2. Extract the package into the same mod folder, `cstrike`. You are unpacking an `addons` folder that merges with the one Metamod:Source created.
3. Restart the server completely.
4. Type `meta list` in the server console.

You should see SourceMod listed, along the lines of:

``` title="meta list — a working SourceMod install"
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`.

> [!NOTE] Linux load messages that are not actually errors
> AlliedModders document two messages that alarm people unnecessarily. A `wrong ELF class: ELFCLASS64` error is **normal** on a 32-bit dedicated server install — as long as `meta version` is recognised, Metamod:Source is installed. A failure mentioning `libgcc_s.so.1: version GCC_7.0.0 not found` happens 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 for `metamod-fatal.log` in Metamod's `bin` folder.

## Step 3: How do I make myself admin on my own CS:S server?

This is the quick start, straight from SourceMod's documentation.

1. Find your Steam ID. Connect to the server and run the **`status`** command — your ID appears in the format `STEAM_n:o:p`.
2. On the server, open **`addons/sourcemod/configs/admins_simple.ini`**.
3. Add a new line:

``` title="admins_simple.ini — root admin"
"STEAM_0:1:16"     "99:z"
```

4. Save the file.
5. Type `sm_reloadadmins` in the server console. It should answer `[SM] Admin cache has been refreshed.`
6. 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.

> [!NOTE] The file is `admins_simple.ini`, not `.cfg`
> One page of AlliedModders' own documentation refers to `admins_simple.cfg`. The file is `admins_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_mode` in `cfg/sourcemod.cfg`.
- Admins with the `z` flag 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:

``` title="admins_simple.ini — syntax"
"<Steam ID/!IP/Steam name>"  "[immunity level:]<flag/@group>"  ["password"]
```

Worked examples from SourceMod's documentation:

``` title="admins_simple.ini — examples"
"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.

> [!WARNING] 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:

``` title="admins.cfg"
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`:

``` title="core.cfg"
"PassInfoVar"			"_sm1337"
```

The admin then sets it client-side with `setinfo`:

``` title="Client console"
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 |

> [!TIP] Prefer user IDs over names
> Name matching breaks the moment a name contains spaces, unicode, or is a substring of another player's name. `status` gives you an unambiguous numeric user ID — `sm_kick #12` will always hit who you meant. Note also that `@all` targets 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](/knowledge-base/counter-strike-source/how-to-install-sourcemod-plugins/).

## What to read next

- [Getting started with your Counter-Strike: Source server](/knowledge-base/counter-strike-source/getting-started-with-your-server/) — first boot, ports and connecting
- [Counter-Strike: Source server.cfg configuration](/knowledge-base/counter-strike-source/configuration-overview/) — where each config file lives and what executes when
- [How to install SourceMod plugins on your Counter-Strike: Source server](/knowledge-base/counter-strike-source/how-to-install-sourcemod-plugins/) — installing, enabling and debugging plugins
- [How to add and rotate maps on a Counter-Strike: Source server](/knowledge-base/counter-strike-source/how-to-add-and-rotate-maps/) — map cycles, FastDL and map voting

---

Made with 💜 by GameServerKings
