Meaning of permissions in SELinux(Ver 1)
Meaning of SELinux's permissions(operations that are restricted by permissions) are
analyzed and shown in this document.
For feedback, please send e-mail to ynakam@gwu.edu.
- Notation
       read(2) means, you should refer to Linux man pages. This
example means man 2 read.
 
- Access vector permission
       The term Access vector permission means, permission defined
       in SELinux(such as read,write,send_msg). Access vector
       permission  is often called simply permission  in this
       document. The usage of the term is from [5].
 
 
The design SELinux Policy Editor[1] is based on non-LSM based SELinux released at the time of Jan 2003. After that SELinux is re-implemented
using LSM. As a result, meaning of access vector permissions had been changed, and many
permissions are added. Before re-designing SELinux Policy Editor, we have to understand the meaning of permissions.  However, the meaning of them
is not well documented. [2] is a good
documentation of implementing SELinux, but the meaning of access
vectors are not fully covered. [3] is a quick reference of
permissions, but the description is short.  Therefore, I decided
to analyze the meaning of all permissions.
The version of SELinux used is that in Linux kernel 2.6.13. Analysis of permissions are based on source code analysis
of Linux 2.6.13.  The process is following.
- Find value corresponding to the permission from
	security/selinux/include/ av_permissions.h
	In av_permissions.h, permission is defined as a constant
	value. For example, when we want to analyze permission 	read for object class file. 
	We can find following in av_permissions.h.
	
	#define FILE__READ     0x00000002UL
 
- Analyze how the constant is used.
	In the example above, we analyze how FILE__READ is used in
	source code. And find out how the permission is checked. 
	lxr [4] is useful. 
 
In some cases above process is not enough. 
- Object class capability
       For permissions in object class capability, constants
       CAPABILITY__* are defined in av_permissions.h. However, we can
       not find such constants in source code. We tend to think those
       are not checked, but they are
       actually checked. They are checked in capable Linux
       function. Let's see permission cap_sys_admin as an
       example. The permission is checked in the statement        capable(CAP_SYS_ADMIN), then selinux_capable and
       task_has_capability are called, and permission 
       cap_sys_admin is checked. In the check, values defined in
       av_permissions.h do not appear explicitly.
 
- Object classes related to files and sockets
       In these object classes, some permissions are inherited from
       object class file. 
       We have to pay attention to analyze them. Such permissions
       use value FILE__*.  
       For example, when we analyze permission read in object
       class tcp_socket, read  permission is inherited
       from file. We can find TCP_SOCKET__READ in
       av_permissions.h. However, we have to also analyze the behavior
       of FILE__READ. 
 
In the following subsection, operations restricted by permissions are
described.
Object classes related to file are summarized in Table 1.
Table 1:
Object classes related to file
| Object class | 
For what kind of file? | 
| file | 
Normal file | 
| blk_file | 
Block device file | 
| chr_file | 
Character device file | 
| fifo_file | 
Special file for FIFO | 
| lnk_file | 
Symbolic link | 
| sock_file | 
Special file for Unix domain socket | 
| dir | 
Directory | 
 
 
- ioctl
       Control attribute of device. It is checked in ioctl(2).
 
- read
       Read file. It is checked in read(2).
 
- write
       Write to file. It is checked in write(2).
 
- create 
       Open and create new file, directory and symbolic link.        
 
- getattr
       Get file attribute (such as last modified). It is checked in stat(2).
 
- setattr
       Modify file attribute.  It is checked in kernel functions that
       changes file attribute.
 
- lock
       Lock file. It is checked in flock(2) and fcntl(2)
 
- relabelfrom, relabelto
       Relabel file. When domain A relabel file whose type is B to type
       C. A must have relabelfrom to B and relabelto to C.
 
- append
       Append to file. It is checked when opening file as append mode.
 
- unlink
       Delete file. It is checked in  unlink(2).
 
- link
       Create hard link. When domain A want to create hard link for file
       whose type is B, A must have link permission to B.
 
- rename
       Rename file. It is checked in rename(2). rename(2) is used in
       such as mv command.
 
- execute
       Execute file with domain transition. Link shared library.
 
- swapon
       It is not used. It is defined in SELinux source as
       FILE__SWAPON but not used. Originally, it controlled swapon system
       call, but this was dropped when merged into mainline Linux
       kernel. For domain A to do swapon system call successfully, A need getattr
       read and write  permissions. So without swapon permission, swapon system call can be restricted.
 
- quotaon
       Enable quota to disk device file. It is checked in quotactl(2)(Q_QUOTAON flag).
 
- mounton
       Use directory as a mount point. It is checked in mount(2).       
 
   
- execute_no_trans
	     Execute file without domain transition.
 
- entrypoint
	     Use file as a entry point for domain transition.
 
- execmod
	  Attempt to load executable in specific condition. The condition
	  is quoted from [2] below. It first checks whether the caller is attempting to make executable a file mapping that has had some
	  copy-on-write done, indicating that it may include modified content. If so, then the hook function
	  performs a file execmod permission check.
   
 
- add_name
	Add entry to directory. It is checked in rename(2) and link(2).
 
- remove_name
	Remove entry from directory. It is checked in unlink(2).
 
- reparent
	Change parent directory. It is checked in rename(2).
 
- search
	When opening file and directory or changing directory, search 
	permission is checked.  search  is checked to all ancestor
       directories. For example, when cd /etc/selinux/seedit/
       command(suppose the domain is foo_t) is run, search  is
       checked to /, /etc, /etc/selinux and /etc/selinux/seedit.
 
- rmdir
	Remove directory. It is checked in rmdir(2).
 
In SELinux,object classes are related to sockets. SELinux categorizes
sockets by protocol family and type. protocol family is domain and
type is type  in socket system call 2.
Table 2 shows relationship between object class,
protocol family and type. 
Table 2:
Object classes related to socket, partly quoted from [2]
| Object class | 
Protocol Family | 
Type | 
| tcp_socket | 
PF_INET, PF_INET6 | 
SOCK_STREAM | 
| udp_socket | 
PF_INET, PF_INET6 | 
SOCK_DGRAM | 
| rawip_socket | 
PF_INET, PF_INET6 | 
SOCK_RAW | 
| unix_stream_socket | 
PF_UNIX | 
SOCK_STREAM | 
| unix_dgram_socket | 
PF_UNIX | 
SOCK_DGRAM | 
| packet_socket | 
PF_PACKET | 
all | 
| key_socket | 
PF_KEY | 
all | 
| netlink_route_socket | 
PF_NETLINK | 
NETLINK_ROUTE | 
| netlink_firewall_socket | 
  | 
NETLINK_FIREWALL | 
| netlink_tcpdiag_socket | 
  | 
NETLINK_TCPDIAG | 
| netlink_nflog_socket | 
  | 
NETLINK_NFLOG | 
| netlink_xfrm_socket | 
  | 
NETLINK_XFRM | 
| netlink_selinux_socket | 
  | 
NETLINK_SELINUX | 
| netlink_audit_socket | 
  | 
NETLINK_AUDIT | 
| netlink_ip6fw_socket | 
  | 
NETLINK_IP6_FW | 
| netlink_dnrt_socket | 
  | 
NETLINK_DNRTMSG | 
| netlink_kobject_uevent _socket | 
  | 
NETLINK_KOBJECT_UEVENT | 
| netlink_socket | 
  | 
ALL other types | 
| socket | 
all sockets unmatched above | 
 
 
The short description of each sockets are below.
- tcp_socket, udp_socket
      These are trivial, TCP and UDP socket. 
 
- rawip_socket, packet_socket
       These are related to socket to send raw packets. These can be used
       by attacker to create fake packet. 
 
