📄 vfs_full_audit.c
字号:
/* NT ACL operations. */ {SMB_VFS_OP(smb_full_audit_fget_nt_acl), SMB_VFS_OP_FGET_NT_ACL, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_get_nt_acl), SMB_VFS_OP_GET_NT_ACL, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_fset_nt_acl), SMB_VFS_OP_FSET_NT_ACL, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_set_nt_acl), SMB_VFS_OP_SET_NT_ACL, SMB_VFS_LAYER_LOGGER}, /* POSIX ACL operations. */ {SMB_VFS_OP(smb_full_audit_chmod_acl), SMB_VFS_OP_CHMOD_ACL, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_fchmod_acl), SMB_VFS_OP_FCHMOD_ACL, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_get_entry), SMB_VFS_OP_SYS_ACL_GET_ENTRY, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_get_tag_type), SMB_VFS_OP_SYS_ACL_GET_TAG_TYPE, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_get_permset), SMB_VFS_OP_SYS_ACL_GET_PERMSET, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_get_qualifier), SMB_VFS_OP_SYS_ACL_GET_QUALIFIER, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_get_file), SMB_VFS_OP_SYS_ACL_GET_FILE, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_get_fd), SMB_VFS_OP_SYS_ACL_GET_FD, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_clear_perms), SMB_VFS_OP_SYS_ACL_CLEAR_PERMS, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_add_perm), SMB_VFS_OP_SYS_ACL_ADD_PERM, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_to_text), SMB_VFS_OP_SYS_ACL_TO_TEXT, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_init), SMB_VFS_OP_SYS_ACL_INIT, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_create_entry), SMB_VFS_OP_SYS_ACL_CREATE_ENTRY, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_set_tag_type), SMB_VFS_OP_SYS_ACL_SET_TAG_TYPE, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_set_qualifier), SMB_VFS_OP_SYS_ACL_SET_QUALIFIER, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_set_permset), SMB_VFS_OP_SYS_ACL_SET_PERMSET, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_valid), SMB_VFS_OP_SYS_ACL_VALID, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_set_file), SMB_VFS_OP_SYS_ACL_SET_FILE, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_set_fd), SMB_VFS_OP_SYS_ACL_SET_FD, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_delete_def_file), SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_get_perm), SMB_VFS_OP_SYS_ACL_GET_PERM, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_free_text), SMB_VFS_OP_SYS_ACL_FREE_TEXT, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_free_acl), SMB_VFS_OP_SYS_ACL_FREE_ACL, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_sys_acl_free_qualifier), SMB_VFS_OP_SYS_ACL_FREE_QUALIFIER, SMB_VFS_LAYER_LOGGER}, /* EA operations. */ {SMB_VFS_OP(smb_full_audit_getxattr), SMB_VFS_OP_GETXATTR, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_lgetxattr), SMB_VFS_OP_LGETXATTR, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_fgetxattr), SMB_VFS_OP_FGETXATTR, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_listxattr), SMB_VFS_OP_LISTXATTR, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_llistxattr), SMB_VFS_OP_LLISTXATTR, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_flistxattr), SMB_VFS_OP_FLISTXATTR, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_removexattr), SMB_VFS_OP_REMOVEXATTR, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_lremovexattr), SMB_VFS_OP_LREMOVEXATTR, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_fremovexattr), SMB_VFS_OP_FREMOVEXATTR, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_setxattr), SMB_VFS_OP_SETXATTR, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_lsetxattr), SMB_VFS_OP_LSETXATTR, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_fsetxattr), SMB_VFS_OP_FSETXATTR, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_aio_read), SMB_VFS_OP_AIO_READ, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_aio_write), SMB_VFS_OP_AIO_WRITE, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_aio_return), SMB_VFS_OP_AIO_RETURN, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_aio_cancel), SMB_VFS_OP_AIO_CANCEL, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_aio_error), SMB_VFS_OP_AIO_ERROR, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_aio_fsync), SMB_VFS_OP_AIO_FSYNC, SMB_VFS_LAYER_LOGGER}, {SMB_VFS_OP(smb_full_audit_aio_suspend),SMB_VFS_OP_AIO_SUSPEND, SMB_VFS_LAYER_LOGGER}, /* Finish VFS operations definition */ {SMB_VFS_OP(NULL), SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP}};/* The following array *must* be in the same order as defined in vfs.h */static struct { vfs_op_type type; const char *name;} vfs_op_names[] = { { SMB_VFS_OP_CONNECT, "connect" }, { SMB_VFS_OP_DISCONNECT, "disconnect" }, { SMB_VFS_OP_DISK_FREE, "disk_free" }, { SMB_VFS_OP_GET_QUOTA, "get_quota" }, { SMB_VFS_OP_SET_QUOTA, "set_quota" }, { SMB_VFS_OP_GET_SHADOW_COPY_DATA, "get_shadow_copy_data" }, { SMB_VFS_OP_STATVFS, "statvfs" }, { SMB_VFS_OP_OPENDIR, "opendir" }, { SMB_VFS_OP_READDIR, "readdir" }, { SMB_VFS_OP_SEEKDIR, "seekdir" }, { SMB_VFS_OP_TELLDIR, "telldir" }, { SMB_VFS_OP_REWINDDIR, "rewinddir" }, { SMB_VFS_OP_MKDIR, "mkdir" }, { SMB_VFS_OP_RMDIR, "rmdir" }, { SMB_VFS_OP_CLOSEDIR, "closedir" }, { SMB_VFS_OP_OPEN, "open" }, { SMB_VFS_OP_CLOSE, "close" }, { SMB_VFS_OP_READ, "read" }, { SMB_VFS_OP_PREAD, "pread" }, { SMB_VFS_OP_WRITE, "write" }, { SMB_VFS_OP_PWRITE, "pwrite" }, { SMB_VFS_OP_LSEEK, "lseek" }, { SMB_VFS_OP_SENDFILE, "sendfile" }, { SMB_VFS_OP_RENAME, "rename" }, { SMB_VFS_OP_FSYNC, "fsync" }, { SMB_VFS_OP_STAT, "stat" }, { SMB_VFS_OP_FSTAT, "fstat" }, { SMB_VFS_OP_LSTAT, "lstat" }, { SMB_VFS_OP_UNLINK, "unlink" }, { SMB_VFS_OP_CHMOD, "chmod" }, { SMB_VFS_OP_FCHMOD, "fchmod" }, { SMB_VFS_OP_CHOWN, "chown" }, { SMB_VFS_OP_FCHOWN, "fchown" }, { SMB_VFS_OP_CHDIR, "chdir" }, { SMB_VFS_OP_GETWD, "getwd" }, { SMB_VFS_OP_UTIME, "utime" }, { SMB_VFS_OP_FTRUNCATE, "ftruncate" }, { SMB_VFS_OP_LOCK, "lock" }, { SMB_VFS_OP_SYMLINK, "symlink" }, { SMB_VFS_OP_READLINK, "readlink" }, { SMB_VFS_OP_LINK, "link" }, { SMB_VFS_OP_MKNOD, "mknod" }, { SMB_VFS_OP_REALPATH, "realpath" }, { SMB_VFS_OP_FGET_NT_ACL, "fget_nt_acl" }, { SMB_VFS_OP_GET_NT_ACL, "get_nt_acl" }, { SMB_VFS_OP_FSET_NT_ACL, "fset_nt_acl" }, { SMB_VFS_OP_SET_NT_ACL, "set_nt_acl" }, { SMB_VFS_OP_CHMOD_ACL, "chmod_acl" }, { SMB_VFS_OP_FCHMOD_ACL, "fchmod_acl" }, { SMB_VFS_OP_SYS_ACL_GET_ENTRY, "sys_acl_get_entry" }, { SMB_VFS_OP_SYS_ACL_GET_TAG_TYPE, "sys_acl_get_tag_type" }, { SMB_VFS_OP_SYS_ACL_GET_PERMSET, "sys_acl_get_permset" }, { SMB_VFS_OP_SYS_ACL_GET_QUALIFIER, "sys_acl_get_qualifier" }, { SMB_VFS_OP_SYS_ACL_GET_FILE, "sys_acl_get_file" }, { SMB_VFS_OP_SYS_ACL_GET_FD, "sys_acl_get_fd" }, { SMB_VFS_OP_SYS_ACL_CLEAR_PERMS, "sys_acl_clear_perms" }, { SMB_VFS_OP_SYS_ACL_ADD_PERM, "sys_acl_add_perm" }, { SMB_VFS_OP_SYS_ACL_TO_TEXT, "sys_acl_to_text" }, { SMB_VFS_OP_SYS_ACL_INIT, "sys_acl_init" }, { SMB_VFS_OP_SYS_ACL_CREATE_ENTRY, "sys_acl_create_entry" }, { SMB_VFS_OP_SYS_ACL_SET_TAG_TYPE, "sys_acl_set_tag_type" }, { SMB_VFS_OP_SYS_ACL_SET_QUALIFIER, "sys_acl_set_qualifier" }, { SMB_VFS_OP_SYS_ACL_SET_PERMSET, "sys_acl_set_permset" }, { SMB_VFS_OP_SYS_ACL_VALID, "sys_acl_valid" }, { SMB_VFS_OP_SYS_ACL_SET_FILE, "sys_acl_set_file" }, { SMB_VFS_OP_SYS_ACL_SET_FD, "sys_acl_set_fd" }, { SMB_VFS_OP_SYS_ACL_DELETE_DEF_FILE, "sys_acl_delete_def_file" }, { SMB_VFS_OP_SYS_ACL_GET_PERM, "sys_acl_get_perm" }, { SMB_VFS_OP_SYS_ACL_FREE_TEXT, "sys_acl_free_text" }, { SMB_VFS_OP_SYS_ACL_FREE_ACL, "sys_acl_free_acl" }, { SMB_VFS_OP_SYS_ACL_FREE_QUALIFIER, "sys_acl_free_qualifier" }, { SMB_VFS_OP_GETXATTR, "getxattr" }, { SMB_VFS_OP_LGETXATTR, "lgetxattr" }, { SMB_VFS_OP_FGETXATTR, "fgetxattr" }, { SMB_VFS_OP_LISTXATTR, "listxattr" }, { SMB_VFS_OP_LLISTXATTR, "llistxattr" }, { SMB_VFS_OP_FLISTXATTR, "flistxattr" }, { SMB_VFS_OP_REMOVEXATTR, "removexattr" }, { SMB_VFS_OP_LREMOVEXATTR, "lremovexattr" }, { SMB_VFS_OP_FREMOVEXATTR, "fremovexattr" }, { SMB_VFS_OP_SETXATTR, "setxattr" }, { SMB_VFS_OP_LSETXATTR, "lsetxattr" }, { SMB_VFS_OP_FSETXATTR, "fsetxattr" }, { SMB_VFS_OP_AIO_READ, "aio_read" }, { SMB_VFS_OP_AIO_WRITE, "aio_write" }, { SMB_VFS_OP_AIO_RETURN,"aio_return" }, { SMB_VFS_OP_AIO_CANCEL,"aio_cancel" }, { SMB_VFS_OP_AIO_ERROR, "aio_error" }, { SMB_VFS_OP_AIO_FSYNC, "aio_fsync" }, { SMB_VFS_OP_AIO_SUSPEND,"aio_suspend" }, { SMB_VFS_OP_LAST, NULL }}; static int audit_syslog_facility(vfs_handle_struct *handle){ static const struct enum_list enum_log_facilities[] = { { LOG_USER, "USER" }, { LOG_LOCAL0, "LOCAL0" }, { LOG_LOCAL1, "LOCAL1" }, { LOG_LOCAL2, "LOCAL2" }, { LOG_LOCAL3, "LOCAL3" }, { LOG_LOCAL4, "LOCAL4" }, { LOG_LOCAL5, "LOCAL5" }, { LOG_LOCAL6, "LOCAL6" }, { LOG_LOCAL7, "LOCAL7" } }; int facility; facility = lp_parm_enum(SNUM(handle->conn), "full_audit", "facility", enum_log_facilities, LOG_USER); return facility;}static int audit_syslog_priority(vfs_handle_struct *handle){ static const struct enum_list enum_log_priorities[] = { { LOG_EMERG, "EMERG" }, { LOG_ALERT, "ALERT" }, { LOG_CRIT, "CRIT" }, { LOG_ERR, "ERR" }, { LOG_WARNING, "WARNING" }, { LOG_NOTICE, "NOTICE" }, { LOG_INFO, "INFO" }, { LOG_DEBUG, "DEBUG" } }; int priority; priority = lp_parm_enum(SNUM(handle->conn), "full_audit", "priority", enum_log_priorities, LOG_NOTICE); return priority;}static char *audit_prefix(connection_struct *conn){ static pstring prefix; pstrcpy(prefix, lp_parm_const_string(SNUM(conn), "full_audit", "prefix", "%u|%I")); standard_sub_snum(SNUM(conn), prefix, sizeof(prefix)-1); return prefix;}static BOOL log_success(vfs_handle_struct *handle, vfs_op_type op){ struct vfs_full_audit_private_data *pd = NULL; SMB_VFS_HANDLE_GET_DATA(handle, pd, struct vfs_full_audit_private_data, return True); if (pd->success_ops == NULL) { return True; } return bitmap_query(pd->success_ops, op);}static BOOL log_failure(vfs_handle_struct *handle, vfs_op_type op){ struct vfs_full_audit_private_data *pd = NULL; SMB_VFS_HANDLE_GET_DATA(handle, pd, struct vfs_full_audit_private_data, return True); if (pd->failure_ops == NULL) return True; return bitmap_query(pd->failure_ops, op);}static void init_bitmap(struct bitmap **bm, const char **ops){ BOOL log_all = False; if (*bm != NULL) return; *bm = bitmap_allocate(SMB_VFS_OP_LAST); if (*bm == NULL) { DEBUG(0, ("Could not alloc bitmap -- " "defaulting to logging everything\n")); return; } while (*ops != NULL) { int i; BOOL found = False; if (strequal(*ops, "all")) { log_all = True; break; } if (strequal(*ops, "none")) { break; } for (i=0; i<SMB_VFS_OP_LAST; i++) { if (vfs_op_names[i].name == NULL) { smb_panic("vfs_full_audit.c: name table not " "in sync with vfs.h\n"); } if (strequal(*ops, vfs_op_names[i].name)) { bitmap_set(*bm, i); found = True; } } if (!found) { DEBUG(0, ("Could not find opname %s, logging all\n", *ops)); log_all = True; break; } ops += 1; } if (log_all) { /* The query functions default to True */ bitmap_free(*bm); *bm = NULL; }}static const char *audit_opname(vfs_op_type op){ if (op >= SMB_VFS_OP_LAST) return "INVALID VFS OP"; return vfs_op_names[op].name;}static void do_log(vfs_op_type op, BOOL success, vfs_handle_struct *handle, const char *format, ...){ fstring err_msg; pstring op_msg; va_list ap; if (success && (!log_success(handle, op))) return; if (!success && (!log_failure(handle, op))) return; if (success) fstrcpy(err_msg, "ok"); else fstr_sprintf(err_msg, "fail (%s)", strerror(errno)); va_start(ap, format); vsnprintf(op_msg, sizeof(op_msg), format, ap); va_end(ap); syslog(audit_syslog_priority(handle), "%s|%s|%s|%s\n", audit_prefix(handle->conn), audit_opname(op), err_msg, op_msg); return;}/* Free function for the private data. */static void free_private_data(void **p_data){ struct vfs_full_audit_private_data *pd = *(struct vfs_full_audit_private_data **)p_data; if (pd->success_ops) { bitmap_free(pd->success_ops); } if (pd->failure_ops) { bitmap_free(pd->failure_ops); } SAFE_FREE(pd); *p_data = NULL;}/* Implementation of vfs_ops. Pass everything on to the default operation but log event first. */static int smb_full_audit_connect(vfs_handle_struct *handle, connection_struct *conn, const char *svc, const char *user){ int result; struct vfs_full_audit_private_data *pd = NULL; const char *none[] = { NULL }; const char *all [] = { "all" }; pd = SMB_MALLOC_P(struct vfs_full_audit_private_data); if (!pd) { return -1; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -