How to Restrict CD-ROM and USB Access in Ubuntu Linux: A System Administrator’s Guide


2 views

In enterprise environments, controlling removable media access is critical for data security and compliance. Ubuntu Linux provides multiple mechanisms to restrict CD-ROM and USB storage devices while maintaining root access.

The most robust approach uses udev rules to prevent device initialization:

# Create a new udev rule file
sudo nano /etc/udev/rules.d/85-no-usb-cdrom.rules

# Add these rules (for USB mass storage and CD-ROM)
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", RUN+="/bin/sh -c 'echo 0 >/sys$env{DEVPATH}/authorized'"
SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", RUN+="/bin/sh -c 'echo 0 >/sys$env{DEVPATH}/authorized'"

Alternatively, modify device file permissions:

# For CD-ROM devices
sudo chmod 600 /dev/sr*

# For USB storage (typically appears as /dev/sd* after insertion)
sudo chmod 600 /dev/sd*

# Make changes persistent
sudo nano /etc/rc.local
# Add before 'exit 0':
chmod 600 /dev/sr*
chmod 600 /dev/sd*

For stricter control, blacklist drivers:

# Block USB storage
echo "blacklist usb-storage" | sudo tee -a /etc/modprobe.d/blacklist.conf

# Block CD-ROM
echo "blacklist sr_mod" | sudo tee -a /etc/modprobe.d/blacklist.conf

# Update initramfs
sudo update-initramfs -u

After implementing any method:

# Reload udev rules
sudo udevadm control --reload-rules
sudo udevadm trigger

# Verify module blacklisting
lsmod | grep -E 'usb-storage|sr_mod'

# Check device permissions
ls -l /dev/sd* /dev/sr*

To allow specific users while blocking others:

# Create storage access group
sudo groupadd storageaccess

# Add authorized users
sudo usermod -aG storageaccess username

# Set device ownership
sudo chown root:storageaccess /dev/sd* /dev/sr*

# Set permissions
sudo chmod 660 /dev/sd* /dev/sr*

Implement logging for access attempts:

# Add to /etc/rsyslog.conf
kern.* /var/log/storage_access.log

# Create audit rule for USB/CD access
sudo nano /etc/audit/rules.d/storage.rules
-a always,exit -F arch=b64 -S mount -F dir=/media -F uid>=1000 -k storage_access

In Linux systems, block devices like CD-ROM drives and USB storage are typically mounted under /dev with names like /dev/sr0 (CD-ROM) or /dev/sdb1 (USB). By default, these devices are often world-readable, which poses security risks in controlled environments.

The most robust approach is creating custom udev rules to change device permissions:

# Create a new udev rule file
sudo nano /etc/udev/rules.d/99-restrict-removable.rules

# Add these rules:
# For CD-ROM devices
KERNEL=="sr[0-9]*", MODE="0600", OWNER="root", GROUP="root"

# For USB storage devices
KERNEL=="sd[b-z]*", MODE="0600", OWNER="root", GROUP="root"

After saving, reload udev rules:

sudo udevadm control --reload-rules
sudo udevadm trigger

For already mounted devices, modify /etc/fstab:

# Example entry for CD-ROM
/dev/sr0 /media/cdrom iso9660 ro,noauto,user=none 0 0

The user=none option prevents non-root users from mounting.

To completely disable USB storage at kernel level:

echo "blacklist usb-storage" | sudo tee /etc/modprobe.d/disable-usb-storage.conf
sudo update-initramfs -u

This requires a reboot to take effect.

Create a special group for authorized users:

sudo groupadd mediadev
sudo usermod -aG mediadev alloweduser

# Then modify device permissions
sudo chgrp mediadev /dev/sr0
sudo chmod 0640 /dev/sr0

Test the restrictions by attempting to access devices as normal user:

sudo -u nobody dd if=/dev/sr0 of=/dev/null bs=1 count=1
# Should return "Permission denied"
  • Implement USBGuard for more granular USB device control
  • Consider using AppArmor or SELinux for mandatory access control
  • Regularly audit device access with auditd

If devices become inaccessible even to root:

# Check current permissions
ls -l /dev/sd* /dev/sr*

# Temporarily restore access
sudo chmod 644 /dev/sr0