There are, generically, three ways this might work on a modern Linux system, depending on the exact system configuration.
The ‘normal’ way that most distros are configured to use out of the box involves a DBus service called UDisks, which is, simply put, a fancy privilege separation system that lets normal users mount and unmount devices. The desktop environment and/or the file manager interact with UDisks to get a list of removable devices, then present those in a way the user can directly interact with. In some cases (Audio CDs, MTP/PTP devices, network shares, etc), there is generally a different component involved (GVFS on GNOME and most other GTK+ desktops, KIO on KDE) that handles presenting the device as a regular filesystem, and UDisks may not even be involved at all (in fact, most of the things that require this don’t involve UDisks). On systems that are set up this way, you can manually interact with UDisks using the udisksctl command. UDisks will generally honor any mount options specified for a particular device in /etc/fstab, as well as the specified mount path.
The second most common approach on modern Linux systems is systemd auto-mounts. In short, systemd watches the path where the filesystem should be mounted, and mounts it if something tries to access that path. This only works for statically configured mounts and requires an entry in /etc/fstab with appropriate options or a systemd.automount unit. It is not used much on desktops, but is relatively common for systems without a desktop that interact with removable media regularly.
The third, and most traditional option, is autofs. This is a userspace daemon (and associated kernel driver) that largely works in the same way that systemd automounts do, but has a handful of other features that systemd lacks for this purpose (most notably, it can do network share autodiscovery). It has the same general limitations as systemd auto mounts, though the configuration location is different. These days, it’s only really used on systems that need to access large, dynamically changing, networks of shares or systems that completely lack both UDisks and systemd.
udevandfuse. The rules can be found in/lib/udev/rules.d.