精华内容
下载资源
问答
  • 2021-11-07 11:49:52

    永久关闭selinux与临时关闭selinux
    selinux很多时候比较阻碍我们部署一些应用,比如Hadoop集群,docker容器应用,那么这个时候我们最好就把它关闭掉,让容器可以读取主机文件系统
    那么如何关闭呢?
    先查看状态
    1 # getenforce #查看selinux状态
    然后有两种方式关闭
    2 # setenforce 0 #临时关闭selinux
    3 # sed -i ‘s/^ *SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config #永久关闭(需重启系统)
    4 # shutdown -r now #重启系统
    其实还可以通过编辑selinux的文件来进行修改
    vim /etc/sysconfig/selinux #把selinux给注释掉即可

    更多相关内容
  • 默认装完CentOS,Selinux是打开的,这个你基本都是需要关闭,查看当前selinux的状态后,就可以按以下方法关闭selnux了
  • 关闭selinux

    2022-04-10 13:23:16
    关闭selinux: 1、永久生效 修改selinux配置文件位置:/etc/selinux/config SELINUX=enforceing #说明selinux已开启 SELINUX=disabled #说明selinux已关闭重启系统后生效 2、临时生效 setenforce 0 #立即关闭selinx...

    关闭selinux:

    1、永久生效
    修改selinux配置文件位置:/etc/selinux/config
    SELINUX=enforceing #说明selinux已开启
    SELINUX=disabled #说明selinux已关闭重启系统后生效

    2、临时生效
    setenforce 0 #立即关闭selinx,服务器重启后会重新开启

    3、查看当前selinux状态
    getenforce

    4、selinux是什么?
    selinux是Security-Enhanced Linux的简称,是美国国家安全局NSA=The National Security Agency和scc (Secure Computing Corporation)开发的Linux的一个扩张强制访问控制安全模块。


    展开全文
  • CentOS7-命令-关闭selinux

    千次阅读 2022-03-21 18:27:53
    关闭selinux有两种方法 临时关闭selinux 临时关闭命令: setenforce 0 查看selinux状态 getenforce 提示:Permissive 的话是不起用服务,但是会打印通知 永久关闭: 最好修改之前备份一下文件,防止出现问题后恢复 ...

    这个功能一般是在机器装好之后就关闭了

    这个功能是CentOS系统中的安全策略(大概了解了一下,没有深入了解这个selinux)

    关闭selinux有两种方法

    临时关闭selinux

    临时关闭命令:

    setenforce 0 
    

    查看selinux状态

    getenforce    
    

    提示:Permissive 的话是不起用服务,但是会打印通知

    永久关闭:

    最好修改之前备份一下文件,防止出现问题后恢复
    文件位置:/etc/selinux/config
    修改替换selinux状态

    sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
    

    grep 查看状态

    grep 'SELINUX=disabled' /etc/selinux/config
    

    提示: SELINUX=disabled 的话就是关闭了

    关闭之后最好是重启系统,不然可能不生效

    展开全文
  • Android11.0(R) MTK6771 user版本关闭 SELinux

    千次阅读 2021-03-10 13:19:44
    开始我们先来跟一下 selinux 的初始化过程 system\core\init\main.cpp int main(int argc, char** argv) { #if __has_feature(address_sanitizer) __asan_set_error_report_callback(AsanReportCallback); #endif ...

    开始我们先来跟一下 selinux 的初始化过程

    system\core\init\main.cpp

    int main(int argc, char** argv) {
    #if __has_feature(address_sanitizer)
        __asan_set_error_report_callback(AsanReportCallback);
    #endif
    
        if (!strcmp(basename(argv[0]), "ueventd")) {
            return ueventd_main(argc, argv);
        }
    
        if (argc > 1) {
            if (!strcmp(argv[1], "subcontext")) {
                android::base::InitLogging(argv, &android::base::KernelLogger);
                const BuiltinFunctionMap& function_map = GetBuiltinFunctionMap();
    
                return SubcontextMain(argc, argv, &function_map);
            }
    
            if (!strcmp(argv[1], "selinux_setup")) {
                return SetupSelinux(argv);
            }
    
            if (!strcmp(argv[1], "second_stage")) {
                return SecondStageMain(argc, argv);
            }
        }
    
        return FirstStageMain(argc, argv);
    }
    
    

    调用 SetupSelinux(argv),进入 selinux.cpp 中

    system\core\init\selinux.cpp

    int SetupSelinux(char** argv) {
        SetStdioToDevNull(argv);
    	...
    
        // Set up SELinux, loading the SELinux policy.
    #ifdef MTK_LOG
        if (GetMTKLOGDISABLERATELIMIT())
            SelinuxSetupKernelLogging_split();
        else
            SelinuxSetupKernelLogging();
    #else
        SelinuxSetupKernelLogging();
    #endif
        SelinuxInitialize();
    
    	....
    
    

    继续调用 SelinuxInitialize()

    void SelinuxInitialize() {
        LOG(INFO) << "Loading SELinux policy";
        if (!LoadPolicy()) {
            LOG(FATAL) << "Unable to load SELinux policy";
        }
    
        bool kernel_enforcing = (security_getenforce() == 1);
        bool is_enforcing = IsEnforcing();
        if (kernel_enforcing != is_enforcing) {
            if (security_setenforce(is_enforcing)) {
                PLOG(FATAL) << "security_setenforce(" << (is_enforcing ? "true" : "false")
                            << ") failed";
            }
        }
    
        if (auto result = WriteFile("/sys/fs/selinux/checkreqprot", "0"); !result.ok()) {
            LOG(FATAL) << "Unable to write to /sys/fs/selinux/checkreqprot: " << result.error();
        }
    
    }
    
    bool IsEnforcing() {
        if (ALLOW_PERMISSIVE_SELINUX) {
            return StatusFromCmdline() == SELINUX_ENFORCING;
        }
        return true;
    }
    
    EnforcingStatus StatusFromCmdline() {
        EnforcingStatus status = SELINUX_ENFORCING;
    
        ImportKernelCmdline([&](const std::string& key, const std::string& value) {
            if (key == "androidboot.selinux" && value == "permissive") {
                status = SELINUX_PERMISSIVE;
            }
        });
    
        return status;
    }
    
    

    security_getenforce() 读取 sys/fs/selinux/enforce 文件值

    获取 kernel 层 selinux 默认模式,当定义了 ALLOW_PERMISSIVE_SELINUX 时,会检测是否在

    cmdline 写入了 androidboot.selinux=permissive(lk 阶段写入)

    kernel_enforcing 和 is_enforcing 不相等时将 is_enforcing 写入 sys/fs/selinux/enforce

    在 11 User 版本中,security_setenforce(is_enforcing) 执行失败,开机直接自动进入 fastboot 模式

    提示 security_setenforce(false) failed: Invalid argument

    [ 4.475989] <2>.(2)[1:init]init: security_setenforce(false) failed: Invalid argument

    将下面这句注释能正常开机启动,但无法成功关闭 selinux

    PLOG(FATAL) << “security_setenforce(” << (is_enforcing ? “true” : “false”) << “) failed”;

    11 eng 版本,默认烧写后 enforce 即为 Permissive,在之前的低版本 eng 中,默认 enforce 为 Enforcing

    来看下 security_setenforce() 具体实现, selinux_log() 打印语句是我增加的,需要引入上面的三个头文件,

    external\selinux\libselinux\src\setenforce.c

    #include "callbacks.h"
    #include <selinux/android.h>
    #include <log/log.h>
    
    int security_setenforce(int value)
    {
    	int fd, ret;
    	char path[PATH_MAX];
    	char buf[20];
    	selinux_log(SELINUX_INFO, "SELinux: security_setenforce value %d\n", value);
    	selinux_log(SELINUX_INFO, "SELinux: security_setenforce selinux_mnt %s\n", selinux_mnt);
    	if (!selinux_mnt) {
    		errno = ENOENT;
    		return -1;
    	}
    
    	snprintf(path, sizeof path, "%s/enforce", selinux_mnt);
    	selinux_log(SELINUX_INFO, "SELinux: security_setenforce path %s\n", path);
    	fd = open(path, O_RDWR | O_CLOEXEC);
    	selinux_log(SELINUX_INFO, "SELinux: security_setenforce fd %d\n", fd);
    	if (fd < 0)
    		return -1;
    
    	snprintf(buf, sizeof buf, "%d", value);
    	ret = write(fd, buf, strlen(buf));
    	selinux_log(SELINUX_INFO, "SELinux: security_setenforce ret %d\n", ret);
    	close(fd);
    	if (ret < 0)
    		return -1;
    
    	return 0;
    }
    
    hidden_def(security_setenforce)
    
    

    selinux_mnt 的定义在 external\selinux\libselinux\src\policy.h

    /* Preferred selinux mount location */
    #define SELINUXMNT "/sys/fs/selinux"
    #define OLDSELINUXMNT "/selinux"
    
    /* selinuxfs mount point */
    extern char *selinux_mnt;
    

    selinux_mnt 赋值在 init.c

    external\selinux\libselinux\src\init.c
    
    void set_selinuxmnt(const char *mnt)
    {
    	selinux_mnt = strdup(mnt);
    }
    
    external\selinux\libselinux\src\android\android_platform.c
    
    int selinux_android_load_policy_from_fd(int fd, const char *description)
    {	
        ......
    	set_selinuxmnt(SELINUXMNT);
    
    

    所以最终的 path = sys/fs/selinux/enforce

    snprintf(path, sizeof path, “%s/enforce”, selinux_mnt);

    security_setenforce() 和 security_getenforce() 都是读写 path = sys/fs/selinux/enforce

    当使用 adb shell setenforce 0 时,调用对应文件位于,

    external\toybox\toys\android\setenforce.c

    通过上面加的 log,最终还是调用到 setenforce.c

    
    #define FOR_setenforce
    #include "toys.h"
    
    void setenforce_main(void)
    {
      char *new = *toys.optargs;
      int state, ret;
    
      if (!is_selinux_enabled()) error_exit("SELinux is disabled");
      else if (!strcmp(new, "1") || !strcasecmp(new, "enforcing")) state = 1;
      else if (!strcmp(new, "0") || !strcasecmp(new, "permissive")) state = 0;
      else error_exit("Invalid state: %s", new);
    
      ret = security_setenforce(state);
      if (ret == -1) perror_msg("Couldn't set enforcing status to '%s'", new);
    }
    
    
    adb shell setenforce 0
    SELinux: security_setenforce value 0
    SELinux: security_setenforce selinux_mnt /sys/fs/selinux
    SELinux: security_setenforce path /sys/fs/selinux/enforce
    SELinux: security_setenforce fd 3
    SELinux: security_setenforce ret -1
    setenforce: Couldn't set enforcing status to '0': Invalid argument
    
    

    看到 eng 版本 logcat 中打印了

    audit: type=1404 audit(1262304022.108:3): enforcing=0 old_enforcing=1 auid=4294967295 ses=4294967295 enabled=1 old-enabled=1 lsm=selinux res=1

    搜索找到 kernel 中 kernel-4.19\security\selinux\selinuxfs.c

    #ifdef CONFIG_SECURITY_SELINUX_DEVELOP
    static ssize_t sel_write_enforce(struct file *file, const char __user *buf,
    				 size_t count, loff_t *ppos)
    
    {
    	struct selinux_fs_info *fsi = file_inode(file)->i_sb->s_fs_info;
    	struct selinux_state *state = fsi->state;
    	char *page = NULL;
    	ssize_t length;
    	int old_value, new_value;
    
    	if (count >= PAGE_SIZE)
    		return -ENOMEM;
    
    	/* No partial writes. */
    	if (*ppos != 0)
    		return -EINVAL;
    
    	page = memdup_user_nul(buf, count);
    	if (IS_ERR(page))
    		return PTR_ERR(page);
    
    	length = -EINVAL;
    	if (sscanf(page, "%d", &new_value) != 1)
    		goto out;
    
    	new_value = !!new_value;
    
    	old_value = enforcing_enabled(state);
    	if (new_value != old_value) {
    		length = avc_has_perm(&selinux_state,
    				      current_sid(), SECINITSID_SECURITY,
    				      SECCLASS_SECURITY, SECURITY__SETENFORCE,
    				      NULL);
    		if (length)
    			goto out;
    		audit_log(audit_context(), GFP_KERNEL, AUDIT_MAC_STATUS,
    			"enforcing=%d old_enforcing=%d auid=%u ses=%u"
    			" enabled=%d old-enabled=%d lsm=selinux res=1",
    			new_value, old_value,
    			from_kuid(&init_user_ns, audit_get_loginuid(current)),
    			audit_get_sessionid(current),
    			selinux_enabled, selinux_enabled);
    		enforcing_set(state, new_value);
    		if (new_value)
    			avc_ss_reset(state->avc, 0);
    		selnl_notify_setenforce(new_value);
    		selinux_status_update_setenforce(state, new_value);
    		if (!new_value)
    			call_lsm_notifier(LSM_POLICY_CHANGE, NULL);
    	}
    	length = count;
    out:
    	kfree(page);
    	return length;
    }
    #else
    #define sel_write_enforce NULL
    #endif
    
    

    可以看到 CONFIG_SECURITY_SELINUX_DEVELOP 宏决定了是否存在 sel_write_enforce 方法

    接下来再来看 kernel 中 selinux 初始化设置

    kernel-4.19\security\selinux\hooks.c

    static __init int selinux_init(void)
    {
    	if (!security_module_enable("selinux")) {
    		selinux_enabled = 0;
    		return 0;
    	}
    
    	if (!selinux_enabled) {
    		pr_info("SELinux:  Disabled at boot.\n");
    		return 0;
    	}
    
    	pr_info("SELinux:  Initializing. %d\n", selinux_enforcing_boot);
    
    	memset(&selinux_state, 0, sizeof(selinux_state));
    	enforcing_set(&selinux_state, selinux_enforcing_boot);
    	selinux_state.checkreqprot = selinux_checkreqprot_boot;
    	selinux_ss_init(&selinux_state.ss);
    	selinux_avc_init(&selinux_state.avc);
    
    	....
    
    	if (selinux_enforcing_boot)
    		pr_info("SELinux:  Starting in enforcing mode\n");
    	else
    		pr_info("SELinux:  Starting in permissive mode\n");
    
    	return 0;
    }
    
    

    enforcing_set(&selinux_state, selinux_enforcing_boot);

    selinux_enforcing_boot 默认值定义由 CONFIG_SECURITY_SELINUX_DEVELOP 决定

    全局搜索到 kernel-4.19\kernel\configs\userdebug.config 中定义了 CONFIG_SECURITY_SELINUX_DEVELOP=y

    由此可以解释上面说的 eng 版本默认为 permissive 0,user 版本默认为 enforce 1

    但是最终搜索发现 eng 版本编译时并没有引入 userdebug.config,这就奇怪了,看 log 可以肯定的是 eng 版本中必须

    定义了 CONFIG_SECURITY_SELINUX_DEVELOP,但为何找不到定义的地方???

    device\mediateksample\k62v1_64_bsp\vnd_k62v1_64_bsp.mk

    ifeq ($(TARGET_BUILD_VARIANT), eng)
    KERNEL_DEFCONFIG ?= k62v1_64_bsp_debug_defconfig
    endif
    ifeq ($(TARGET_BUILD_VARIANT), user)
    KERNEL_DEFCONFIG ?= k62v1_64_bsp_defconfig
    endif
    ifeq ($(TARGET_BUILD_VARIANT), userdebug)
    KERNEL_DEFCONFIG ?= k62v1_64_bsp_defconfig userdebug.config
    endif
    PRELOADER_TARGET_PRODUCT ?= k62v1_64_bsp
    LK_PROJECT ?= k62v1_64_bsp
    TRUSTY_PROJECT ?= k62v1_64_bsp
    
    

    可以看到有且仅有编译 userdebug 版本时才引入 userdebug.config,所以想要 user 版本中默认关闭 selinux,只需编译

    时引入 userdebug.config。这样就定义了 CONFIG_SECURITY_SELINUX_DEVELOP

    初始化时 enforcing_set(&selinux_state, selinux_enforcing_boot); 直接写入 0

    kernel-4.19\security\selinux\include\security.h 中才能成功写入

    
    #ifdef CONFIG_SECURITY_SELINUX_DEVELOP
    static inline bool enforcing_enabled(struct selinux_state *state)
    {
    	return state->enforcing;
    }
    
    static inline void enforcing_set(struct selinux_state *state, bool value)
    {
    	state->enforcing = value;
    }
    #else
    static inline bool enforcing_enabled(struct selinux_state *state)
    {
    	return true;
    }
    
    static inline void enforcing_set(struct selinux_state *state, bool value)
    {
    }
    #endif
    

    最后当你在 user 版本关闭 selinux 后,烧写后重新开机系统会弹出您的设备内部出现了问题。请联系您的设备制造商了解详情 对话框

    具体原因可查看这篇进行屏蔽 https://blog.csdn.net/qq_18059855/article/details/108409157

    Linux权限详解(chmod、600、644、666、700、711、755、777、4755、6755、7755)

    8.0selinux状态获取过程

    深入理解SELinux/SEAndroid

    玩转Android10源码开发定制(13)修改安卓源码关闭selinux

    CONFIG_SECURITY_SELINUX_DEVELOP flag

    展开全文
  • Linux关闭SELinux

    千次阅读 2022-01-07 15:29:28
    记录操作如何关闭SELinux,并且避免系统无法启动的问题。 一. 以root权限执行:sudo su - 二. 运行命令:getenforce,验证SELinux状态 注:返回状态如果是enforcing,表明SELinux已开启 三. 选择临时关闭或者永久...
  • 3.永久关闭,在终端输入vim /etc/selinux/config,回车, vim /etc/selinux/config (1)向下箭头,选到SELINUX=enforcing这一行,键盘摁I键,进入插入状态, (2)将SELINUX=enforcing改为SELINUX=disabled
  • 查看SELinux状态:[root@localhost~]#getenforceEnforcing临时关闭SELinux:[root@localhost~]#setenforce0[root@localhost~]#getenforcePermissive永久关闭SELinux:在 /etc/sysconfig/ 目录下修改配置文件 selinux...
  • Linux 关闭 SeLinux

    2022-01-09 15:18:19
    由于SeLinux会限制部分系统资源访问权限,所以很多开发者很喜欢禁用SeLinux,在布署程序的自动化角本中,也默认加入了禁用SeLinux的代码。这样会导致用户在安装Centos7的计算机上所有帐号都无法登录(包括root),但...
  • CentOS7.9关闭SELinux

    2022-02-08 14:41:08
    2.关闭SELinux 2.1.查看SELinux状态命令 1.##如果SELinux status参数为enabled即为开启状态 /usr/sbin/sestatus -v SELinux status: enabled 2、 ##也可以用这个命令检查 getenforce 2.2.关闭...
  • 关闭SELinux

    千次阅读 2017-07-11 09:10:18
    那么如何来关闭SELinux呢?下面介绍两种关闭SELinux的方式,一种是临时关闭,临时关闭当重启系统后就又开启了。还有一种是永久关闭,永久关闭就需要修改配置文件来实现了。下面是两种方式的具体介绍。 临时关闭: ...
  • Android 10.0关闭selinux权限

    千次阅读 2021-06-30 15:58:03
    在开发中,我们经常会遇到由于SELinux造成的各种权限不足,即使拥有“万能的root权限”,也不能获取全部的权限,所以怎么样关闭selinux权限呢 system/core/init/selinux.cpp bool IsEnforcing() { { int fd...
  • init进程是Android内核启动的第一个用户进程,其中的SELinux也是在init进程中启动的,代码位置在system/core/init/init.cpp中。 通过代码我们可以看出,初始化时会通过security_getenforce()和selinux_is_...
  • Android7关闭selinux(设置为Permissive模式)设置selinux为宽容模式(Permissive)需要修改两个文件:Android/system/core/init/Android.mkAndroid/system/core/init/init.cpp网上有些文章说修改cmdline,如果修改...
  •  关闭SELinux的方法:  修改/etc/selinux/config文件中的SELINUX= 为 disabled ,然后重启。  如果不想重启系统,使用命令setenforce 0  注:  setenforce 1 设置SELinux 成为enforcing模式  setenforce...
  • android11 关闭 Selinux 的方法

    千次阅读 2021-12-18 17:14:20
    adb shell getenforce 查看当前 Selinux 功能是 permissive(关闭)还是 enforce(打开)的 adb shell setenforce 0 开Selinux:设置成模式permissive adb shell setenforce 1 关Selinux:设置成模式enforce Android...
  • Android 10 如何关闭selinux权限

    千次阅读 2021-10-18 11:21:19
    由于应用层访问设备节点的时候,因为selinux权限问题而访问不了,所以就先关闭selinux 代码路径: system/core/init/selinux.cpp 1、在/selinux.cpp文件中SelinuxInitialize()方法初始化selinux权限问题 void ...
  • 关闭selinux的方法汇总

    2021-07-13 14:55:25
    一、方法一:临时修改 使用命令setenforce 0 缺点:重启失效,而且是命令。...diff --git a/init/selinux.cpp b/init/selinux.cpp index ce8348e..03e2516 100644 --- a/init/selinux.cpp +++ b/init/selin
  • 如何在CentOS7上禁用或关闭SELinux

    千次阅读 2022-02-10 01:01:44
    介绍SELinux 是内置于 Linux 内核中的强制访问控制 (MAC) 执行器。它限制了可能对系统构成威胁的个别服务的权限。没有 SELinux 的 CentOS 系统依赖于其所有特权...
  • 修改Android10系统源码关闭selinux

    千次阅读 2021-01-15 22:31:37
    SEAndroid是Google在Android4.4上正式推出的一套以SELinux为核心的系统安全机制。在Android源码中,系统默认的seandroid配置存放如下路径: /home/qiang/lineageOs/system/sepolicy 目录中存放了比如adbd、...
  • Linux关闭SELinux方法

    2021-04-24 12:02:58
    临时关闭SELinux方法(重启后恢复): [root@HLZ ~]# setenforce 0 永久关闭SELinux方法: [root@HLZ ~]# vi /etc/selinux/config # 或 vi /etc/sysconfig/selinux 修改 SELINUX=enforcing 为 SELINUX=disabled
  • 关闭 selinux

    2021-02-10 23:36:26
    前言: 关闭 selinux 查看selinux的状态 # sestatus 临时关闭 # setenforce 0 或 # setenforce Permissive 永久关闭 # vim /etc/selinux/config 修改 SELINUX=disabled //永久关闭后,需要重启
  • 查看SELinux状态:1、/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态SELinux status: enabled2、getenforce ##也可以用这个命令检查关闭SELinux:1、临时关闭(不用重启机器):setenforce 0 ....
  • 一、永久关闭Selinux 查看Selinux状态-此为未关闭 2.临时关闭Selinux-重启后会自动开启 3.永久关闭Selinux​ 3.1进入vi /etc/selinux/conf 3.2把里面改成selinux=disabled 4.重启系统并查看...
  • 安全增强型Linux(SELinux)是一个Linux内核的功能,它提供支持访问控制的安全政策保护机制。1.以root权限远程连接linux2.编辑SELinux的config文件。 3.找到,按i进入编辑模式,通过修改该参数开启SELinux。可以根据...
  • 最近遇到Mysql数据启动报错的问题,于是发现是因为SELinux没有关闭,那么这篇文章就简单的记录SElinux是如何让关闭的。 前言 SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 ...
  • CentOS7中关闭selinux

    2021-02-11 09:23:58
    需要解决的问题是:没有关闭selinux时php在网站根目录没有写入权限,站点...只需要关闭selinux就可以了。但是通常情况下载安装完CentOS7后,默认情况下SElinux是启用状态:[root@localhos ~t]# sestatusSELinux stat...
  • Android 各版本关闭 Selinux 的方法

    万次阅读 2020-05-09 16:32:07
    查看当前 Selinux 功能是 permissive(关闭)还是 enforce(打开)的 adb shell setenforce 0 开Selinux:设置成模式permissive adb shell setenforce 1 关Selinux:设置成模式enforce 说明:setenforce 修改的...
  • 进入到配置文件 sudo vi /etc/selinux/config 将SELINUX的值改为disabled,保存并退出。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 104,259
精华内容 41,703
关键字:

关闭selinux