forked from SELinuxProject/selinux
-
Notifications
You must be signed in to change notification settings - Fork 0
This is the upstream repository for the Security Enhanced Linux (SELinux) userland libraries and tools. The software provided by this project complements the SELinux features integrated into the Linux kernel and is used by Linux distributions. All bugs and patches should be submitted to [email protected].
Surge1223/selinux
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Please submit all bug reports and patches to [email protected]. Subscribe via [email protected]. Build dependencies on Fedora: yum install audit-libs-devel bison bzip2-devel dbus-devel dbus-glib-devel flex flex-devel flex-static glib2-devel libcap-devel libcap-ng-devel pam-devel pcre-devel python-devel setools-devel swig xmlto redhat-rpm-config To build and install everything under a private directory, run: make DESTDIR=~/obj install install-pywrap To install as the default system libraries and binaries (overwriting any previously installed ones - dangerous!), on x86_64, run: make LIBDIR=/usr/lib64 SHLIBDIR=/lib64 install install-pywrap relabel or on x86 (32-bit), run: make install install-pywrap relabel This may render your system unusable if the upstream SELinux userspace lacks library functions or other dependencies relied upon by your distribution. If it breaks, you get to keep both pieces. To install libsepol on macOS (mainly for policy analysis): cd libsepol; make PREFIX=/usr/local install This requires GNU coreutils (brew install coreutils). [DEV-ONLY] Compile Android SElinux binaries against SELinux master The master branch of SELinux doesn't include native android support, and the external selinux repo from google is limited and only targets host for tools. You can make a few edits to get some useful binaries to use on Android on master branch even though libsepol and libselinux aren't patched for android compliance, the tools are still useful. dispol for example allows you to dump sepolicy rules for everything, for example you could recreate the supersu.te if you wanted. checkpolicy allows you to write out a new sepolicy with edits. getfilecon and setfilecon are very useful for getting contexts and setting contexts. I only enabled a few binaries, but there are many more you can add by following the examples in the Android.mk by default it builds: checkmodule checkpolicy chkcon dismod dispol getfilecon sefcontext_compile setfilecon I thought id share this here as folks often only use libsepol for sepolicy-inject and as security gets tighter it will be useful to know how to compile for target devices. dispol is very useful, selecting a file to output to and then choosing option 1 dumps all rules. also you can see specific rules, such as the filename_trans rule I implemented for Substratum's Interfacer, allowing it to auto set the contexts on files it creates in /data/system/theme to "theme_data_file". Using this [hide] Select a command: 1) display unconditional AVTAB 2) display conditional AVTAB (entirely) 3) display conditional AVTAB (only ENABLED rules) 4) display conditional AVTAB (only DISABLED rules) 5) display conditional bools 6) display conditional expressions 7) change a boolean value 8) display role transitions c) display policy capabilities p) display the list of permissive types u) display unknown handling setting F) display filename_trans rules f) set output file m) display menu q) quit Command ('m' for menu): F filename_trans rules: ueventd device :chr_file klog_device __kmsg__ wpa wifi_data_file :dir wpa_socket sockets interfacer system_data_file :file theme_data_file theme system_server system_data_file :sock_file system_ndebug_socket ndebugsocket hostapd wifi_data_file :dir wpa_socket hostapd hostapd wifi_data_file :dir wpa_socket sockets Command ('m' for menu): p permissive sids: recovery su supersu Command ('m' for menu): [/hide] similarly checkpolicy makes it easy to write out a new policy [hide] angler:/ $ checkpolicy /sepolicy -b -d -M -c 30 -o /sdcard/sepolicy.new checkpolicy: loading policy configuration from /sepolicy libsepol.policydb_index_others: security: 1 users, 2 roles, 801 types, 0 bools libsepol.policydb_index_others: security: 1 sens, 1024 cats libsepol.policydb_index_others: security: 63 classes, 13466 rules, 0 cond rules checkpolicy: policy configuration loaded checkpolicy: writing binary representation (version 30) to /sdcard/sepolicy.new [/hide] Theres quite a bit of trickery/makefile l33tness going on, so id encourage you to understand/look at this Sexy af Android.mk below, considering this is where most of the magic happens. [hide] [CODE] LOCAL_PATH:= $(call my-dir) libselinux_src_files := \ libselinux/src/audit2why.c \ libselinux/src/avc.c \ libselinux/src/avc_internal.c \ libselinux/src/avc_sidtab.c \ libselinux/src/booleans.c \ libselinux/src/callbacks.c \ libselinux/src/canonicalize_context.c \ libselinux/src/checkAccess.c \ libselinux/src/check_context.c \ libselinux/src/checkreqprot.c \ libselinux/src/compute_av.c \ libselinux/src/compute_create.c \ libselinux/src/compute_member.c \ libselinux/src/compute_relabel.c \ libselinux/src/compute_user.c \ libselinux/src/context.c \ libselinux/src/deny_unknown.c \ libselinux/src/disable.c \ libselinux/src/enabled.c \ libselinux/src/fgetfilecon.c \ libselinux/src/freecon.c \ libselinux/src/freeconary.c \ libselinux/src/fsetfilecon.c \ libselinux/src/get_context_list.c \ libselinux/src/get_default_type.c \ libselinux/src/get_initial_context.c \ libselinux/src/getenforce.c \ libselinux/src/getfilecon.c \ libselinux/src/getpeercon.c \ libselinux/src/init.c \ libselinux/src/is_customizable_type.c \ libselinux/src/label.c \ libselinux/src/label_backends_android.c \ libselinux/src/label_db.c \ libselinux/src/label_file.c \ libselinux/src/label_media.c \ libselinux/src/label_support.c \ libselinux/src/label_x.c \ libselinux/src/lgetfilecon.c \ libselinux/src/load_policy.c \ libselinux/src/lsetfilecon.c \ libselinux/src/mapping.c \ libselinux/src/matchmediacon.c \ libselinux/src/matchpathcon.c \ libselinux/src/policyvers.c \ libselinux/src/procattr.c \ libselinux/src/query_user_context.c \ libselinux/src/regex.c \ libselinux/src/selinux_check_securetty_context.c \ libselinux/src/selinux_config.c \ libselinux/src/selinux_restorecon.c \ libselinux/src/sestatus.c \ libselinux/src/setenforce.c \ libselinux/src/setexecfilecon.c \ libselinux/src/setfilecon.c \ libselinux/src/setrans_client.c \ libselinux/src/seusers.c \ libselinux/src/sha1.c \ libselinux/src/stringrep.c libselinux_android_srcs := \ libselinux/src/android/android.c \ libselinux/src/android/android_host.c \ common_src_files := \ libsepol/src/assertion.c \ libsepol/src/avrule_block.c \ libsepol/src/avtab.c \ libsepol/src/boolean_record.c \ libsepol/src/booleans.c \ libsepol/src/conditional.c \ libsepol/src/constraint.c \ libsepol/src/context.c \ libsepol/src/context_record.c \ libsepol/src/debug.c \ libsepol/src/ebitmap.c \ libsepol/src/expand.c \ libsepol/src/genbools.c \ libsepol/src/genusers.c \ libsepol/src/handle.c \ libsepol/src/hashtab.c \ libsepol/src/hierarchy.c \ libsepol/src/ibendport_record.c \ libsepol/src/ibendports.c \ libsepol/src/ibpkey_record.c \ libsepol/src/ibpkeys.c \ libsepol/src/iface_record.c \ libsepol/src/interfaces.c \ libsepol/src/kernel_to_cil.c \ libsepol/src/kernel_to_common.c \ libsepol/src/kernel_to_conf.c \ libsepol/src/link.c \ libsepol/src/mls.c \ libsepol/src/module.c \ libsepol/src/module_to_cil.c \ libsepol/src/node_record.c \ libsepol/src/nodes.c \ libsepol/src/polcaps.c \ libsepol/src/policydb.c \ libsepol/src/policydb_convert.c \ libsepol/src/policydb_public.c \ libsepol/src/port_record.c \ libsepol/src/ports.c \ libsepol/src/roles.c \ libsepol/src/services.c \ libsepol/src/sidtab.c \ libsepol/src/symtab.c \ libsepol/src/user_record.c \ libsepol/src/users.c \ libsepol/src/util.c \ libsepol/src/write.c cil_src_files := \ libsepol/cil/src/cil_binary.c \ libsepol/cil/src/cil_build_ast.c \ libsepol/cil/src/cil.c \ libsepol/cil/src/cil_copy_ast.c \ libsepol/cil/src/cil_find.c \ libsepol/cil/src/cil_fqn.c \ libsepol/cil/src/cil_list.c \ libsepol/cil/src/cil_log.c \ libsepol/cil/src/cil_mem.c \ libsepol/cil/src/cil_parser.c \ libsepol/cil/src/cil_policy.c \ libsepol/cil/src/cil_post.c \ libsepol/cil/src/cil_reset_ast.c \ libsepol/cil/src/cil_resolve_ast.c \ libsepol/cil/src/cil_stack.c \ libsepol/cil/src/cil_strpool.c \ libsepol/cil/src/cil_symtab.c \ libsepol/cil/src/cil_tree.c \ libsepol/cil/src/cil_verify.c libpcre2_src_files := \ pcre/dist2/src/pcre2_auto_possess.c \ pcre/dist2/src/pcre2_compile.c \ pcre/dist2/src/pcre2_config.c \ pcre/dist2/src/pcre2_context.c \ pcre/dist2/src/pcre2_dfa_match.c \ pcre/dist2/src/pcre2_error.c \ pcre/dist2/src/pcre2_find_bracket.c \ pcre/dist2/src/pcre2_maketables.c \ pcre/dist2/src/pcre2_match.c \ pcre/dist2/src/pcre2_match_data.c \ pcre/dist2/src/pcre2_jit_compile.c \ pcre/dist2/src/pcre2_newline.c \ pcre/dist2/src/pcre2_ord2utf.c \ pcre/dist2/src/pcre2_pattern_info.c \ pcre/dist2/src/pcre2_serialize.c \ pcre/dist2/src/pcre2_string_utils.c \ pcre/dist2/src/pcre2_study.c \ pcre/dist2/src/pcre2_substitute.c \ pcre/dist2/src/pcre2_substring.c \ pcre/dist2/src/pcre2_tables.c \ pcre/dist2/src/pcre2_ucd.c \ pcre/dist2/src/pcre2_valid_utf.c \ pcre/dist2/src/pcre2_xclass.c \ pcre/dist2/src/pcre2_chartables.c common_cflags := \ -Wall -W -Wundef \ -Wshadow -Wmissing-noreturn \ -Wmissing-format-attribute \ -std=gnu99 -O2 -fpic -fPIC \ -pipe -fno-strict-aliasing \ -D_GNU_SOURCE \ -D__BIONIC__ -DANDROID \ -D__ANDROID__ common_ldlibs := \ -lc common_includes := \ include \ checkpolicy/ \ libsepol/include/ \ libsepol/src/ \ libsepol/cil/include/ \ libsepol/cil/src/ \ pcre/dist2 \ pcre/include_internal \ pcre/include \ libpcre/dist \ libselinux/src \ libsepol/include/sepol \ libselinux/include \ libselinux/include/selinux \ /usr/include/python2.7 \ /usr/include/python3.* \ /usr/local/include yacc_flags := -x c -std=gnu89 FIND_HOSTOS := $(shell uname -s) HOST_NAME := $(shell echo $(FIND_HOSTOS) |sed -e s/L/l/ |sed -e s/D/d/ |sed s/W/w/ ) mkdir-android := $(shell mkdir -vp $(addprefix $(LOCAL_PATH)/libselinux/src/, android)) mkdir-include := $(shell mkdir -vp $(addprefix $(LOCAL_PATH)/include/, openssl private packagelistparser)) get-openssl := $(shell wget -qO - "https://android.googlesource.com/platform/external/boringssl/+archive/master/src/include/openssl.tar.gz" -O - | tar -xz -C include/openssl) get-private := $(shell wget -qO - "https://android.googlesource.com/platform/system/core/+archive/master/libcutils/include/private.tar.gz" -O - | tar -xz -C include/private) get-log := $(shell wget -qO - "https://android.googlesource.com/platform/system/core/+archive/master/liblog/include.tar.gz" -O - | tar -xz -C include) ifeq ($(HOST_NAME),darwin) cmds := \ $(shell wget -qO - "https://android.googlesource.com/platform/external/selinux/+/master/libselinux/include/selinux/android.h?format=text" | \ base64 -D > libselinux/include/selinux/android.h) \ $(shell wget -qO - "https://android.googlesource.com/platform/external/selinux/+/master/libselinux/src/android/android.c?format=text" | \ base64 -D > libselinux/src/android/android.c) \ $(shell wget -qO - "https://android.googlesource.com/platform/external/selinux/+/master/libselinux/src/android/android_host.c?format=text" | \ base64 -D > libselinux/src/android/android_host.c) \ $(shell wget -qO - "https://android.googlesource.com/platform/system/core/+/master/libpackagelistparser/include/packagelistparser/packagelistparser.h?format=text" | \ base64 -D > include/packagelistparser/packagelistparser.h) else cmds := \ $(shell wget -qO - "https://android.googlesource.com/platform/external/selinux/+/master/libselinux/include/selinux/android.h?format=text" | \ base64 -d > libselinux/include/selinux/android.h) \ $(shell wget -qO - "https://android.googlesource.com/platform/external/selinux/+/master/libselinux/src/android/android.c?format=text" | \ base64 -d > libselinux/src/android/android.c) \ $(shell wget -qO - "https://android.googlesource.com/platform/external/selinux/+/master/libselinux/src/android/android_host.c?format=text" | \ base64 -d > libselinux/src/android/android_host.c) \ $(shell wget -qO - "https://android.googlesource.com/platform/system/core/+/master/libpackagelistparser/include/packagelistparser/packagelistparser.h?format=text" | \ base64 -d > include/packagelistparser/packagelistparser.h) endif libselinux_prepare := $(mkdir-android) $(mkdir-include) $(get-openssl) $(get-private) $(get-log) $(cmds) checkpolicy_prepare := \ $(shell flex -o checkpolicy/lex.yy.c -l checkpolicy/policy_scan.l) \ $(shell yacc -vd checkpolicy/policy_parse.y -o checkpolicy/y.tab.c) \ $(shell bison -vd checkpolicy/policy_parse.y --defines=checkpolicy/policy_parse.h -o checkpolicy/policy_parse.c) ## # libpcre2.a # include $(CLEAR_VARS) LOCAL_MODULE := libpcre2 LOCAL_CFLAGS += -DHAVE_CONFIG_H LOCAL_C_INCLUDES := $(common_includes) LOCAL_SRC_FILES := $(libpcre2_src_files) LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH) include $(BUILD_STATIC_LIBRARY) ## # cil_lexer.a # include $(CLEAR_VARS) LOCAL_MODULE := cil_lexer LOCAL_MODULE_TAGS := optional LOCAL_C_INCLUDES := $(common_includes) LOCAL_CFLAGS := $(yacc_flags) $(common_cflags) LOCAL_SRC_FILES := libsepol/cil/src/cil_lexer.l include $(BUILD_STATIC_LIBRARY) ## # libsepol.a # include $(CLEAR_VARS) LOCAL_MODULE := libsepol LOCAL_MODULE_TAGES := optional LOCAL_C_INCLUDES := $(common_includes) LOCAL_CFLAGS := $(common_cflags) LOCAL_SRC_FILES := $(common_src_files) LOCAL_MODULE_CLASS := STATIC_LIBRARIES include $(BUILD_STATIC_LIBRARY) ## # chkcon # include $(CLEAR_VARS) LOCAL_MODULE := chkcon LOCAL_MODULE_TAGS := optional LOCAL_C_INCLUDES := $(common_includes) LOCAL_CFLAGS := $(common_cflags) LOCAL_SRC_FILES := libsepol/utils/chkcon.c LOCAL_STATIC_LIBRARIES := libsepol LOCAL_MODULE_CLASS := EXECUTABLES include $(BUILD_EXECUTABLE) ## # libselinux_static # include $(CLEAR_VARS) LOCAL_MODULE := libselinux_static LOCAL_MODULE_TAGS := optional LOCAL_WHOLE_STATIC_LIBRARIES := libpcre2 LOCAL_CFLAGS := -std=gnu89 -DAUDITD_LOG_TAG=1003 -DUSE_PCRE2 $(common_cflags) LOCAL_STATIC_LIBRARIES := libpcre2 LOCAL_C_INCLUDES := $(common_includes) LOCAL_SRC_FILES := $(libselinux_prepare) $(libselinux_src_files) $(libselinux_android_srcs) include $(BUILD_STATIC_LIBRARY) ## # sefcontext_compile # include $(CLEAR_VARS) LOCAL_MODULE := sefcontext_compile LOCAL_CFLAGS += -Wall -Werror -DUSE_PCRE2 -DNO_PERSISTENTLY_STORED_PATTERNS $(common_cflags) LOCAL_STATIC_LIBRARIES := libselinux_static libpcre2 libsepol LOCAL_C_INCLUDES := $(common_includes) LOCAL_SRC_FILES := libselinux/utils/sefcontext_compile.c LOCAL_MODULE_TAGS := optional include $(BUILD_EXECUTABLE) ## # getfilecon # include $(CLEAR_VARS) LOCAL_MODULE := getfilecon LOCAL_CFLAGS += -Wall -Werror -DUSE_PCRE2 -DNO_PERSISTENTLY_STORED_PATTERNS $(common_cflags) LOCAL_STATIC_LIBRARIES := libselinux_static libpcre2 libsepol LOCAL_C_INCLUDES := $(common_includes) LOCAL_SRC_FILES := libselinux/utils/getfilecon.c LOCAL_MODULE_TAGS := optional include $(BUILD_EXECUTABLE) ## # setfilecon # include $(CLEAR_VARS) LOCAL_MODULE := setfilecon LOCAL_CFLAGS += -Wall -Werror -DUSE_PCRE2 -DNO_PERSISTENTLY_STORED_PATTERNS $(common_cflags) LOCAL_STATIC_LIBRARIES := libselinux_static libpcre2 libsepol LOCAL_C_INCLUDES := $(common_includes) LOCAL_SRC_FILES := libselinux/utils/setfilecon.c LOCAL_MODULE_TAGS := optional include $(BUILD_EXECUTABLE) ## # checkpolicy # include $(CLEAR_VARS) LOCAL_SRC_FILES := \ $(checkpolicy_prepare) \ checkpolicy/lex.yy.c \ checkpolicy/y.tab.c \ checkpolicy/checkpolicy.c \ checkpolicy/module_compiler.c \ checkpolicy/parse_util.c \ checkpolicy/policy_define.c \ checkpolicy/queue.c LOCAL_MODULE := checkpolicy LOCAL_MODULE_TAGS := optional LOCAL_C_INCLUDES := $(common_includes) LOCAL_CFLAGS := $(yacc_flags) $(common_cflags) LOCAL_STATIC_LIBRARIES := libsepol LOCAL_CFLAGS += -std=gnu99 -fpic -fPIC LOCAL_YACCFLAGS := -v include $(BUILD_EXECUTABLE) ## # checkmodule # include $(CLEAR_VARS) LOCAL_SRC_FILES := \ $(checkpolicy_prepare) \ checkpolicy/lex.yy.c \ checkpolicy/y.tab.c \ checkpolicy/checkmodule.c \ checkpolicy/module_compiler.c \ checkpolicy/parse_util.c \ checkpolicy/policy_define.c \ checkpolicy/queue.c LOCAL_MODULE := checkmodule LOCAL_MODULE_TAGS := optional LOCAL_C_INCLUDES := $(common_includes) LOCAL_CFLAGS := $(yacc_flags) $(common_cflags) LOCAL_STATIC_LIBRARIES := libsepol LOCAL_CFLAGS += -std=gnu99 -fpic -fPIC LOCAL_YACCFLAGS := -v include $(BUILD_EXECUTABLE) ## # dispol # include $(CLEAR_VARS) LOCAL_MODULE := dispol LOCAL_MODULE_TAGS := optional LOCAL_C_INCLUDES := $(common_includes) LOCAL_SRC_FILES := checkpolicy/test/dispol.c LOCAL_CFLAGS := $(yacc_flags) $(common_cflags) LOCAL_STATIC_LIBRARIES := libsepol LOCAL_CFLAGS += -std=gnu99 -fpic -fPIC LOCAL_MODULE_TAGS := optional include $(BUILD_EXECUTABLE) ## # dismod # include $(CLEAR_VARS) LOCAL_MODULE := dismod LOCAL_MODULE_TAGS := optional LOCAL_C_INCLUDES := $(common_includes) LOCAL_SRC_FILES := checkpolicy/test/dismod.c LOCAL_CFLAGS := $(yacc_flags) $(common_cflags) LOCAL_STATIC_LIBRARIES := libsepol LOCAL_CFLAGS += -std=gnu99 -fpic -fPIC LOCAL_MODULE_TAGS := optional include $(BUILD_EXECUTABLE) [/CODE] [/hide] theres a submodule for libpcre2 so you'll have to use git clone --recursive, AKA git clone --recursive https://github.com/Surge1223/selinux.git selinux-master then building also depends on the NDK build system reading the jni/Application.mk first, before Android.mk so the NDK build command is [quote]$NDK/ndk-build APP_PROJECT_PATH=. APPLICATION_BULID_SCRIPT=Application.mk[/quote] The main purpose of me posting this here is so that in the future, if it becomes necessary to create/build tools to deal with the additional restrictions on Android, this can serve as a starting point on building.
About
This is the upstream repository for the Security Enhanced Linux (SELinux) userland libraries and tools. The software provided by this project complements the SELinux features integrated into the Linux kernel and is used by Linux distributions. All bugs and patches should be submitted to [email protected].
Resources
Stars
Watchers
Forks
Packages 0
No packages published
Languages
- C 73.0%
- Python 17.4%
- Roff 5.3%
- Objective-C 1.3%
- Makefile 1.1%
- Yacc 0.7%
- Other 1.2%