- unix_stream_socket& unix_dgram_socket
       These are unix domain socket, socket to communicate with
       processes in the same machine.
 
- netlink*socket
       These are related to netlink socket. Netlink socket is a socket
       to communicate with kernel.
 
- key_socket
       This is a socket used for IPSEC.
 
- socket
       Sockets that does not match all of above. From socket(2), 
       unmatched sockets will be those whose protocol family are PF_IPX(IPX-Novell protocols), PF_X25(ITU-T X.25
       /ISO-8208 protocol), PF_AX25(Amateur radio AX.25 protocol),
       PF_ATMPVC(Access to raw ATM PVCs) and PF_APPLETAL(Appletalk).   
 
3.2.2 permissions common to sockets
- relabelfrom, relabelto
       These permission is defined, bot not used.
       
 
- Target type is domain who created socket 
       For following , target type is domain who created socket. 
 
- read
	  Read data from socket. This is checked in system call
	  recvmsg. In other system calls related to socket read(such as recvfrom), recvmsg
	  call are internally used.
 
- write
	  Write data to socket. This is checked in system call
	  sendmsg. sendmsg is internally used in other system calls
	  related to socket write.
 
- create
	  Create socket. This is checked when socket is created.
 
- getattr
	  Get name of socket by  getsockname and getpeername system call.
 
- bind
	  Usage of bind system call. bind system call is to give name to
	  socket.
 
- connect
	  Usage of connect system call. connect system call is used to
	  initiate network connection
 
- listen, accept
	  Usage of listen and accept system call. These calls are used to
	  wait network connection.
 
- getopt
	  Get socket option by getsockopt system call.
 
- setopt
	  Set socket option by setsockopt system call.
 
- shutdown
	  Terminate connection by shutdown system call.
 
- ioctl
	  Set and get attribute of socket by ioctl system call.
 
- append
	  open socket with O_APPEND option,but it does not make sense
	  for socket.
 
- lock
	  Lock file descriptor for socket by flock and fcntl system call.
 
- setattr
	  Set inode attribute of socket.
 
 
As an example, let's see when a_t domain communicate b_t
       domain by TCP. 
       For convenience of explanation, we see
       only create and write permissions. 
       
- a_t domain process open TCP socket, and establish connection with
	      process whose domain is b_t
	      TCP socket is created, and create permission is
	      checked. The created socket has type a_t.
	      allow a_t a_t:tcp_socket create; is necessary to
	      allow it.
 
- a_t domain write data to socket.
	      write  permission is checked.
	      allow a_t a_t:tcp_socket write; is necessary to
	      allow this operation. Note that target type is not
	      b_t, because type of socket which a_t is writing is 	      a_t.	      
       
 
 
- Target type is domain of peer socket
       
- sendto
	      Connect by connect call and send data by sendmsg
	      call. Note that this permission is checked only in unix
	      data gram socket.
	       
       The target type of above permission is domain of peer socket. 
       For example, when domain a_t want to send data to domain b_t,
       permission check is done using domain:a_t, type:b_t,
       objectclass:unix_dgram_socket, permission:sendto . This
       means communication between domains are checked. To allow this       
	
       allow a_t b_t:unix_dgram_socket sendto;
       must be described in policy.         
 
- Target type is port
       In following permissions, type of port is used as target
       type. In SELinux, port numbers are labeled.
- name_bind
	       Open port.
 
- recv_msg
	       Receive data from port. This is checked in kernel
	       function processing incomming data. Target type is type of source port.
 
- send_msg
	       Send data to port. Target type is type of destination port.
       
 
       
       For example,
       When a_t domain want to receive data from peer whose port is tcp 80(assuming type is http_port_t),
       
		allow a_t httpd_port_t:tcp_socket recv_msg;
       must be specified.
 
For these object classes, all permissions are the same as those
specified in section 3.2.2.
In addition to permissions in 3.2.2, following are
defined. These permissions are checked between subject domain and
domain of peer. 
- connectto
	Connect to peer by connect system call
 
