KDE System Administration/Kiosk/Introduction
The KDE Kiosk is a framework that has been built into KDE since version 3. It allows administrators to create a controlled environment for their users by customizing and locking almost any aspect of the desktop which includes the benign such as setting and fixing the background wallpaper, the functional such as disabling user log outs and access to the print system and the more security conscientious such as disabling access to a command shell.
This kind of framework is vital to maintain and increase KDE's propagation into areas such as business and enterprise environments and school and university laboratories. Other obvious areas of interest where a restricted desktop environment is required or desired would be the likes of Internet cafés, public access terminals and kiosks.
KDE's Kiosk framework is controlled by entries in various configuration files or through a GUI application, the Kiosk Admin Tool. In this article I will discuss the layout of KDE's configuration files and how to edit them to enable Kiosk's features. I will also discuss the various aspects of the desktop environment that can be customized and/or locked using the Kiosk framework. Once the reader understands how the Kiosk framework actually works through KDE's configuration files, we will discuss the Kiosk Admin Tool for those that prefer a GUI interface. This tool also allows administrators to more easily set-up Kiosk profiles and assign them system wide, per-user or per-group.
KDE's Configuration File Structure and Hierarchy
All KDE applications use the same API to create, access and alter their configuration files. As such, all configuration files are stored in predetermined directories and they share the same syntax and structure. They are organised into groupings of key-value pairs. For example, let us examine some of the settings for the KDE desktop background stored in ~/.kde/share/config/kdesktoprc:
[Desktop0] Wallpaper=/usr/kde/share/wallpapers/KDE34.jpg WallpaperMode=Scaled
The Desktop0 group as shown contains two key-value pairs to indicate the image to be used as the wallpaper and how it should be displayed. The beginning of a group is indicated by placing its name in square brackets and that group ends when the next one begins or when the end of the configuration file is reached. Both the key and its value may contain spaces but all whitespace immediately before and after the equals sign and at the end of the line are ignored.
KDE configuration files can be stored in a number of possible directories and configuration files with the same name may exist in the different directories. There is a predetermined order in which these locations are checked for configuration files and KDE combines configuration files of the same name on a key-by-key basis; this is known as "cascading configuration". If the same key is defined in more than one of the configuration files then the key value read from the directory tree with the highest precedence will be used.
Two variables are used to indicate which directories should be searched for configuration files: $XDG_CONFIG_HOME is a cross-desktop environment variable used to locate configuration files in the user's home. $XDG_DATA_HOME defines the directory where user specific data should be stored.
The cascading nature of KDE's configuration files allows system administrators to set system wide defaults while ensuring that the user's custom configuration settings will always override these system defaults. It is also the basis of the Kiosk framework as configuration entries may be marked as "immutable" - entries in a user's configuration file in $XDG_CONFIG_HOME that have been marked as immutable in a system level directory will not be read and will therefore have no effect.
Let us continue with the desktop background example and, as the system administrators of an Internet café, we want to ensure that our logo or our sponsor's logo is always the desktop background and that it cannot be changed by our customers. In one of the system level directory trees ($KDEDIRS), we would edit the file /share/config/kdesktoprc so that it contained:
[Background Common] CommonDesktop[$i]=true [Desktop0] Wallpaper[$i]=/usr/kde/share/wallpapers/our_logo.jpg WallpaperMode[$i]=Scaled
Appending '[$i]' to the configuration key marks it as immutable. As configuration files from $KDEDIRS are read before $KDEHOME, the background is now "locked down" and and any custom settings made by a user in $KDEHOME/share/config/kdesktoprc, either directly or though a configuration dialog, will not be read by the configuration system.
Configuration options can also be marked immutable by group and by file. To mark a group as immutable, we append '[$i]' to the group name:
[Desktop0][$i] Wallpaper=/usr/kde/share/wallpapers/KDE34.jpg WallpaperMode=Scaled
Similarly, we can mark an entire configuration file as immutable by placing '[$i]' on a line of its own at the beginning of the file; KDE will now ignore a configuration file of the same name in the user's KDE configuration directory.
Setting default configuration options for KDE applications is just as easy as fixing the desktop background. We could lock Konqueror's homepage setting to our Internet café's homepage by setting the following in a file called konquerorrc in one of the system directory trees:
Any setting that can be changed or customized in an application is one that can be locked down using the Kiosk framework. Examine the contents of the various configuration files that can be found under $KDEHOME/share/config/ to get a feeling for KDE application configuration settings.
You should also bear in mind that most applications will need to be restarted for configuration settings to take effect. For changes to configuration files such as kdesktoprc and kdeglobals (introduced in the next section) you will need to log out and back into KDE for changes to be applied.
The information presented in this section will allow you to set system defaults and lock them if necessary for any KDE application. However, this is only the proverbial tip of the iceberg of the KDE Kiosk system and in the following sections we will cover many more of its capabilities.
KDE Action Restrictions
One of KDE's strongest features is the fact that it is "an integrated desktop environment". This means that all of its applications share the same 'look-and-feel' so that once you have learned how to use one KDE application, learning the next is even easier. This common functionality - standardised menus and toolbars, integrated help system, etc â is built around the concept of "actions".
For example, one can open a file by selecting the 'File->Open...' menu option, by clicking on the 'File Open' toolbar icon or by pressing 'CTRL+O'. Whichever way you choose, each option simply activates the file_open action.
All KDE actions can be restricted through the Kiosk system by placing appropriate entries in the /share/config/kdeglobals file in a system level directory. We could disable the file open action by adding the following entry:
[KDE Action Restrictions][$i] action/file_open=false
This change can be visibly seen in Kate's 'File' menu and toolbar which are shown in Figs. 2 and 3.
<img src="kiosk-lp/unrestricted.jpg" width="250" border="0" height="286" alt="Image of an unrestricted menu and toolbar" />
<img src="kiosk-lp/restricted.jpg" width="250" border="0" height="287" alt="Image of a restricted menu and toolbar" />
There are currently over 120 actions that can be restricted in KDE 3.4 and these include all standard file options, editing options, Internet and file browsing actions, the use of bookmarks and access to the help system. A full list can be found in the kdecore/doc/README.kiosk file of the kdelibs package source code for your current KDE version (available from http://developer.kde.org/source/).
Some KDE applications, such as system configuration front ends like KUser, need to be run as the root user. These applications would be unnecessary in an Internet café and they can be disabled with:
[KDE Action Restrictions][$i] user/root=false
The ability to print documents can be blocked via the action file_print and access to the printing system/backend can be blocked by setting the print/system to false. One can also disable access to the printing properties dialogue, the ability to print more than one copy, etc. These are all referenced in the kdecore/doc/README.kiosk file.
A few other actions that are worthy of individual mention in the context of Internet cafés and similar environments are:
- Defines whether the user can start a shell for entering commands, whether the "Run Command" option (Alt-F2) can be used to run shell-commands and arbitrary executables and whether executables placed in the user's Autostart folder will be executed.
- Defines whether a user will be able to end the KDE session.
- Defines whether a user will be able to lock the screen.
- Controls access to the "Run Command" option.
- Whether or not toolbars may be moved around by the user.
Users of public access terminals and Internet cafés will undoubtedly want to keep their browsing history to themselves. You should carefully consider settings such as the history sidebar, how cookies are handled and whether or not to use a cache. Once you have made your choices, set these options in konquerorrc and mark them as immutable. Also, if you are a regular user of Konqueror then you know that it has a very useful feature in that it remembers the URLs you enter in the "Location" bar. In a public environment, set the action lineedit_text_completion to false so that text boxes do not remember previously entered information.
One may also wish to set the action editable_desktop_icons to false as it defines whether icons on the desktop can be moved, renamed, deleted or added by users. Be sure to either move the desktop directory and/or to make it read-only (usually $HOME/Desktop).
KDE URL Restrictions
The KDE Kiosk system allows system administrators to control access to specific URLs based on the referrer, the protocol, the host and the path through entries in the kdeglobals file. Although some of these tasks may be more appropriate for a proxy server or a firewall, this functionality becomes incredibly useful when you consider the fact that KDE treats all locations as URLs. For blocking access to websites, one might use the following example:
Note this, only affects KDE applications, such as Dolphin or Konqueror. Other browsers are not affected.
[KDE URL Restrictions][$i] rule_count=2 rule_1=open,,,,http,*.hotmail.msn.com,,false rule_2=open,,,,http!,webmail.college.com,,false
The first rule blocks all http and https access to any URL that contains .hotmail.msn.com in the host part. Specifying one protocol will also match similar protocols that start with the same name; so specifying http will also include https. Rule 2 above blocks only http and thus forces the user to use https (assuming it is supported). The above rules could be used as a basis, for example, to block all access to third part web-based e-mail clients and force users to use a company or college provided virus-scanned e-mail account over https. If, for example, an Internet café took sponsorship from a search engine then its system administrators could use similar rules to block access to that search engine's competitors.
The format for URL restrictions is:
rule_N=<action>,<referrer protocol>,<referrer host>,<referrer path>, <protocol>,<host>,<path>,<enabled>
Any option that is left blank will match all by default. As we saw in the example above, wild cards may be used for host names. Specifying a path will match all URLs that begin with that path unless an exclamation mark is placed at the end of the path.
As I mentioned, KDE treats all locations as URLs: for example Internet addresses are URLs with the http or https protocol whereas local files on the hard drive are URLs using the file protocol. Access to the local filesystem can be restricted using rules such as the following:
[KDE URL Restrictions][$i] rule_count=6 rule_1=open,,,,file,,,false rule_2=list,,,,file,,,false rule_3=open,,,,file,,$HOME,true rule_4=list,,,,file,,$HOME,true rule_5=open,,,,file,,$TMP,true rule_6=list,,,,file,,$TMP,true
These rules will only allow the user to browse and access files stored in their home directory. We also allow access to the temporary directory used by KDE to ensure normal operation. If you are implementing a security policy then these rules should be used in conjunction with other rules such as restricted shell access.
KDE Control Module Restrictions
Almost all aspects of the K Desktop Environment can be configured and customized through the "System Settings". Each "group" of settings, such as "Screens", "Colours", "Fonts", etc as shown in Fig. 4, correspond to a system settings module and each of these modules can be locked down through the Kiosk framework.
As an example, a way of preventing users from changing their mouse settings would be to lock down that system settings module:
Add the following to the global kde5rc file, in the heirachy listed above.
[KDE Control Module Restrictions][$i] mouse.desktop=false
In fact, the users will not even see an option to configure the mouse in System settings. Run the command 'kcmshell5 --list' for a list of available modules and use the format <module-name>.desktop in the configuration file. In most public access/café environments, one will probably want to lock down almost all control centre modules.
Figure 4. The System Settings application interface.
KDE's Kiosk framework is an essential tool for any system administrator who is maintaining or deploying the Plasma in a multi-desktop/multi-user scenario and/or in an environment where users cannot be trusted. By preventing users from changing default settings and locking down settings that may pose a security risk, a system administrator can significantly reduce the amount of time that will be spent "maintaining and repairing" each desktop as well as ensuring that each user has a common and familiar desktop environment every time they sit down to the computer.
Template:CC-BY-SA © 2005 Barry O'Donovan
Template:CC-BY-SA © 2016 David Edmundson
Template:CC-BY-SA © 2016 Marco Martin
Template:CC-BY-SA © 2016 Kai Uwe Broulik