One of the goals of this was to define a Kiosk User account. the idea was to secure these machines that you can walk up to at the library, bank, airport, coffee shop and just login and use the internet. So I investigated how to do this with SELinux.
I demonstrated this account to Jonathan Blandford from the Fedora Desktop Team saw it and suggested it would be cool to use one of these accounts with Fast User Switching.
One problem with this, we need to be able to use this account without a password. From a security stand point. we can only protect the account if SELinux is enabled and in enforcing mode. We needed a new pam module for this. I asked Tomas Mraz to look into this and he created pam_selinux_permit
man pam_selinux_permit
PAM_SELINUX_PERMIT(8) Linux-PAM Manual PAM_SELINUX_PERMIT(8)
NAME
pam_selinux_permit - PAM module to allow/deny login depending on
SELinux enforcement state
SYNOPSIS
pam_selinux_permit.so [debug] [conf=/path/to/config/file]
DESCRIPTION
The pam_selinux module allows or denies login depending on SELinux
enforcement state.
When the user which is logging in matches an entry in the config file
he is allowed access only when the SELinux is in enforcing mode.
Otherwise he is denied access. For users not matching any entry in the
config file the pam_selinux_permit module returns PAM_IGNORE return
value.
The config file contains a simple list of user names one per line. If
the name is prefixed with @ character it means that all users in the
group name match. If it is prefixed with a % character the SELinux user
is used to match against the name instead of the account name. Note
that when SELinux is disabled the SELinux user assigned to the account
cannot be determined. This means that such entries are never matched
when SELinux is disabled and pam_selinux_permit will return PAM_IGNORE.
...
Now we can create an xguest account with disabled password. Then we can setup xdm to use pam_selinux_permit.
# useradd -Z xguest_u xguest
# cat /etc/pam.d/gdm
#%PAM-1.0
auth [success=done ignore=ignore default=bad] pam_selinux_permit.so
auth required pam_env.so
auth include system-auth
auth optional pam_gnome_keyring.so auto_start
account required pam_nologin.so
account include system-auth
...
session required pam_selinux.so open
session required pam_namespace.so
session optional pam_gnome_keyring.so
Add the xguest user to the /etcv/security/sepermit.conf
# cat /etc/security/sepermit.conf
# /etc/security/sepermit.conf
#
# Each line contains either:
# - an user name
# - a group name, with @group syntax
# - a SELinux user name, with %seuser syntax
xguest
If SELinux is in enforcing mode, you can log into this account just by clicking on the xguest user. If you try to reach this accound by any means other then xdm you will not be able to login. sshd, rshd, telnetd will all fail.
If you put the machine into permissive mode or disable selinux, you will no longer be able to login as this user. This will not effect a currently logged in user however.
You can also use Fast User Switching to switch to this user. Just add the User Switcher applet to your tool bar and select xguest. You should switch to this account and be automagically logged in.
To add additional security to this account, it would be useful to have all files/directories removed that were created by the xguest user. So if a new person uses the xguest, he can guarantee a clean environment. So we can setup pam_namespace to generate a new Homedir, /tmp and /var/tmp. Every time the X Windows session ends. You need pam_namespace.so added to /etc/init.d/gdm for this, as shown above.
Also add these lines to /etc/secuirty/namespace.conf
/tmp tmpfs tmpfs ~xguest
/var/tmp tmpfs tmpfs ~xguest
$HOME tmpfs tmpfs ~xguest
This says to generate three temporary filesystems mounted on /tmp, /var/tmp and $HOME directory for only xguest any time he logs in.
I have generated an rpm package and spec file that will set this all up for you. You can try this out at
http://people.fedoraproject.org/~dwalsh/xguest/
There are three booleans that you can set for this account.
getsebool -a | grep xguest
- browser_confine_xguest
This indicates whether the xguest account will transition to xguest_mozilla_t or not. If you turn this boolean on, xguest will be able to browse the web using firefox/mozilla. If you turn it off the account will only be allowed to run mozilla/firefox locally. You will not have any access to the net.
- browser_write_xguest_data
This will determine whether firefox can write to the home directory or not.
If this boolean is turned off firefox will only be allowed to write to .mozilla and .gnome in the home directory.
If you wanted to add a download directory you could add a file context and label it xguest_mozilla_home_t
# semanage fcontext -a -t xguest_mozilla_home_t /home/xguest/Download(/.*)?
# restorecon -R -v ~/xguest
- allow_xguest_exec_content
I have created xguest.spec and xguest-1.0.0-1.fc8.noarch.rpm
http://people.fedoraproject.org/~dwalsh/xguest/
out on
Which will set everything up for you. Try it out and tell me what you think.
nice man
however it still lacks the easinesse of other tools.
im using it to enforce security from my univ friends,
altough they can compromise the system if they live boot a cd :(
hoewver selinux have a lot of advantages and im grateful ( a bit )
that nsa has done something useful for once.
selinux is great, and i loved your article. a confined environment can
save a lot of problems, regarding local security.
it still hard to implement but its cool.
im gonna try it. good job man!!
Re: nice man
1) disable CD boot in BIOS
2) BIOS password
3) grub password
Re: nice man
>> im gonna try it. good job man!!
I think so too!