- newconn
	This is not used. Defined as UNIX_STREAM_SOCKET__NEWCONN,
	but not actually used.
 
- acceptfrom
	This is not used. Defined as UNIX_STREAM_SOCKET__ACCEPTFROMN,
	but not actually used.
 
In addition to permissions in 3.2.2, following are
defined. 
- connectto  
	  Defined as TCP_SOCKET__CONNECTTO, but not used.
 
- newconn
	  Defined as TCP_SOCKET__NEWCONN but not used.
 
- acceptfrom
	  Defined as TCP_SOCKET__ACCEPTFROM but not used.
 
- node_bind 
	  Name socket by bind system call. Target type is type of node(Network address).
	  
 
- name_connect
	  Begin network connetion by connect system call. Target type is
	  port number.
   
 
In addition to permissions in 3.2.2, node_bind is  defined.
The meaning of node_bind is the same as that of tcp_socket.
permissions are the same as 3.2.2.
In addition to permissions in 3.2.2, following permissions are defined. These permissions are checked when sending
message to CAPP(Controlled Access Protection Profile)[8] audit system.
- nlmsg_read
	Send message  to query the status of LauS.
 
- nlmsg_write
	Send message to change configuration of LauS.
 
- nlmsg_relay
        Send user space log  message to LauS. 
 
- nlmsg_readpriv
	Send message to obtain configuration of LauS.
 
netlink_route_socket is used to restrict access to netlink socket that
is used to configure kernel routing table. In addition to permissions in 3.2.2, following permissions are defined.
- nlmsg_read
       Send messsage to request to read kernel routing table.
 
- nlmsg_write
       Send message to request to write kernel routing table.
 
This object class is to control access to IPv4 firewall. 
In addition to permissions in 3.2.2, following permissions are defined. 
- nlmsg_read 
	       This is defined but not used.
 
- nlmsg_write
	       Send message whose mode is IPQM_VERDICT or IPQM_MODE
	       defined in ip_queue.h. 
 
 
netlink_tcpdiag_socket is used to restrict usage of  netlink socket
for network monitoring kernel module enabled by CONFIG_IP_TCPDIAG
kernel compile option.
In addition to permissions in 3.2.2, following permissions are defined. 
- nlmsg_read
	  Send message requesting to get infomation about TCP and
	  DCCP protocol. 
	   
- nlmsg_write
 This is defined but not used.
 
 netlink_tcpdiag_socket is used to restrict usage of
netlink_xfrm_socket to configure IPSEC.In addition to permissions
in 3.2.2, following permissions are defined. 
- nlmsg_read
	  Send message to request to read  IPSEC parameter.
 
- nlmsg_write
	  Send message to request to set IPSEC parameter.
 
This object class is defined, but not used.
Following permissions are defined. In these, target type is network
interface3.
- tcp_recv
	This is checked when tcp socket receives data from network
	interface.
 
- tcp_send
	This is checked when tcp socket sends data to network
	interface.
 
- udp_recv
	This is checked when udp socket receives data from network
	interface.
 
- udp_send
	This is checked when udp socket sends data from network
	interface.
 
- rawip_recv
	This is checked when raw socket(RAW socket and packet socket) receives data from network
	interface.
 
- rawip_send
	This is checked when raw socket sends data from network
	interface.
 
Following permissions are defined. In these, target type is network
node(IP address).
- tcp_recv,        tcp_send, udp_recv,udp_send,
	   rawip_recv,        rawip_send
	   The same as those in class netif except target type is type
	   of node.
 
- enforce_dest
	   Defined as NODE__ENFORCE_DEST but not used.
 
- ipc 
       Defined SECCLASS_IPC,but not used. 
 
- msgq
       IPC message queue. SELinux labels  msgq. The type is the
       same as doamin of creating process.
 
