📄 security.h
字号:
/* * Linux Security plug * * Copyright (C) 2001 WireX Communications, Inc <chris@wirex.com> * Copyright (C) 2001 Greg Kroah-Hartman <greg@kroah.com> * Copyright (C) 2001 Networks Associates Technology, Inc <ssmalley@nai.com> * Copyright (C) 2001 James Morris <jmorris@intercode.com.au> * Copyright (C) 2001 Silicon Graphics, Inc. (Trust Technology Group) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Due to this file being licensed under the GPL there is controversy over * whether this permits you to write a module that #includes this file * without placing your module under the GPL. Please consult a lawyer for * advice before doing this. * */#ifndef __LINUX_SECURITY_H#define __LINUX_SECURITY_H#include <linux/fs.h>#include <linux/binfmts.h>#include <linux/signal.h>#include <linux/resource.h>#include <linux/sem.h>#include <linux/sysctl.h>#include <linux/shm.h>#include <linux/msg.h>#include <linux/sched.h>#include <linux/skbuff.h>#include <linux/netlink.h>/* * These functions are in security/capability.c and are used * as the default capabilities functions */extern int cap_capable (struct task_struct *tsk, int cap);extern int cap_ptrace (struct task_struct *parent, struct task_struct *child);extern int cap_capget (struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted);extern int cap_capset_check (struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted);extern void cap_capset_set (struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted);extern int cap_bprm_set_security (struct linux_binprm *bprm);extern void cap_bprm_apply_creds (struct linux_binprm *bprm, int unsafe);extern int cap_bprm_secureexec(struct linux_binprm *bprm);extern int cap_inode_setxattr(struct dentry *dentry, char *name, void *value, size_t size, int flags);extern int cap_inode_removexattr(struct dentry *dentry, char *name);extern int cap_task_post_setuid (uid_t old_ruid, uid_t old_euid, uid_t old_suid, int flags);extern void cap_task_reparent_to_init (struct task_struct *p);extern int cap_syslog (int type);extern int cap_vm_enough_memory (long pages);static inline int cap_netlink_send (struct sock *sk, struct sk_buff *skb){ NETLINK_CB (skb).eff_cap = current->cap_effective; return 0;}static inline int cap_netlink_recv (struct sk_buff *skb){ if (!cap_raised (NETLINK_CB (skb).eff_cap, CAP_NET_ADMIN)) return -EPERM; return 0;}/* * Values used in the task_security_ops calls *//* setuid or setgid, id0 == uid or gid */#define LSM_SETID_ID 1/* setreuid or setregid, id0 == real, id1 == eff */#define LSM_SETID_RE 2/* setresuid or setresgid, id0 == real, id1 == eff, uid2 == saved */#define LSM_SETID_RES 4/* setfsuid or setfsgid, id0 == fsuid or fsgid */#define LSM_SETID_FS 8/* forward declares to avoid warnings */struct nfsctl_arg;struct sched_param;struct swap_info_struct;/* bprm_apply_creds unsafe reasons */#define LSM_UNSAFE_SHARE 1#define LSM_UNSAFE_PTRACE 2#define LSM_UNSAFE_PTRACE_CAP 4#ifdef CONFIG_SECURITY/** * struct security_operations - main security structure * * Security hooks for program execution operations. * * @bprm_alloc_security: * Allocate and attach a security structure to the @bprm->security field. * The security field is initialized to NULL when the bprm structure is * allocated. * @bprm contains the linux_binprm structure to be modified. * Return 0 if operation was successful. * @bprm_free_security: * @bprm contains the linux_binprm structure to be modified. * Deallocate and clear the @bprm->security field. * @bprm_apply_creds: * Compute and set the security attributes of a process being transformed * by an execve operation based on the old attributes (current->security) * and the information saved in @bprm->security by the set_security hook. * Since this hook function (and its caller) are void, this hook can not * return an error. However, it can leave the security attributes of the * process unchanged if an access failure occurs at this point. It can * also perform other state changes on the process (e.g. closing open * file descriptors to which access is no longer granted if the attributes * were changed). * bprm_apply_creds is called under task_lock. @unsafe indicates various * reasons why it may be unsafe to change security state. * @bprm contains the linux_binprm structure. * @bprm_set_security: * Save security information in the bprm->security field, typically based * on information about the bprm->file, for later use by the apply_creds * hook. This hook may also optionally check permissions (e.g. for * transitions between security domains). * This hook may be called multiple times during a single execve, e.g. for * interpreters. The hook can tell whether it has already been called by * checking to see if @bprm->security is non-NULL. If so, then the hook * may decide either to retain the security information saved earlier or * to replace it. * @bprm contains the linux_binprm structure. * Return 0 if the hook is successful and permission is granted. * @bprm_check_security: * This hook mediates the point when a search for a binary handler will * begin. It allows a check the @bprm->security value which is set in * the preceding set_security call. The primary difference from * set_security is that the argv list and envp list are reliably * available in @bprm. This hook may be called multiple times * during a single execve; and in each pass set_security is called * first. * @bprm contains the linux_binprm structure. * Return 0 if the hook is successful and permission is granted. * @bprm_secureexec: * Return a boolean value (0 or 1) indicating whether a "secure exec" * is required. The flag is passed in the auxiliary table * on the initial stack to the ELF interpreter to indicate whether libc * should enable secure mode. * @bprm contains the linux_binprm structure. * * Security hooks for filesystem operations. * * @sb_alloc_security: * Allocate and attach a security structure to the sb->s_security field. * The s_security field is initialized to NULL when the structure is * allocated. * @sb contains the super_block structure to be modified. * Return 0 if operation was successful. * @sb_free_security: * Deallocate and clear the sb->s_security field. * @sb contains the super_block structure to be modified. * @sb_statfs: * Check permission before obtaining filesystem statistics for the @sb * filesystem. * @sb contains the super_block structure for the filesystem. * Return 0 if permission is granted. * @sb_mount: * Check permission before an object specified by @dev_name is mounted on * the mount point named by @nd. For an ordinary mount, @dev_name * identifies a device if the file system type requires a device. For a * remount (@flags & MS_REMOUNT), @dev_name is irrelevant. For a * loopback/bind mount (@flags & MS_BIND), @dev_name identifies the * pathname of the object being mounted. * @dev_name contains the name for object being mounted. * @nd contains the nameidata structure for mount point object. * @type contains the filesystem type. * @flags contains the mount flags. * @data contains the filesystem-specific data. * Return 0 if permission is granted. * @sb_copy_data: * Allow mount option data to be copied prior to parsing by the filesystem, * so that the security module can extract security-specific mount * options cleanly (a filesystem may modify the data e.g. with strsep()). * This also allows the original mount data to be stripped of security- * specific options to avoid having to make filesystems aware of them. * @type the type of filesystem being mounted. * @orig the original mount data copied from userspace. * @copy copied data which will be passed to the security module. * Returns 0 if the copy was successful. * @sb_check_sb: * Check permission before the device with superblock @mnt->sb is mounted * on the mount point named by @nd. * @mnt contains the vfsmount for device being mounted. * @nd contains the nameidata object for the mount point. * Return 0 if permission is granted. * @sb_umount: * Check permission before the @mnt file system is unmounted. * @mnt contains the mounted file system. * @flags contains the unmount flags, e.g. MNT_FORCE. * Return 0 if permission is granted. * @sb_umount_close: * Close any files in the @mnt mounted filesystem that are held open by * the security module. This hook is called during an umount operation * prior to checking whether the filesystem is still busy. * @mnt contains the mounted filesystem. * @sb_umount_busy: * Handle a failed umount of the @mnt mounted filesystem, e.g. re-opening * any files that were closed by umount_close. This hook is called during * an umount operation if the umount fails after a call to the * umount_close hook. * @mnt contains the mounted filesystem. * @sb_post_remount: * Update the security module's state when a filesystem is remounted. * This hook is only called if the remount was successful. * @mnt contains the mounted file system. * @flags contains the new filesystem flags. * @data contains the filesystem-specific data. * @sb_post_mountroot: * Update the security module's state when the root filesystem is mounted. * This hook is only called if the mount was successful. * @sb_post_addmount: * Update the security module's state when a filesystem is mounted. * This hook is called any time a mount is successfully grafetd to * the tree. * @mnt contains the mounted filesystem. * @mountpoint_nd contains the nameidata structure for the mount point. * @sb_pivotroot: * Check permission before pivoting the root filesystem. * @old_nd contains the nameidata structure for the new location of the current root (put_old). * @new_nd contains the nameidata structure for the new root (new_root). * Return 0 if permission is granted. * @sb_post_pivotroot: * Update module state after a successful pivot. * @old_nd contains the nameidata structure for the old root. * @new_nd contains the nameidata structure for the new root. * * Security hooks for inode operations. * * @inode_alloc_security: * Allocate and attach a security structure to @inode->i_security. The * i_security field is initialized to NULL when the inode structure is * allocated. * @inode contains the inode structure. * Return 0 if operation was successful. * @inode_free_security: * @inode contains the inode structure. * Deallocate the inode security structure and set @inode->i_security to * NULL. * @inode_create: * Check permission to create a regular file. * @dir contains inode structure of the parent of the new file. * @dentry contains the dentry structure for the file to be created. * @mode contains the file mode of the file to be created. * Return 0 if permission is granted. * @inode_post_create: * Set the security attributes on a newly created regular file. This hook * is called after a file has been successfully created. * @dir contains the inode structure of the parent directory of the new file. * @dentry contains the the dentry structure for the newly created file. * @mode contains the file mode. * @inode_link: * Check permission before creating a new hard link to a file. * @old_dentry contains the dentry structure for an existing link to the file. * @dir contains the inode structure of the parent directory of the new link. * @new_dentry contains the dentry structure for the new link. * Return 0 if permission is granted. * @inode_post_link: * Set security attributes for a new hard link to a file. * @old_dentry contains the dentry structure for the existing link. * @dir contains the inode structure of the parent directory of the new file. * @new_dentry contains the dentry structure for the new file link. * @inode_unlink: * Check the permission to remove a hard link to a file. * @dir contains the inode structure of parent directory of the file. * @dentry contains the dentry structure for file to be unlinked. * Return 0 if permission is granted. * @inode_symlink: * Check the permission to create a symbolic link to a file. * @dir contains the inode structure of parent directory of the symbolic link. * @dentry contains the dentry structure of the symbolic link. * @old_name contains the pathname of file. * Return 0 if permission is granted. * @inode_post_symlink: * @dir contains the inode structure of the parent directory of the new link. * @dentry contains the dentry structure of new symbolic link. * @old_name contains the pathname of file. * Set security attributes for a newly created symbolic link. Note that * @dentry->d_inode may be NULL, since the filesystem might not * instantiate the dentry (e.g. NFS). * @inode_mkdir: * Check permissions to create a new directory in the existing directory * associated with inode strcture @dir. * @dir containst the inode structure of parent of the directory to be created. * @dentry contains the dentry structure of new directory. * @mode contains the mode of new directory. * Return 0 if permission is granted. * @inode_post_mkdir: * Set security attributes on a newly created directory. * @dir contains the inode structure of parent of the directory to be created. * @dentry contains the dentry structure of new directory. * @mode contains the mode of new directory. * @inode_rmdir: * Check the permission to remove a directory. * @dir contains the inode structure of parent of the directory to be removed.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -