Class: CapNG::Capability
- Inherits:
-
Object
- Object
- CapNG::Capability
- Defined in:
- ext/capng/capability.c,
ext/capng/capability.c
Overview
Check Linux capabilities and define its constants.
Constant Summary collapse
- CHOWN =
Make arbitrary changes to file UIDs and GIDs (see chown(2)).
INT2NUM(CAP_CHOWN)
- DAC_OVERRIDE =
Bypass file read, write, and execute permission checks. (DAC is an abbreviation of “discretionary access control”.)
INT2NUM(CAP_DAC_OVERRIDE)
- DAC_READ_SEARCH =
-
Bypass file read permission checks and directory read and execute permission checks;
-
invoke open_by_handle_at(2);
-
use the linkat(2) AT_EMPTY_PATH flag to create a link to a file referred to by a file descriptor.
-
INT2NUM(CAP_DAC_READ_SEARCH)
- FOWNER =
-
Bypass permission checks on operations that normally require the filesystem UID of the process to match the UID of the file (e.g., chmod(2), utime(2)), excluding those operations covered by CAP_DAC_OVERRIDE and CAP_DAC_READ_SEARCH;
-
set inode flags (see ioctl_iflags(2)) on arbitrary files;
-
set Access Control Lists (ACLs) on arbitrary files;
-
ignore directory sticky bit on file deletion;
-
modify user extended attributes on sticky directory owned by any user;
-
specify O_NOATIME for arbitrary files in open(2) and fcntl(2).
-
INT2NUM(CAP_FOWNER)
- FSETID =
-
Don’t clear set-user-ID and set-group-ID mode bits when a file is modified;
-
set the set-group-ID bit for a file whose GID does not match the filesystem or any of the supplementary GIDs of the calling process.
-
INT2NUM(CAP_FSETID)
- KILL =
Bypass permission checks for sending signals (see kill(2)). This includes use of the ioctl(2) KDSIGACCEPT operation.
INT2NUM(CAP_KILL)
- SETGID =
-
Make arbitrary manipulations of process GIDs and supplementary GID list;
-
forge GID when passing socket credentials via UNIX domain sockets;
-
write a group ID mapping in a user namespace (see user_namespaces(7)).
-
INT2NUM(CAP_SETGID)
- SETUID =
-
Make arbitrary manipulations of process UIDs (setuid(2), setreuid(2), setresuid(2), setfsuid(2));
-
forge UID when passing socket credentials via UNIX domain sockets;
-
write a user ID mapping in a user namespace (see user_namespaces(7)).
-
INT2NUM(CAP_SETUID)
- SETPCAP =
add any capability from the calling thread’s bounding set to its inheritable set; drop capabilities from the bounding set (via prctl(2) PR_CAPBSET_DROP); make changes to the securebits flags.
If file capabilities are not supported (i.e., kernels before Linux 2.6.24): grant or remove any capability in the caller’s permitted capability set to or from any other process. (This property of CAP_SETPCAP is not available when the kernel is configured to support file capabilities, since CAP_SETPCAP has entirely different semantics for such kernels.)
If file capabilities are supported (i.e., since Linux 2.6.24)
- LINUX_IMMUTABLE =
Set the FS_APPEND_FL and FS_IMMUTABLE_FL inode flags (see ioctl_iflags(2)).
INT2NUM(CAP_LINUX_IMMUTABLE)
- NET_BIND_SERIVCE =
Bind a socket to Internet domain privileged ports (port numbers less than 1024).
INT2NUM(CAP_NET_BIND_SERVICE)
- NET_BROATCAST =
(Unused) Make socket broadcasts, and listen to multicasts.
INT2NUM(CAP_NET_BROADCAST)
- NET_ADMIN =
-
interface configuration;
-
administration of IP firewall, masquerading, and accounting;
-
modify routing tables;
-
bind to any address for transparent proxying;
-
set type-of-service (TOS);
-
clear driver statistics;
-
set promiscuous mode;
-
enabling multicasting;
-
use setsockopt(2) to set the following socket options:
-
SO_DEBUG, SO_MARK, SO_PRIORITY (for a priority outside the
-
range 0 to 6), SO_RCVBUFFORCE, and SO_SNDBUFFORCE.
-
-
Perform various network-related operations
- NET_RAW =
-
Use RAW and PACKET sockets;
-
bind to any address for transparent proxying.
-
INT2NUM(CAP_NET_RAW)
- IPC_LOCK =
Lock memory (mlock(2), mlockall(2), mmap(2), shmctl(2)).
INT2NUM(CAP_IPC_LOCK)
- IPC_OWNER =
Bypass permission checks for operations on System V IPC objects.
INT2NUM(CAP_IPC_OWNER)
- SYS_MODULE =
-
Load and unload kernel modules (see init_module(2) and delete_module(2)) in kernels before 2.6.25
-
drop capabilities from the system-wide capability bounding set.
-
INT2NUM(CAP_SYS_MODULE)
- SYS_RAWIO =
-
Perform I/O port operations (iopl(2) and ioperm(2));
-
access /proc/kcore;
-
employ the FIBMAP ioctl(2) operation;
-
open devices for accessing x86 model-specific registers (MSRs, see msr(4));
-
update /proc/sys/vm/mmap_min_addr;
-
create memory mappings at addresses below the value specified by /proc/sys/vm/mmap_min_addr;
-
map files in /proc/bus/pci;
-
open /dev/mem and /dev/kmem;
-
perform various SCSI device commands;
-
perform certain operations on hpsa(4) and cciss(4) devices;
-
perform a range of device-specific operations on other devices.
-
INT2NUM(CAP_SYS_RAWIO)
- SYS_CHROOT =
-
Use chroot(2);
-
change mount namespaces using setns(2).
-
INT2NUM(CAP_SYS_CHROOT)
- SYS_PTRACE =
-
Trace arbitrary processes using ptrace(2);
-
apply get_robust_list(2) to arbitrary processes;
-
transfer data to or from the memory of arbitrary processes using process_vm_readv(2) and process_vm_writev(2);
-
inspect processes using kcmp(2).
-
INT2NUM(CAP_SYS_PTRACE)
- SYS_PACCT =
Use acct(2).
INT2NUM(CAP_SYS_PACCT)
- SYS_ADMIN =
this capability is overloaded; see Notes to kernel developers, below.
-
Perform a range of system administration operations including: quotactl(2), mount(2), umount(2), pivot_root(2), swapon(2), swapoff(2), sethostname(2), and setdomainname(2);
-
perform privileged syslog(2) operations (since Linux 2.6.37, CAP_SYSLOG should be used to permit such operations);
-
perform VM86_REQUEST_IRQ vm86(2) command;
-
access the same checkpoint/restore functionality that is governed by CAP_CHECKPOINT_RESTORE (but the latter, weaker capability is preferred for accessing that functionality).
-
perform the same BPF operations as are governed by CAP_BPF (but the latter, weaker capability is preferred for accessing that functionality).
-
employ the same performance monitoring mechanisms as are governed by CAP_PERFMON (but the latter, weaker capability is preferred for accessing that functionality).
-
perform IPC_SET and IPC_RMID operations on arbitrary System V IPC objects;
-
override RLIMIT_NPROC resource limit;
-
perform operations on trusted and security extended attributes (see xattr(7));
-
use lookup_dcookie(2);
-
use ioprio_set(2) to assign IOPRIO_CLASS_RT and (before Linux 2.6.25) IOPRIO_CLASS_IDLE I/O scheduling classes;
-
forge PID when passing socket credentials via UNIX domain sockets;
-
exceed /proc/sys/fs/file-max, the system-wide limit on the number of open files, in system calls that open files (e.g., accept(2), execve(2), open(2), pipe(2));
-
employ CLONE_* flags that create new namespaces with clone(2) and unshare(2) (but, since Linux 3.8, creating user namespaces does not require any capability);
-
access privileged perf event information;
-
call setns(2) (requires CAP_SYS_ADMIN in the target namespace);
-
call fanotify_init(2);
-
perform privileged KEYCTL_CHOWN and KEYCTL_SETPERM keyctl(2) operations;
-
perform madvise(2) MADV_HWPOISON operation;
-
employ the TIOCSTI ioctl(2) to insert characters into the input queue of a terminal other than the caller’s controlling terminal;
-
employ the obsolete nfsservctl(2) system call;
-
employ the obsolete bdflush(2) system call;
-
perform various privileged block-device ioctl(2) operations;
-
perform various privileged filesystem ioctl(2) operations;
-
perform privileged ioctl(2) operations on the /dev/random device (see random(4));
-
install a seccomp(2) filter without first having to set the no_new_privs thread attribute;
-
modify allow/deny rules for device control groups;
-
employ the ptrace(2) PTRACE_SECCOMP_GET_FILTER operation to dump tracee’s seccomp filters;
-
employ the ptrace(2) PTRACE_SETOPTIONS operation to suspend the tracee’s seccomp protections (i.e., the PTRACE_O_SUSPEND_SECCOMP flag);
-
perform administrative operations on many device drivers;
-
modify autogroup nice values by writing to /proc//autogroup (see sched(7)).
-
Note
- SYS_BOOT =
Use reboot(2) and kexec_load(2).
INT2NUM(CAP_SYS_BOOT)
- SYS_NICE =
-
Lower the process nice value (nice(2), setpriority(2)) and change the nice value for arbitrary processes;
-
set real-time scheduling policies for calling process, and set scheduling policies and priorities for arbitrary processes (sched_setscheduler(2), sched_setparam(2), sched_setattr(2));
-
set CPU affinity for arbitrary processes (sched_setaffinity(2));
-
set I/O scheduling class and priority for arbitrary processes (ioprio_set(2));
-
apply migrate_pages(2) to arbitrary processes and allow processes to be migrated to arbitrary nodes;
-
apply move_pages(2) to arbitrary processes;
-
use the MPOL_MF_MOVE_ALL flag with mbind(2) and move_pages(2).
-
INT2NUM(CAP_SYS_NICE)
- SYS_RESOURCE =
-
Use reserved space on ext2 filesystems;
-
make ioctl(2) calls controlling ext3 journaling;
-
override disk quota limits;
-
increase resource limits (see setrlimit(2));
-
override RLIMIT_NPROC resource limit;
-
override maximum number of consoles on console allocation;
-
override maximum number of keymaps;
-
allow more than 64hz interrupts from the real-time clock;
-
raise msg_qbytes limit for a System V message queue above the limit in /proc/sys/kernel/msgmnb (see msgop(2) and msgctl(2));
-
allow the RLIMIT_NOFILE resource limit on the number of “in- flight” file descriptors to be bypassed when passing file descriptors to another process via a UNIX domain socket (see unix(7));
-
override the /proc/sys/fs/pipe-size-max limit when setting the capacity of a pipe using the F_SETPIPE_SZ fcntl(2) command;
-
use F_SETPIPE_SZ to increase the capacity of a pipe above the limit specified by /proc/sys/fs/pipe-max-size;
-
override /proc/sys/fs/mqueue/queues_max, /proc/sys/fs/mqueue/msg_max, and /proc/sys/fs/mqueue/msgsize_max limits when creating POSIX message queues (see mq_overview(7));
-
employ the prctl(2) PR_SET_MM operation;
-
set /proc//oom_score_adj to a value lower than the value last set by a process with CAP_SYS_RESOURCE.
-
INT2NUM(CAP_SYS_RESOURCE)
- SYS_TIME =
Set system clock (settimeofday(2), stime(2), adjtimex(2)); set real-time (hardware) clock.
INT2NUM(CAP_SYS_TIME)
- TTY_CONFIG =
Use vhangup(2); employ various privileged ioctl(2) operations on virtual terminals.
INT2NUM(CAP_SYS_TTY_CONFIG)
- MKNOD =
Create special files using mknod(2). (since Linux 2.4)
INT2NUM(CAP_MKNOD)
- LEASE =
Establish leases on arbitrary files (see fcntl(2)). (since Linux 2.4)
INT2NUM(CAP_LEASE)
- AUDIT_WRITE =
Write records to kernel auditing log. (since Linux 2.6.11)
INT2NUM(CAP_AUDIT_WRITE)
- AUDIT_CONTROL =
Enable and disable kernel auditing; change auditing filter rules; retrieve auditing status and filtering rules. (since Linux 2.6.11)
INT2NUM(CAP_AUDIT_CONTROL)
- SETFCAP =
Set arbitrary capabilities on a file. since Linux 2.6.24)
INT2NUM(CAP_SETFCAP)
- MAC_OVERRIDE =
INT2NUM(CAP_MAC_OVERRIDE)
- MAC_ADMIN =
Allow MAC configuration or state changes. Implemented for the Smack Linux Security Module (LSM). (since Linux 2.6.25)
INT2NUM(CAP_MAC_ADMIN)
- SYSLOG =
-
Perform privileged syslog(2) operations. See syslog(2) for information on which operations require privilege.
-
View kernel addresses exposed via /proc and other interfaces when /proc/sys/kernel/kptr_restrict has the value 1. (See the discussion of the kptr_restrict in proc(5).)
-
INT2NUM(CAP_SYSLOG)
- EPOLLWAKEUP =
INT2NUM(CAP_EPOLLWAKEUP)
- WAKE_ALARM =
Trigger something that will wake up the system (set CLOCK_REALTIME_ALARM and CLOCK_BOOTTIME_ALARM timers).
INT2NUM(CAP_WAKE_ALARM)
- BLOCK_SUSPEND =
Employ features that can block system suspend (epoll(7) EPOLLWAKEUP, /proc/sys/wake_lock). (since Linux 3.5)
INT2NUM(CAP_BLOCK_SUSPEND)
- AUDIT_READ =
Allow reading the audit log via a multicast netlink socket. (since Linux 3.16)
INT2NUM(CAP_AUDIT_READ)
- PERFMON =
-
call perf_event_open(2)
-
employ various BPF operations that have performance implications.
This capability was added in Linux 5.8 to separate out performance monitoring functionality from the overloaded CAP_SYS_ADMIN capability. See also the kernel source file Documentation/admin-guide/perf-security.rst.
-
Employ various performance-monitoring mechanisms, including
- BPF =
Employ privileged BPF operations; see bpf(2) and bpf-helpers(7).
This capability was added in Linux 5.8 to separate out BPF functionality from the overloaded CAP_SYS_ADMIN capability. (since Linux 5.8)
INT2NUM(CAP_BPF)
- CHECKPOINT_RESTORE =
-
employ the set_tid feature of clone3(2);
-
read the contents of the symbolic links in /proc//map_files for other processes.
This capability was added in Linux 5.9 to separate out checkpoint/restore functionality from the overloaded CAP_SYS_ADMIN capability. (since Linux 5.9)
-
INT2NUM(CAP_CHECKPOINT_RESTORE)
Instance Method Summary collapse
-
#each {|Integer, String| ... } ⇒ nil
Obtain capability code and name pairs with enumerable.
-
#from_name(rb_capability_name_or_symbol) ⇒ Integer
Obtain capability value from capability name.
-
#initialize ⇒ nil
constructor
Initalize Capability class.
-
#to_name(rb_capability) ⇒ String
Obtain capability name from capability value.
Constructor Details
#initialize ⇒ nil
Initalize Capability class.
70 71 72 73 74 |
# File 'ext/capng/capability.c', line 70
static VALUE
rb_capng_capability_initialize(VALUE self)
{
return Qnil;
}
|
Instance Method Details
#each {|Integer, String| ... } ⇒ nil
Obtain capability code and name pairs with enumerable.
127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'ext/capng/capability.c', line 127
static VALUE
rb_capng_capability_each(VALUE self)
{
RETURN_ENUMERATOR(self, 0, 0);
for (int i = 0; capabilityInfoTable[i].name != NULL; i++) {
rb_yield_values(2,
INT2NUM(capabilityInfoTable[i].code),
rb_str_new2(capabilityInfoTable[i].name));
}
return Qnil;
}
|
#from_name(rb_capability_name_or_symbol) ⇒ Integer
Obtain capability value from capability name.
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'ext/capng/capability.c', line 101
static VALUE
rb_capng_capability_from_name(VALUE self, VALUE rb_capability_name_or_symbol)
{
unsigned int capability;
switch (TYPE(rb_capability_name_or_symbol)) {
case T_SYMBOL:
capability =
capng_name_to_capability(RSTRING_PTR(rb_sym2str(rb_capability_name_or_symbol)));
break;
case T_STRING:
capability = capng_name_to_capability(StringValuePtr(rb_capability_name_or_symbol));
break;
default:
rb_raise(rb_eArgError, "Expected a String or a Symbol instance");
}
return INT2NUM(capability);
}
|
#to_name(rb_capability) ⇒ String
Obtain capability name from capability value.
83 84 85 86 87 88 89 90 91 92 |
# File 'ext/capng/capability.c', line 83
static VALUE
rb_capng_capability_to_name(VALUE self, VALUE rb_capability)
{
const char* name = capng_capability_to_name(NUM2UINT(rb_capability));
if (name)
return rb_str_new2(name);
else
return rb_str_new2("unknown");
}
|