- sem
       IPC semaphore.SELinux labels semaphore msgq. The type is the
       same as doamin of creating process.
 
- shm
       IPC shared memory. SELinux labels shared memory. The type is the
       same as domain of creating process.
 
- msg
       Message used in message queue. SELinux labels message. The type
       is the same as message queue to which a process is going to send
       to msgq.
 
- create
       Create IPC object.
 
- destroy
       Destroy IPC object by shmctl(option IPC_RMID ).
 
- getattr
       Get information about IPC by shmctl, msgctl and semctl (option IPC_STAT) 
 
- setattr
       Change attributie of IPC object by shmctl,msgctl and
       semctl(option IPC_SET)
 
- read
       Meaning of this is different depending on object class.
       
- shm
	      Attach shared memory to process by using shmat SHM_RDONLY option.
 
- msgq
	      Read message from message queue.
 
- sem
	      Get value of semaphore by semctl(GETALL option) and semop.
       
 
 
- write
       Meaning of this is different depending on object class.
       
- shm
	      Attach shared memory to process by shmat not SHM_RDONLY option.
 
- msgq
	      Send message to message queue.
 
- sem
	      Change value of semaphore by semctl(SETALL option) and semop.
       
 
 
- associate
       
- sem
	      In addition to operations restricted by getattr, get id by
	      semget.
 
- shm
	      In addition to operations restricted by getattr, get id by shmget
 
- msgq
	      Get id by msgget
       
 
 
- unix_read
       Operations that read ipc object. This is checked when ipcperms
       kernel function(with S_IRUGO flag) is called. ipcperms function
       with S_IRUGO flag is called when ipc object is read.       
 
- unix_write
       Operations that write or modify ipc object. This is checked when
       ipcperms kernel function(with S_IWUGO flag) is called. ipcperms function
       with S_IWUGO flag is called when ipc object is written or modified.       
 
In addition to permissions common to IPC, enqueue is defined.
- enqueue
	       This is the same as write.
 
There are only two permissions in msg. Object classes common to IPC
    are not used.
- send
	  This is the same as write of msgq, except that target type is
	  type of message.
 
- receive
	  This is the same as read of msgq, except that target type is
	  type of message.
 
As a target type type of message is used above. However, by default,
type of message is the same as type of msgq. So, above permissions
are same as write and read for msgq.
permissions are the same as those common to IPC.
In addition to permissions common to IPC, lock is defined.
- lock
	       Lock shared memory by shmctl with SHM_LOCK or
	       SHM_UNLOCK option.	       
 
 
- chown
	  Change owner of file by chown. 
 
- dac_override
	  Skip ordinary Linux's permission check(DAC). 
 
- dac_read_search
	  Skip ordinary Linux's permission check about read and
	  directory search. 
 
- fowner
	  
- Skip permission check in chmod and utime
 
- Change acl(Posix ACL)
		   
 
- fsetid
	  Some operations related to setuid.Quoted from capabilities(7):	  
	  Don't  clear  set-user-ID  and  set-group-ID bits when a file is
              modified; permit setting of the  set-group-ID  bit  for  a  file
              whose  GID  does not match the file system or any of the supple-
              mentary GIDs of the calling process.
 
- kill
	  Skip permission check about kill. The same as CAP_KILL
 
- setgid
	  Change GID for process and socket. Quoted from
	  capabilities(7):     Allow  arbitrary manipulations of process GIDs and supplementary
              GID list; allow forged GID when passing socket  credentials  via
              Unix domain sockets.
 
- setuid
	  Change UID for process and socket. The same as CAP_SETUID.
	  Quoted from capabilities(7):Allow arbitrary manipulations of process UIDs (setuid(2), etc.);
	  allow forged UID when passing socket credentials via Unix domain
	  sockets.
 
- setpcap
	  Change capability. The same as CAP_SETPCAP. Quoted from capabilities(7):	  Grant  or  remove any capability in the caller's permitted capa-
	  bility set to or from any other process.
 
