等保测评linux脚本,等保测评主机安全:centos访问控制
(续)
原标题:等保测评主机安全:centos访问控制(续)
⼀、说明
权限控制在等保测评⾥仅仅说了要求,但是怎么落地却基本没写,怎么说呢,⽐较抽象。所以,我觉得还是有必要了解⼀下centos系统⼤概有什么⽅法可以实现对⽤户的权限控制,不⾄于测评的时候完全不知道怎么测。这⾥我把我现在知道的关于权限控制的⽅法都列举出来,供⼤家参考参考。
linux修改口令的命令
这⾥是访问控制的上⼀篇⽂章,⼤家可以先看看上⼀篇:
等保测评主机安全:CentOS访问控制⼆、 更精细化的⽂件权限控制
⼀般的,对⽬录和⽂件,可以实现创建者、所属组、其他⽤户这三类⽤户(UGO)的访问权限设置(r、w、x)。⽽setfacl命令,则可以更为精确的在这三类⽤户之外对权限进⾏分配,叫做ACL权限设置。⽐如:让某⼀个⽤户对某⼀个⽂件具有某个权限。
十进制转换十六进制教程与setfacl相对的,可以⽤getfacl查看设置好的ACL权限。
2.1. ACL
⽐如⽤getfacl命令来查看⼀个定义好了的ACL⽂件:
[root@localhost ~]# getfacl ./ #file: #owner: root #group: admin user::rw- user:john:rw- group::rw-
group:dev:r-- mask::rw- other::r-- 类型 说明 #file: 说明⽂件名为 #owner: root 说明⽂件创建者为root #group: admin 说明⽂件所属组为admin组 user::rw- 定义了ACL_USER_OBJ, 说明⽂件创建者拥有read and write permission user:john:rw-定义了ACL_USER,这样⽤户john就拥有了对⽂件的读写权限,实现了我们⼀开始要达到的⽬的 group::rw- 定义了ACL_GROUP_OBJ,说明⽂件的所属组拥有read and write permission group:dev:r– 定义了ACL_GROUP,使得dev组拥有了对⽂件的read permission mask::rw- 定义了ACL_MASK的权限为read and write other::r– 定义了ACL_OTHER的权限为read
这⾥稍微说明下,mask::rw-代表着这个⽂件的最⼤权限,在ACL中定义的⽤户、组的权限实际都不是真实权限,真实的权限是要跟mask 的权限相与之后产⽣的权限。
如这个例⼦,mask的值为rw,所以定义的ACL的权限中,假如john的权限设置为rwx,那么那么它的最终权限就是与mask相与之后的结果,也就是rw。(当然,对于txt⽂件⽽⾔,执⾏权限没有啥意义)。
免费网站大全下载在线观看
注:Mask只对其他⽤户和组的权限有影响,对owner和other的权限是没有任何影响的。
2.2. ACL与UGO
UGO也就是我们常⽤的⽂件权限模式,⽐如:-rwxr-xr-x. 1 root root 10688 11⽉ 23 2013 /etc/init.d/iptables
⽽当你对某⽂件设置了ACL之后,再⽤ls命令查看UGO,就会发现多出⼀个+号:
[root@localhost ~]# ls -l -rwxrwxr--+ 1 root admin 0 Jul 3 23:10 test.sh
并且其中原来代表group权限的权限位,被mask所替代,也就是说rwxrwxr–中的rwx不再代表group的权限,⽽是代表mask,⽤getfacl 查看如下:
[root@localhost ~]# getfacl --omit-header ./test.sh user::rwx user:john:rwx group::rw- mask::rwx other::r--
可以得知,group的实际权限是rw-。
2.3. 更多内容
我这⾥就不继续摘抄了。
三、chroot命令
linux的⽬录结构如下:
通过chroot命令可以将根⽬录设置为指定的位置,⽽根⽬录之上的位置将不可再访问,则这样就实现了⼀定的访问控制。
四、sudo命令
sudo命令可以允许⽤户以另外的某个⽤户的⾝份执⾏某些命令,它的配置⽂件为/etc/sudoers。
⽐如在sudoers⽂件中这样配置:
4.1. 常见形式 beinan ALL=(root) /bin/chown, /bin/chmod
表⽰的是beinan⽤户可以在任何可能出现的主机名的主机中,可以切换到root下执⾏ /bin/chown ,可以切换到任何⽤户招执
⾏/bin/chmod 命令,但切换的时候都需要输⼊beinan⾃⼰的密码。
如果是这样:
beinan ALL=(root) NOPASSWD: /bin/chown,/bin/chmod
则beinan⽤户在任何可能出现的主机名的主机中,都可以切换到root下去执⾏/bin/chown命令,⽽且还不需要输⼊beinan⽤户⾃⼰的密码。(但执⾏chmod时还是需要beinan输⼊⾃⼰的密码)
所以在等号右边是⼀种这样的格式:
授权⽤户 主机=[(切换到哪些⽤户或⽤户组)] [是否需要密码验证] 命令1,[(切换到哪些⽤户或⽤户组)] [
是否需要密码验证] [命令2],[(切换到哪些⽤户或⽤户组)] [是否需要密码验证] [命令3]......
[(切换到哪些⽤户或⽤户组)]:如果不写,则默认为切换到root⽤户。如果是ALL ,则代表能切换到所有⽤户。与此相对应的,sudo命令有⼀个-u参数,以指定的⽤户作为新的⾝份。若不加上此参数,则预设以root作为新的⾝份。
[是否需要密码验证]:如果不写,则默认为要输⼊⾃⼰的密码。如果是NOPASSWD:,则代表不需要输⼊⾃⼰的密码。
%beinan ALL=/usr/sbin/*,/sbin/*
这⾥加%号代表⽤户组,%和⽤户组名之间不能有空格。⽽/usr/sbin/*中最后的符号代表通配符,表⽰sbin⽬录下的的所有命令。
⽽且对于命令,还可以指定参数,⽐如:
beinan ALL=/bin/more /etc/shadow
对于beinan⽤户,在这⾥只能⽤more命令查看/etc/shadow⽂件。
所以从上⾯的⼏个例⼦可以看到,sudo权限的控制粒度可以达到⾮常细的地步。
4.2. 别名
可以对⽤户、⽤户组、命令等设置别名(组),需要使⽤时直接引⽤这个别名(组)即可:
User_Alias SYSADER=beinan,linuxsir,%beinan User_Alias DISKADER=lanhaitun Runas_Alias OP=root Cmnd_Alias
SYDCMD=/bin/chown,/bin/chmod,/usr/sbin/adduser,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk 注:定义命令别名DSKCMD,下有成员parted和fdisk ; SYSADER ALL= SYDCMD,DSKCMD DISKADER ALL=(OP) DSKCMD
第⼀⾏:定义⽤户别名SYSADER 下有成员 beinan、linuxsir和beinan⽤户组下的成员,⽤户组前⾯必须加%号;
第⼆⾏:定义⽤户别名 DISKADER ,成员有lanhaitun
第三⾏:定义Runas⽤户,也就是⽬标⽤户的别名为OP,下有成员root
第四⾏:定义SYSCMD命令别名,成员之间⽤,号分隔,最后的!/usr/bin/passwd root 表⽰不能通过passwd 来更改root密码;
第五⾏:定义命令别名DSKCMD,下有成员parted和fdisk ;
第六⾏: 表⽰授权SYSADER下的所有成员,在所有可能存在的主机名的主机下运⾏或禁⽌运⾏SYDCMD和DSKCMD下定义的命令(这⾥的禁⽌是指SYDCMD定义⾥的!符号)。更为明确的说, beinan、linuxsir和beinan⽤户组下的成员能以root⾝份运⾏ chown 、chmod 、adduser、passwd,但不能更改root的密码;也可以以root⾝份运⾏ parted和fdisk ,本条规则的等价规则是:
beinan,linuxsir,%beinan ALL=/bin/chown,/bin/chmod,/usr/sbin/adduser,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd
root,/sbin/parted,/sbin/fdisk
第七⾏:表⽰授权DISKADER 下的所有成员,能以OP的⾝份,来运⾏ DSKCMD(所以op才是runas⽤户,⽬标⽤户?) ,不需要密码;更为明确的说 lanhaitun 能以root⾝份运⾏ parted和fdisk 命令;其等价规则是:lanhaitun ALL=(root) /sbin/parted,/sbin/fdisk4.3. 注意
对于某些命令,是不能够给与⽤户执⾏权限的,否则就是给与全部权限了。
/bin/bash,如果给与了⽤户以root⾝份执⾏该命令的权限,⽤户就可以⽤sudo -s或sudo -i登录任何⼀个⽤户。
su命令,如果给与了⽤户以root⾝份执⾏该命令的权限,⽤户可以切换到任何⼀个账户。
PS:更多内容请上⽹搜索。
五、su命令
通过su命令可以从现有账户切换到其他账户,除了root,切换到其它账户都需要⽬标账户的密码。
所以,从表⾯上看来su命令起不到什么访问控制的作⽤,毕竟要切换到⽬标账户需要知道对⽅的密码,那还不如直接⽤⽬标账户来登录。
但是实际上,它还是存在⼀些访问控制的功能的。
application error怎么解决在/etc/pam.d/su⽂件中,有如下内容:
auth sufficient pam_rootok.so #Uncomment the following line to implicitly trust users in the "wheel" group. #auth sufficient pam_wheel.so trust use_uid #Uncomment the following line to require a user to be in the "wheel" group. #auth required
php+mysql动态网站开发实例教程代码pam_wheel.so use_uid auth include system-auth account sufficient pam_succeed_if.so uid = 0 use_
uid quiet account include system-auth password include system-auth session include system-auth session optional pam_xauth.so
其中的#auth required pam_wheel.so use_uid,如果取消注释,则代表所有位于wheel⽤户组的⽤户,都失去了su命令的使⽤权限,⽆法再通过su命令切换到其他账户上,这⾥的wheel⽤户组为系统⾃创的⼀个⽤户组。
另外,其中的#auth sufficient pam_wheel.so trust use_uid,如果取消注释,则代表wheel组的⽤户为可信任的,wheel组的⽤户切换到其他账户不需要输⼊⽬标账户的⼝令,就像root⼀样。
如果想使⽤⾃定义的⽤户组,那么使⽤以下配置语句即可:
auth required pam_wheel.so use_uid group=myadmingroup 六、环境变量
环境变量也算是访问控制的⼀种,我们常见的⽐如安装oracle数据库时,需要指定⼀个账户进⾏安装,⼀般将这个账户命名为oracle。
这个账户就在~/.bash_profile⽂件中定义了某些环境变量:
[oracle@centos01 ~]$ cat ~/.bash_profile #.bash_profile #Get the aliases and functions if [ -f ~/.bash
rc ]; then . ~/.bashrc fi #User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH export ORACLE_BASE=/oracle export ORACLE_HOME=/oracle/app export ORACLE_SID=oracleSI export PATH=$ORACLE_HOME/bin:$PATH
这样⼀来,由于启动监听和oracle数据库的脚本⾥会⽤到其中定义的环境变量。
所以哪怕是root,没有配置环境变量,也没法启动启动监听和oracle数据库,因为相关脚本⾥需要使⽤的环境变量root账户没有进⾏定义。
unix操作系统用什么语言编写这样,也就起到了⼀定的访问控制的功能。
七、结尾
这⾥列举的都是⼀些⽐较基本的centos中可能涉及到访问控制的点了,当然,肯定还有⼀些技术要么我⾃⼰压根不知道,或者我还没遇到过,所以没法列举出来。
这些内容都⽐较基础,但也很繁琐和复杂,所以我都是摘抄加修改,弄出⼀些⽐较基础、实⽤的知识点。
我觉得先做到:不⼀定有能进⾏设置,但是有能⼒看得懂别⼈的设置,这样就先可以了。
⾄于⼀些命令⽐如setfacl有⼀些⽐较奇怪的⽤法,有兴趣的可以⾃⼰去加⼤深度的学习。
*本⽂原创作者:起于凡⽽⾮于凡,本⽂属于FreeBuf原创奖励计划,未经许可禁⽌转载返回搜狐,查看更多
责任编辑:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。