Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 用于启用selinux的Shell脚本_Bash_Selinux - Fatal编程技术网

Bash 用于启用selinux的Shell脚本

Bash 用于启用selinux的Shell脚本,bash,selinux,Bash,Selinux,如何在具有根访问权限的bash脚本中以编程方式启用selinux 我已经知道我可以安装以下必要的软件包: if sestatus | grep -q disabled; then yum -y install selinux-policy selinux-policy-targeted policycoreutils-python fi 但如何编写以下步骤的脚本: 在/boot/grub/menu.lst中,向内核行追加“selinux=1 security=selinux” 在根目

如何在具有根访问权限的bash脚本中以编程方式启用selinux

我已经知道我可以安装以下必要的软件包:

if sestatus | grep -q disabled; then
    yum -y install selinux-policy selinux-policy-targeted policycoreutils-python
fi
但如何编写以下步骤的脚本:

  • /boot/grub/menu.lst
    中,向内核行追加
    “selinux=1 security=selinux”
  • 在根目录中创建一个空的
    .autorelabel
    文件

是否有人在GitHub的某个地方编写了脚本?我们正在使用Amazon Linux,但我认为CentOS或RHEL的步骤是相同的。

好吧,我将以前不正确的脚本更改为适合您的脚本。比我更有sed经验的人可能会将selinux系列添加为一行,但我得到的是:

#!/bin/bash
if sestatus | grep -q disabled; then
    yum -y install selinux-policy selinux-policy-targeted policycoreutils-python
fi
while IFS= read -r line; do
    firstStr=$(echo $line | awk '{print $1;}')
    if [[ $firstStr = 'kernel' ]] ; then
        echo "$line selinux=1 security=selinux" >> outFile.txt
    else
        echo $line >> outFile.txt
    fi
done < /etc/grub/menu.lst
mv outFile.txt /etc/grub/menu.lst
touch /.autorelabel
#/bin/bash
如果sestatus | grep-q被禁用;然后
yum-y安装selinux策略selinux策略目标policycoreutils python
fi
而IFS=读取-r行;做
firstStr=$(echo$行| awk'{print$1;}')
如果[[$firstStr='kernel']];然后
echo“$line selinux=1 security=selinux”>>outFile.txt
其他的
echo$line>>outFile.txt
fi
完成
这应该适合您,它将要做的是将selinux行附加到以kernel开头的任何行,然后在根目录中为您创建一个空的.autorelabel文件。您需要以root用户身份运行脚本,因为它将在root用户拥有的目录中创建和编辑文件,但它将完全执行您需要的操作。

最后使用:

if ! cat /boot/grub/menu.lst | grep -q "selinux=1 security=selinux"; then
    yum -y install selinux-policy selinux-policy-targeted policycoreutils-python
    sed -i -e 's/kernel\s[^\n]*/& selinux=1 security=selinux/g' /boot/grub/menu.lst
    yum -y update
    touch /.autorelabel
    echo "[Remediated] selinux enabled, reboot required"
else
    echo "[Skipping] selinux appears to be enabled"
fi

CentOS没有
/etc/grub/
。你是在问如何在文件中添加一行吗?这可能更适合我们的姐妹网站。在寻找预先编写的脚本时寻求帮助的问题在这里显然是离题的(请参见“有些问题仍然离题”列表中的第4步),而您单独询问的两个步骤从编程角度来看几乎完全无关。此外,前半部分与,第二个是复制的。
/etc/grup/menu.lst
正在覆盖文件,而不是附加到文件。此外,OP希望使用内核命令行附加到特定行,而不是在整个文件的末尾(在文件末尾添加
selinux=1 security=selinux
是无效的GRUB语法)。用于自动重新标记支持的“根目录”是
/
,而不是
/root
。哇,你完全正确。对不起,我开得太快了,没注意到。我将据此修正我的答案。只是想了解一下,OP是否希望将它附加到内核行中,比如
kernel/boot/vmlinuz-2.6.32.130.el6.i686 ro root=LABEL=/1 rhgb quiet
-->
kernel/boot/vmlinuz-2.6.32.130.el6.i686 ro root=LABEL=/1 rhgb quiet selinux=1 security=selinux