- linux_immutable 
	  Set immulable flag on files that support immutable flag.  The
	  same as CAP_LINUX_IMMUTABLE.
 
- net_bind_service
	  Bind well known port.    The same as CAP_NET_BIND_SERVICE.
 
- net_broadcast
	  Not used.
 
- net_admin
	  The same as  CAP_NET_ADMIN. Quoted from capabilities(7):	  Allow various network-related operations (e.g.,  setting  privi-
	  leged  socket options, enabling multicasting, interface configu-
	  ration, modifying routing tables). 
 
- net_raw
	  Use raw and packet sockets. 
 
- ipc_lock
	  Memory lock using mlock, mlockall, shmctl. The same as
	  CAP_IPC_LOCK.
 
- ipc_owner
	 Skip permision check about IPC. The same as  CAP_IPC_OWNER.
 
- sys_module
	  Load and unload kernel module. The same as CAP_SYS_MODULE.
 
- sys_rawio
	  Manipulate I/O port by iopl and ioperm. Access /proc/kcore.
	  The same as CAP_SYS_RAWIO.
 
- sys_chroot
	  Use chroot system call.
 
- sys_ptrace
	  Use ptrace to all processes.
 
- sys_pacct
	  Obtain log of process by acct(2).
	   
- sys_admin
	  It grants many operations. 
	  
- Usage of following system call: quotactl, mount,
		 umount, swapon, swapoff, sethostname, setdomainname
		 
 
- Set attribute to all IPC objects(IPC_SET) 
		 
 
- Delete all IPC objects(IPC_RMID)
		 
 
- Set extended security attibute for file system.
		 
 
- Use fake UID as socket credential.
		 
 
- Can open more file than limits in
		 /proc/sys/fs/file-max.
		 
 
- Allocate memory using space reserved for priviledged process.
		 It is checked in security_vm_enough_memory LSM hook
		 function. security_vm_enough_memory LSM hook is
		 called in case such as when process is created. The
		 operation is not audited in SELinux.
 
- Get/set xattr trusted attribute
		  Xattr trusted attribute is not used for current SELinux.
 
- Some ioctl operations
		 Developpers of drivers check this capability in some
		 option of ioctl. The check is inserted by developper of
		 driver in place where he thinks important.
	  
 
 
- sys_boot
	  Reboot by reboot(2). However, it does not restrict
	  reboot by writing /dev/initctl.
 
- sys_nice
	  Increase nice and change nice for other processes.
	  
 
- sys_resource
	  
- Ignore hardlimit for resource usage in rlimit
 
- Increase hardlimit for resoure usage in rlimit.
 
- Use reserved space in ext2 file system
 
- Modify journal data flag for ext3 by ioctl
 
- Ignore limit related to message queue in
	  /proc/sys/kernel/msgmnb 	  
	  
 
 
- sys_time
	  Modify system clock.
 
- sys_tty_config
	  Close control terminal by vhangup(2). Change configuration of
	  terminal(such as keycode) by ioctl(such as KDSKBENT, KDSKBSENT option). 
	   
- mknod
	  Create device file by mknod.
	   
- lease
	  Set lease by fcntl system call. Lease is a kind of lock.When a
	  process sets lease to file, not only file is locked but also
	  signal is sent when other process accesses the file.
	  To use lease, file:lock should also be allowed.
 
- audit_write
	  Send user space AVC message to kernel. User space AVC
	  message is not used in currently SELinux.
 
- audit_control
	  Change configuration of Linux Auditing
	  subsystem(LauS)[7]
	  To change /proc/self/loginuid.
 
 
      
- use
       
- Inherit file descriptor when process is executed and
	      domain has been changed.
 
- Receive fd from another  process by Unix domain socket4.
       
 
- Get and set attribute of file descriptor,such as owner and flag
	      by fntl and ioctl.
       
 
 
