作为一个开放源代码的操作系统,linux系统以其安全性,高效稳定而广泛应用,主要从账户安全,系统引导,登录控制的角度,优化linux系统的安全性,linux的环境的弱口令检查,网络扫描等安全工具的构建和使用,帮助运维人员查找安全隐患,及时采取有针对性的措施。
一般情况下,不建议直接使用root用户登录,一是减少因操作失误而造成的破坏;二是降低特权密码被泄露的风险。鉴于这些原因,需要为普通用户提供一种身份切换或权限提升机制,以进行管理任务
使用su命令,可以切换一个指定的用户, 拥有该用户的所有权限
[root@localhost ~]# su - zhangsan
//root切换为普通用户,不需要密码验证
[zhangsan@localhost ~]$ su- root
需要密码:
//普通用户切换为root,需要验证
选项“-”等同于"-login"或"-"表示切换用户后进入目标用户的登录shel环境,若不带此选项则仅切换身份,不切换用户环境。
默认所有用户允许使用su命令,从而有机会反复尝试其他用户(root) 的登陆密码,带来安全风险。可以使用pam_ wheei认证模块,只允许极个别用户使用su命令进行切换。
通过su命令可以非常方便地切换为另一个用户,但前提条件是必须知道目标用户的登录密码。
例如,若要从zhangsan用户切换为root用户,必须知道root用户的密码。对于生产环境中的Linux服务器,每多一个人知道特权密码,其安全风险也就增加一分。那么,有没有一种折中的办法,既可以让普通用户拥有一部分管理权限. 又不需要将root用户的密码告诉他呢?答案是肯定的.
使用sudo命令就可以提升执行权限。不过,需要由管理员预先进行授权,指定允许哪些用户以超级用户(或其他普通用户)的身份来执行哪些命令.
sudo机制的配置文件为/etc/sudoers。/etc/sudoers文件的默认权限为440,需使用专门的visudo工具进行编辑。虽然也可以用vim进行编辑,但保存时必须执行" :w! "命令来强制操作,否则系统将提示为只读文件而拒绝保存。
第一次通过sudo执行命令时,必须以用户自己的密码(不是root用户或者其他用户的密码)进行验证。此后再次通过sudo执行时,只要不与前一-次sudo操作的间隔超过5分钟, 则不再重复验证。
权配置主要包括 用户,主机.命令三个部分各部分的具体含义如下:
user MACHINE=COMMAND 命令前加!则表示这个命令不执行
1.用户(user):直接授权指定的用户名,或采用"%组名”的形式(授权-个组的所有用户)。
2.主机(MACHINE):使用此配置文件的主机名称。此部分主要是方便在多个主机间共用同一份sudoers,文件,般设为localhost或者实际的主机名即可.
3.命令(COMMANDS):允许授权的用户通过sudo方式执行的特权命令。需填写命令程序的完整路径,多个命令之间以逗号”, “进行分隔。
假如授权给aaa用户 在localhost 主机上执行ifconfig命令:
[root@localhost ~]# vim /etc/sudoers
例如,若要授权用户aaa能够执行ifconfig命令来修改IP地址,而wheel组的用户无需验证密码即可执行任何命令,可以执行以下操作。
修改配置文件/etc/sudoers
[root@localhost ~]# visudo //也可使用vim /etc/sudoers
%wheel ALL=(ALL) NOPASSWD: ALL
//wheel组的用户不需要密码验证
aaa localhost=/sbin/ifconfig
//aaa能在主机localhost,上执行ifconfig命令修改IP地址
当使用相同授权的用户较多,或者授权的命令较多时,可以采用集中定义的别名,用户主机命令部分都可以定义为别名(必须为大写),分别通过关键字User. Alias, Host_ Alias, Cmnd_ Alias来进行设置。
例如,以下操作通过别名方式来添加授权记录,允许用户aaa在主机localhost中执行rpm, yum命令。
User_ Alias USER=aaa
Host_ Alias HOST=localhost
Cmnd_ Alias CMND=/bin/rpm,/usr/bin/yum
USER HOST=CMND
这四行表示允许用户aaa在主机localhost上执行rpm,yum命令
aaa localhost=/sbin/ ,!/sbin/ifconfig
aaa可以在主机localhost执行在/sbin目录下除了ifconfig外所有的命令*
aaa@localhost ~]$ ifconfig ens33 10.0.0.1/8 //未使用sudo命令
SIOCSIFADDR: 不允许的操作
SIOCSIFFLAGS: 不允许的操作
SIOCSIFNETMASK: 不允许的操作
[aaa@localhost ~]$ sudo ifconfig ens33 10.0.0.1/8 //使用sudo命令,便可以执行
Connection closed by foreign host.
查询用户的授权操作
[root@localhost ~]# sudo -l