Access Control Access to hardware by unprivileged users is traditionally granted in two ways either by granting access to the special device file or allowing access through another process, using IPC acting on behalf of the user. HAL follows the latter model and uses the system-wide message bus (D-Bus) as the IPC mechanism. In addition, HAL has support for modifying the ACL's (access control lists) on a device file to grant/revoke access to users based on several criteria. Device Files If HAL is built with --enable-acl-management (requires both --enable-console-kit and --enable-policy-kit) then ACL's on device objects with the capability access_control are automatically managed according to the properties defined in . In addition, for this configuration, HAL ships with a device information file (normally installed in /usr/share/hal/fdi/policy/10osvendor/20-acl-management.fdi) that merges this capability on device objects that are normally accessed by unprivileged users through the device file. This includes e.g. sound cards, webcams and other devices but excludes drives and volumes as the latter two are normally accessed by a user through mounting them into the file system. HAL uses PolicyKit to decide what users should have access according to PolicyKit configuration; see the PolicyKit privilege definition file /usr/share/PolicyKit/policy/org.freedesktop.hal.device-access.policy on a system with HAL installed for the default access suggested by the HAL package and/or OS vendor. In addition, 3rd party packages can supply device information files to specify (via the access_control.grant_user and access_control.grant_group properties) that a given user or group should always have access to a device file. This is useful for system-wide software (such as AV streaming management) that runs as an unprivileged system user. This interface is supposed to be stable so 3rd party packages can depend on it. Device Files policies This is a list of the device file policies/rules delivered with the HAL package to manage ACL's as defined via access_control.type and the current default Policykit policies for inactive and active users. Type Description allow_inactive allow_active audio-player Directly access audio players. no yes camera Directly access digital cameras. no yes cdrom Directly access optical drives. yes yes dvb Directly access DVB devices. no yes fingerprint-reader Directly access to fingerprint reader devices. no yes floppy Directly access Floppy devices. yes yes ieee1394-avc Directly access Firewire AVC devices. no yes ieee1394-iidc Directly access Firewire IIDC devices. no yes smart-card-reader Directly access Smart Card Reader security devices. no yes joystick Directly access Joystick devices. yes yes modem Directly access serial modem devices. auth_admin_keep_always auth_admin_keep_always mouse Directly access Mouse (input) devices yes yes obex Directly access OBEX devices. no yes pda Directly access PDA devices. no yes ppdev Directly access parallel port devices. auth_admin_keep_always auth_admin_keep_always printer Directly access printer devices. no yes removable-block Directly access removable block devices. no no scanner Directly access scanners. no yes sound Directly access sound devices. no yes video Directly access Video devices. yes yes video4linux Directly access video capture devices. no yes D-Bus Interfaces If HAL is built without ConsoleKit support (e.g. without --enable-console-kit) access to the various D-Bus interfaces that provides mechanisms is only protected by the D-Bus security configuration files (e.g. using at_console to restrict to console user on Red Hat systems) and, in certain cases, restricted to the super user. If ConsoleKit support is enabled, access to D-Bus interfaces is currently hardcoded to only allow active users at the system console. If PolicyKit support is enabled, the PolicyKit library will be in charge of determining access; see the PolicyKit privilege definition files in /etc/PolicyKit/privileges on a system with HAL installed for the default access suggested by the HAL package and/or OS vendor.