SELinux labels superblock of filesystem. permissions in object class
filesystem is used for access control to superblock. 
- mount
       Mount filesystem.
 
- remount
       Remount existing mount by MS_REMOUNT option of mount(2).
 
- unmount
       Unmount filesystem.
 
- getattr
       Obtain statistics
       about filesystem, such as free block by statfs(2).
 
- associate
       Use type as label for files. A type can not be labeled to file unless the type is not
       associated to file. For example, when we want to use homepage_t to
       /var/www, and ext3 filesystem is labeled as fs_t,  then, allow homepage_t fs_t filesystem:
       associate;  must be described in policy. 
 
- quotaget
       Get quota information .
 
- quotamod
       Modify quota by quotactl(2).
 
- relabelfrom,relabelto,transition 
       These are defined in source but are not used.
 
permissions in object class are prepared to restrict operations
between process. Unless specified, target type is domain of peer process.
- fork
       Create new process by fork(2). Target type is the domain itself.
 
- transition
       Do domain transition.
 
- sigchld, sigkill, sigstop, signull, signal
       Send signal. sigchld is for SIGCHLD, sigkill is for SIGKILL,
      sigstop is for SIGSTOP and  signull is for signal number
       zero. signal  is for other signals.
 
- ptrace
       Trace process by ptrace(2).
 
- getsched
       Read scheduling information of process(such as nice
       value). Session ID is used for job control by shell.
 
- setsched
       Modify scheduling information of process.
 
- getsession
       Get session ID of process.
       
 
- getpgid
       Get process group ID. Process group ID is used for job control by shell.
 
- setpgid
       Modify process group ID.
 
- getcap
       Get capability information of process by capget(2).
 
- setcap
       Modify capability information of process by capset(2).
 
- share
       Execute process with domain transition after clone system call. 
 
- getattr
       Read process security information(such as what domain is given) in /proc/pid/attr.
 
- setexec
       Set security context of executed process by writing
       /proc/self/attr/exec or by setexecon system call.
 
- setfscreate
       Set security context of created file by writing
       /proc/self/attr/fscreate or setfscreatecon system call.
 
- noatsecure
       This permission is used for glibc's extended mode(secure mode). When this
       permission is denied, glibc secure mode is enabled(if secure
       mode exists).
 
- siginh
       Inherit signal state(such as signal handler) from parent process. This is checked when
       domain has been changed. The default behavior of Linux is to
       inherit signal state(signal handler is not inherited in exec), but by denying this permission, we can
       restrict inheriting signal state. If this is denied, signal state
       is cleared.    
 
- setrlimit
       Change rlimit information(resource usage limit) by setrlimit(2).
 
- rlimitinh
       Inherit rlimit information(resource usage limit information) from
       parent process.This is checked when domain has been changed.  The default behavior of Linux is to
       rlimit information, but by denying this permission, we can
       restrict inheriting rlimit information. If this is denied, rlimit       is cleared.   
 
- dyntransition       
       Do dynamic domain transition.
        
- setcurrent
       Set target domain of dynamic domain transition by writing
       /proc/self/current.
 
- execmem, execstack, execheap
       These are useful in combination with
       Exec Shield[6]. These restrict Exec Shield to be
       disabled. For more, see Stephen Smalley's post to SELinux Mailing
       List5. 
 
Object class security is operations related to query security
server 6,
changing SELinux internal parameters and managing SELinux. The meaning
are found by analyzing selinuxfs.c.
- compute_av
	Query security server about access is denied or granted, by writing /selinux/access.
 
- compute_create
	Query security server about label transision rule, by writing /selinux/create. 
 
- compute_member
	Query security server about polyinstantiation[9] membership decision, by writing /selinux/member.
 
- check_context
	Query security server about whether security context is valid,
	by writing /selinux/context.
 
- load_policy
	Load policy file to kernel.
 
