zoukankan      html  css  js  c++  java
  • Linux组和提权

    1 组命名管理**    1

    1.1 group组信息和密码信息    1

    1.1.1 /etc/group 组账户信息    1

    1.1.2 /etc/gshadow 组密码信息    1

    1.1.3 groupadd增加新组    1

    1.1.4 使用groupmod命令修改组信息    1

    1.1.5 使用groupdel删除组    1

    1.1.6 使用gpasswd设置组密码    1

    1.1.7 使用newgrp命令切换基本组身份    1

    2 5身份切换*****    1

    2.1 Shell分类    1

    2.2 全局配置和个人配置设置冲突, 以个人设置为准    1

    2.3 如果全局配置和个人配置出现冲突, 那么如何验证呢?    1

    2.4 切换用户,使用命令su [-] username    1

    3 sudo提升权限*****    1

    3.1 entos7提权方法    1

    3.2 sudo配置选项详解    1

    3.3 检查普通用户sudo权限明细    1

    3.4 sudo免密码配置选项    1

    3.5 sudo配置组    1

    3.6 配置sudo权限    1

    4 sudo日志审计    1

    4.1 安装sudorsysylog    1

    4.2 日志审计    1

    1. 组命名管理**

    2. group组信息和密码信息

        组账户信息保存在/etc/group和/etc/gshadow两个文件中。

    1. /etc/group 组账户信息

    [root@oldboy ~]# head -3 /etc/group

    root:x:0:

    bin:x:1:

    daemon:x:2:

    // /etc/group由 ':' 分割成4个字段,每个字段的具体含义如下:

    字段名称 注释说明

    1.组账户名称 //组的名称

    2.密码占位符 //组的密码(存在/etc/gshadow)

    3.组GID //组GID信息

    4.组成员 //这里仅显示附加成员,基本成员不显示

    1. /etc/gshadow 组密码信息

    [root@oldboy ~]# head -4 /etc/gshadow

    root:::

    bin:::

    daemon:::

    sys:::

    // /etc/gshadow由 ':' 分割成4个字段,每个字段的具体含义如下:

    字段名称 注释说明

    1.组账户名称 //组名称

    2.密码占位符 //组密码

    3.组管理员 //组管理员

    4.组成员 //这里仅显示附加成员,基本成员不显示

    1. groupadd增加新组

        groupadd [-g GID] groupname

        -g:指定组的GID,不指定GID时,GID从1000开始

    [root@oldboy ~]# tail -1 /etc/group

    music:x:2000:

        -r:创建系统组,gid从201-999

    [root@oldboy ~]# tail -1 /etc/group

    song:x:996:

     

    1. 使用groupmod命令修改组信息

        groupmod [选项] groupname

        -g:修改组GID

    [root@oldboy ~]# tail -1 /etc/group

    song:x:3001:

        -n:修改组名称

    [root@oldboy ~]# tail -1 /etc/group

    song1:x:3001:

     

    1. 使用groupdel删除组

        groupdel groupname

        当该组是用户的基本组时无法删除,只有删除用户或者用户变更基本后,方可删除该组

    [root@oldboy ~]# tail -1 /etc/passwd

    cat:x:6002:3001::/home/cat:/bin/bash

    [root@oldboy ~]# groupdel song1

    groupdel:不能移除用户"cat"的主组

     

        当该组只是用户的附加组时,可以直接删除

    uid=6002(cat) gid=3000(music) 组=3000(music),3001(song1)

    [root@oldboy ~]# groupdel song1

     

    1. 使用gpasswd设置组密码

    [root@oldboy ~]# gpasswd music

    正在修改 music 组的密码

    新密码:

    请重新输入新密码:

     

    1. 使用newgrp命令切换基本组身份

    //检查账户信息

    [root@oldboy ~]# id oldboy

    uid=6001(oldboy) gid=5008(network_sa) gro

     

     

     

     

     

     

     

     

     

     

     

    1. 5身份切换*****

    2. Shell分类

    1、交互式shell 等待用户输入执行提交的命令(终端操作), exit退出

    2、非交互式shell 执行shell脚本, 脚本执行结束shell自动退出

    3、登陆shell 需要输入用户名和密码才能进入shell, su - oldboy

    4、非登陆shell 不需要输入用户和密码就能进入,比如执行, sh, bash

    查看登陆shell

    [root@oldboy ~]# pstree

    systemd─┬─NetworkManager───2*[{NetworkManager}]

    ├─VGAuthService

    ├─agetty

    ├─auditd───{auditd}

    ├─crond

    ├─dbus-daemon

    ├─master─┬─pickup

    │ └─qmgr

    ├─polkitd───5*[{polkitd}]

    ├─rsyslogd───2*[{rsyslogd}]

    ├─sshd───sshd───bash───pstree

    ├─systemd-journal

    ├─systemd-logind

    ├─systemd-udevd

    ├─tuned───4*[{tuned}]

    └─vmtoolsd───{vmtoolsd}

     

    //临时设置,永久设置需要写配置文件

    [root@oldboy ~]# export PS1='[h@u ]#'

    [oldboy@root 02:06:28]#

    bash配置文件

    Bash的配置文件保存用户的工作环境

    个人配置文件: ~/.bash_profile ~/.bashrc

    全局配置文件:/etc/profile /etc/profile.d/*.sh /etc/bashrc

     

    profile类文件, 设定环境变量, 登陆前运行的脚本和命令

    bashrc 类文件, 设定本地变量, 定义命令别名

     

    1. 全局配置和个人配置设置冲突, 以个人设置为准

    1、shell配置文件应用顺序

        //登录式shell配置文件执行顺序

        /etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc

     

        //非登陆式shell配置文件执行顺序

        ~/.bashrc->/etc/bashrc->/etc/profile.d/*.sh

     

        //如何验证登陆shell和非登陆shell,配置文件执行顺序, 只需要在每个配置文件加入一段 "echo"即可。

        //最后通过登陆shell和非登录shell方式登陆linux, 即可验证执行顺序。

    1.     如果全局配置和个人配置出现冲突, 那么如何验证呢?

     

        编辑全局配置 /etc/profile 新增一行: PS1='[h@u ]#'

        [oldboy@root 02:16:57]# //当前终端shell环境

        编辑个人配置 /home/oldboy/.bash_profile 新增一行: PS1='[u@H]#'

    [oldboy@root 02:18:27]#su oldboy

    [oldboy@oldboy root]$

    [oldboy@root 02:18:34]# su - oldboy

    [oldboy@oldboy.com]#

    创建用户,并登录系统

    [root@oldboy ~]# useradd oldboy

    [root@oldboy ~]# echo "123"|passwd --stdin oldboy

    更改用户 oldboy 的密码 。

    passwd: 所有的身份验证令牌已经成功更新。

    //使用oldboy用户登录Linux

    oldboy@10.0.0.200's password:

    Last login: Sun Nov 5 17:23:06 2017 from 10.0.0.200

    [oldboy@oldboy ~]$

     

    //可以使用whoami查看当前登录用户

    [oldboy@oldboy ~]$ whoami

    oldboy

    1. 切换用户,使用命令su [-] username

    su命令后面跟 - 代表进入登陆式shell 否则代表进入非登陆式shell 只不过他们所执行的环境变量配置文件不一样。

    普通用户su -不加username时可以切换root用户, 但需要输入密码。

    超级管理员root用户使用su -切换普通用户不需要密码。

    [oldboy@oldboy ~]$ pwd

    /home/oldboy

     

    //不加 '-' 切换到root账户下时,当前目录没有变化

    [oldboy@oldboy ~]$ su

    密码:

    [root@oldboy oldboy]# pwd

    /home/oldboy

    [root@oldboy oldboy]# exit

    exit

     

    //加上 '-' 切换到root账户后,当前目录为root账户的家目录。

    //当用root切换普通用户时,是不需要输入密码的。

    [oldboy@oldboy ~]$ su -

    密码:

    [root@oldboy ~]# pwd

    /root

    以某个用户的身份执行某个服务,使用命令su -c username

     

    [root@oldboy ~]# su - oldboy -c 'ifconfig'

    [root@oldboy ~]# su - oldboy -c 'ls ~'

    1. sudo提升权限*****

    su切换用户身份,如果每个普通用户都能切换到root身份,如果某个用户不小心泄漏了root的密码,那系统会变得非常不安全。

    为了改进这个问题,从而产生了sudo这个命令。使用sudo执行一个root才能执行的命令是可以办到的,但是需要输入密码,这个密码并不是root的密码而是用户自己的密码。

    默认只有root用户能使用sudo命令,普通用户想要使用sudo,是需要root预先设定的,即,使用 visudo命令去编辑相关的配置文件/etc/sudoers

     

    1. centos7提权方法

    [root@oldboy ~]# usermod -G wheel oldboy

     

    1. sudo配置选项详解

    //下面解释如上每行代表含义

    用户名

    主机名

    角色名

    命令名

      

    root

    ALL=

    (ALL)

    ALL

      

    oldboy

    ALL

    使用最高角色执行

    /bin/rm,

    /bin/cp

    //执行命令

    oldboy

    ALL=(ALL)

    NOPASSWD:/bin/cp,

    /bin/rm

    不需要密码使用rmcp命令

     

     

    普通用户验证sudo权限

    //切换普通用户

    [root@oldboy ~]# su - oldboy

     

    1. 检查普通用户sudo权限明细

    [oldboy@oldboy ~]$ sudo -l

    ...省略部分

    User oldboy may run the following commands on this host:

    (ALL) /bin/rm, (ALL) /bin/cp

     

    //普通用户删除opt目录,删除失败

    [oldboy@oldboy ~]$ rm -rf /opt/

    rm: cannot remove `/opt': Permission denied

     

    //使用sudo提权,验证用户权限是否可用,需要输入普通用户的密码

    [oldboy@oldboy ~]$ sudo rm -rf /opt

     

    1. sudo免密码配置选项

    //普通用户执行sudo不需要输入密码配置

    [root@oldboy ~]# visudo

     

    //修改前

    oldboy ALL=(ALL) /bin/rm, /bin/cp

    //修改后

    oldboy ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp

     

    //默认普通用户无权删除

    [oldboy@oldboy ~]$ rm -f /root/002

    rm: cannot remove `/root/002': Permission denied

    //验证sudo免密码执行权限

    [oldboy@oldboy ~]$ sudo rm -f /root/002

    1. sudo配置组

    //如果每增加一个用户需配置一行sudo,这样设置太麻烦了。所以可以进行如下设置:

    //新增组

    %oldboy ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp

    //group1这个组的所有用户都拥有sudo的权力。接下来只需要将用户加入该组即可。

     

    //创建用户加入该组

    [root@oldboy ~]# groupadd oldboy

    [root@oldboy ~]# useradd oldboy -g oldboy

    [root@oldboy ~]# useradd oldgirl -g oldboy

     

    //root用户建立目录

    [root@oldboy ~]# mkdir /root/oldboy_sudo

     

    //切换用户并删除测试

    [root@oldboy ~]# su - oldboy

    [oldboy1@oldboy ~]$ rm -rf /root/oldboy_sudo

    rm: cannot remove `/root/bgx_sudo': Permission denied

     

    //使用sudo

    [oldboy1@oldboy ~]$ sudo rm -rf /root/oldboy_sudo

    当然配置文件/etc/sudoers包含了诸多配置项,可以使用命令 man sudoers 来获得帮助信息。

     

    下面介绍一个很实用的案例,我们的需求是把Linux服务器设置成这个样子:只允许使用普通账户登陆Linux服务器,但可以让普通用户不输入密码就能sudo su -切换到root账户。

     

    //禁止root用户登陆

    [root@oldboy ~]# sed -i 's@#PermitRootLogin yes@PermitRootLogin no@g' /etc/ssh/sshd_config

    [root@oldboy ~]# systemctl restart sshd

     

    1. 配置sudo权限

    [root@oldboy ~]# visudo

    User_Alias USER_SU = oldboy1,oldboy

    Cmnd_Alias SU = /bin/su

    USER_SU ALL=(ALL) NOPASSWD:SU

     

    //使用root登陆服务器失败

    ssh root@10.0.0.200

    root@10.0.0.200's password:

    Permission denied, please try again.

     

    //使用普通用户登陆服务器

    ~ ssh oldboy@10.0.0.200

    oldboy@10.0.0.200's password:

    Last login: Mon Oct 30 09:28:21 2017 from 10.0.0.1

     

    //使用sudo提权至root用户

    [oldboy@oldboy ~]$ sudo su -

    [root@oldboy ~]#

     

     

    1. sudo日志审计

    通过sudo和syslog配合实现对所有用户进行权限的日志审计并将记录日志集中管理,实施后让所有运维和开发执行的sudo命令都有记录可查,杜绝了内部人员的操作安全隐患。

    sudo日志审计,专门针对sudo命令的系统用户记录其执行的命令相关信息,所谓sudo命令日志审计,并不记录普通用户的操作,而是记录执行sudo命令的用户操作。

     

    1. 安装sudo、rsysylog

    [root@oldboy ~]# yum install -y sudo rsyslog

     

    //检测是否安装成功

    [root@oldboy ~]# rpm -qa rsyslog sudo

    rsyslog-8.24.0-16.el7.x86_64

    sudo-1.8.19p2-13.el7.x86_64

    配置/etc/sudoers记录日志路径

    [root@oldboy ~]# echo "Defaults logfile=/var/log/sudo.log" >>/etc/sudoers

     

    //查看追加的日志配置

    [root@oldboy ~]# tail -1 /etc/sudoers

    Defaults logfile=/var/log/sudo.log

     

    //检查语法

    [root@oldboy ~]# visudo -c

    /etc/sudoers: parsed OK

     

     

    配置rsyslog日志服务

    [root@oldboy ~]# echo "local2.debug /var/log/sudo.log" >>/etc/rsyslog.conf

     

    //重启rsyslog服务

    [root@oldboy ~]# systemctl restart rsyslog

    普通用户使用sudo权限验证日志记录

    //使用普通执行sudo命令

    [oldboy@oldboy ~]$ rm -rf /root/test/

    rm: 无法删除"/root/test": 权限不够

    [oldboy@oldboy ~]$ sudo rm -rf /root/test/

     

    //检查用户在什么时间执行过什么操作

    [oldboy@oldboy ~]$ tail /var/log/sudo.log

    Nov 7 07:56:58 : oldboy : TTY=pts/1 ; PWD=/home/oldboy ; USER=root ;

    COMMAND=/bin/rm -rf /root/test/

    17874

     

    1. 日志审计

    [root@oldboy ~]$ sudo tail -f /var/log/secure

    系统安装后就有sudo命令,如果没有sudo命令,可通过如下方式安装

    [root@oldboy ~]# yum install -y sudo

    使用visudo命令编辑/etc/sudoers配置文件

    //执行visudo,等于使用vi编辑sudoers配置文件

    [root@oldboy ~]# visudo

    默认

    root ALL=(ALL) ALL

     

    //新增

    oldboy ALL=(ALL) /bin/rm, /bin/cp

    //root默认就拥有sudo最高权限,我们在该行下新增oldboy用户,让此用户拥有sudo权限

    //使用visudo -c检查配置文件

    [root@oldboy ~]# visudo -c

    /etc/sudoers: parsed OK

     

  • 相关阅读:
    Java 线程池
    eclipse 创建Java web项目 Cannot change version of project facet Dynamic web module to xxx
    Maven maven-compiler-plugin 编译问题
    设计模式 单例模式
    Spring 配置文件注入
    Java HashMap、HashTable与ConCurrentHashMap
    Java Web ActiveMQ与WebService的异同
    Java Web 拦截器和过滤器的区别
    html2canvas 使用指南
    js动态改变setInterval的时间间隔
  • 原文地址:https://www.cnblogs.com/majinhai/p/9534076.html
Copyright © 2011-2022 走看看