mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 12:39:23 +00:00 
			
		
		
		
	 d91958815d
			
		
	
	
		d91958815d
		
	
	
	
	
		
			
			Cc: Randy Dunlap <randy.dunlap@oracle.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
		
			
				
	
	
		
			93 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | |
| Authorizing (or not) your USB devices to connect to the system
 | |
| 
 | |
| (C) 2007 Inaky Perez-Gonzalez <inaky@linux.intel.com> Intel Corporation
 | |
| 
 | |
| This feature allows you to control if a USB device can be used (or
 | |
| not) in a system. This feature will allow you to implement a lock-down
 | |
| of USB devices, fully controlled by user space.
 | |
| 
 | |
| As of now, when a USB device is connected it is configured and
 | |
| its interfaces are immediately made available to the users.  With this
 | |
| modification, only if root authorizes the device to be configured will
 | |
| then it be possible to use it.
 | |
| 
 | |
| Usage:
 | |
| 
 | |
| Authorize a device to connect:
 | |
| 
 | |
| $ echo 1 > /sys/usb/devices/DEVICE/authorized
 | |
| 
 | |
| Deauthorize a device:
 | |
| 
 | |
| $ echo 0 > /sys/usb/devices/DEVICE/authorized
 | |
| 
 | |
| Set new devices connected to hostX to be deauthorized by default (ie:
 | |
| lock down):
 | |
| 
 | |
| $ echo 0 > /sys/bus/devices/usbX/authorized_default
 | |
| 
 | |
| Remove the lock down:
 | |
| 
 | |
| $ echo 1 > /sys/bus/devices/usbX/authorized_default
 | |
| 
 | |
| By default, Wired USB devices are authorized by default to
 | |
| connect. Wireless USB hosts deauthorize by default all new connected
 | |
| devices (this is so because we need to do an authentication phase
 | |
| before authorizing).
 | |
| 
 | |
| 
 | |
| Example system lockdown (lame)
 | |
| -----------------------
 | |
| 
 | |
| Imagine you want to implement a lockdown so only devices of type XYZ
 | |
| can be connected (for example, it is a kiosk machine with a visible
 | |
| USB port):
 | |
| 
 | |
| boot up
 | |
| rc.local ->
 | |
| 
 | |
|  for host in /sys/bus/devices/usb*
 | |
|  do
 | |
|     echo 0 > $host/authorized_default
 | |
|  done
 | |
| 
 | |
| Hookup an script to udev, for new USB devices
 | |
| 
 | |
|  if device_is_my_type $DEV
 | |
|  then
 | |
|    echo 1 > $device_path/authorized
 | |
|  done
 | |
| 
 | |
| 
 | |
| Now, device_is_my_type() is where the juice for a lockdown is. Just
 | |
| checking if the class, type and protocol match something is the worse
 | |
| security verification you can make (or the best, for someone willing
 | |
| to break it). If you need something secure, use crypto and Certificate
 | |
| Authentication or stuff like that. Something simple for an storage key
 | |
| could be:
 | |
| 
 | |
| function device_is_my_type()
 | |
| {
 | |
|    echo 1 > authorized		# temporarily authorize it
 | |
|                                 # FIXME: make sure none can mount it
 | |
|    mount DEVICENODE /mntpoint
 | |
|    sum=$(md5sum /mntpoint/.signature)
 | |
|    if [ $sum = $(cat /etc/lockdown/keysum) ]
 | |
|    then
 | |
|         echo "We are good, connected"
 | |
|         umount /mntpoint
 | |
|         # Other stuff so others can use it
 | |
|    else
 | |
|         echo 0 > authorized
 | |
|    fi
 | |
| }
 | |
| 
 | |
| 
 | |
| Of course, this is lame, you'd want to do a real certificate
 | |
| verification stuff with PKI, so you don't depend on a shared secret,
 | |
| etc, but you get the idea. Anybody with access to a device gadget kit
 | |
| can fake descriptors and device info. Don't trust that. You are
 | |
| welcome.
 | |
| 
 |