- compute_relabel
	Query security server about relabel based on type_change
	TE rule. type_change is a rule to help application to relabel
	object such as tty device.
 
- compute_user
	Query security server about users that a context can
	reach, by writing /selinux/user. Changing user identity is
	restricted in policy by constraints. 
	This is used programs who change SELinux user identity
	such as login and ssh.
 
- setenforce
	Switch enforcing/permissive mode.
 
- setbool
	Change boolean parameter of policy.
 
- setsecparam
	Configure avc parameter by writing /selinux/avc.
 
- setcheckreqprot
	Configure behavior of permission execmem, execmod and
	execheap via /selinux/checkreqprot 7
 
In object class system, misc permissions related to system are
defined.
- ipc_info
	Get information about IPC object. This is to get system-wide
	IPC parameter, not information specific to a IPC object. An
	example of system-wide IPC information is segment size of
	shared-memory. More precisely, this controls usage of option
	IPC_INFO, SHM_INFO, SEM_INFO, MSG_INFO in
	shmctl,semctl,msgctl system call.
 
- syslog_read
	Read kernel message by
	syslog(2)(option 3). 
 
- syslog_console 
	Control output of kernel message to console by syslog(2)(option 6,7,8). 
 
- syslog_mod 
	Clear kernel message buffer by syslog(2)(option 0,1,2,4,5).
 
Discussion on NSA's SELinux list, especially Stephen Smalley's
comment was helpful to analyze what access vectors are unused.
 
- 1
 -  SELinux Policy Editor,
	 URL=http://seedit.sourceforge.net/
 - 2
 -  Stephen Smalley, Implementing SELinux
	 as a Linux Secuity Module,
	 URL=http://www.nsa.gov/selinux/papers
 
 - 3
 -  An Overview of Object Classes and Permissions,
	 Tresys Technology,
	 URL=http://tresys.com/selinux/obj_perms_help.shtml
 
 - 4
 -  Linux Cross-Reference, URL=http://lxr.linux.no/
 
 - 5
 -  Stephen Smalley, Configuring the SELinux Policy,
	 URL=http://www.nsa.gov/selinux/info/docs.cfm
 
 - 6
 -  Arjan van de Ven, New Security Enhancements in
	 Redhat Enterprize Linux,
	  URL=http://www.redhat.com/f/pdf/rhel/WHP0006US_Execshield.pdf
 
 - 7
 -  Linux manpage auditd, auditctl, ausearch 
 
 - 8
 -  Controlled Access Protection Profile URL=http://niap.nist.gov/cc-scheme/pp/PP_CAPP_V1.d.pdf
 
 - 9
 -  SELinux Mailing List archive,
	 URL=http://www.nsa.gov/selinux/list-archive/0505/11351.cfm
 
 Meaning of permissions in SELinux(Ver 1)
This document was generated using the
LaTeX2HTML translator Version 2002-2-1 (1.70)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos, 
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore, 
Mathematics Department, Macquarie University, Sydney.
The command line arguments were: 
 latex2html -show_section_numbers -link 2 -split 0 access_vectors.tex
The translation was initiated by Yuichi on 2006-01-12
Footnotes
- ... Nakamura1
 
- The George Washington University,
ynakam@gwu.edu
 
- ... call2
 
- See man socket(2)
 
- ...
interface3
 
- SELinux labels network interface.
 
- ... socket4
 
- When creating unix domain
	      socket, by setting SCM_RIGHTS flag, file descriptor can be sent,
	      see man unix(7).
 
- ... List5
 
- http://marc.theaimsgroup.com/?l=selinux&m=113440812327410&w=2
 
- ...
server6
 
- Security Server a component of SELinux which makes
access control decision based on policy 
 
- ... /selinux/checkreqprot7
 
- By writing 0 or 1
	/selinux/checkreqprot, behavior of execmem, execmod and
       execheap can be configured.
 
 
 
   
Yuichi
2006-01-12