zoukankan      html  css  js  c++  java
  • linux系统用户管理(二)

    5.组命令管理**
    组账户信息保存在/etc/group和/etc/gshadow两个文件中

    /etc/group 组账户信息

    [root@localhost ~]# head -2 /etc/group
    root:x:0:
    bin:x:1:

    // /etc/group由“:”分割成4个字段,每个字段具体含义如下
    字段名称             注释说明
    1.组账户名称      //组的名称
    2.密码占位符      //组的密码(存在/etc/gshadow)
    3.组GID              //组GID的信息
    4.组成员             //这里仅显示附加成员,基本成员不显示

    /etc/gshadow 组密码信息
    [root@localhost ~]# head -2 /etc/gshadow
    root:::
    bin:::

    // /etc/gshadow由“:”分割成4个字段,每个字段具体含义如下
    字段名称             注释说明
    1.组账户名称       //组的名称
    2.密码占位符       //组密码
    3.组GID               //组管理员
    4.组成员              //这里仅显示附加成员,基本成员不显示

    使用groupadd命令新增组
    语法:groupadd [-g GID] groupname
    //不指定gid默认从1000开始
    [root@localhost ~]# groupadd gtest
    [root@localhost ~]# tail -1 /etc/group
    gtest:x:5004:

    //'-g'指定gid
    [root@localhost ~]# groupadd -g 5555 gtest2
    [root@localhost ~]# tail -1 /etc/group
    gtest2:x:5555:

    //'-r'创建系统组,gid从201-999
    [root@localhost ~]# groupadd -r test_test
    [root@localhost ~]# tail -1 /etc/group
    test_test:x:995:

    使用groupmod命令修改组信息
    //-g 修改组gid
    [root@localhost ~]# groupmod -g 5600 gtest2
    [root@localhost ~]# tail -5 /etc/group
    gtest2:x:5600:

    //-n 修改组名称
    [root@localhost ~]# groupmod -n gtestx gtest2
    [root@localhost ~]# tail -1 /etc/group
    gtestx:x:5600:


    使用groupdel删除组
    //该命令没有特殊选项,如果一个用户有基本组和附加组,只能删除附加组,不能删除基本组

    //删除组
    [root@localhost ~]# groupdel gtestx

    //删除用户附加组
    [root@localhost ~]# tail /etc/group
    dba:x:1004:oldgirl
    students:x:1005:oldgirl
    [root@localhost ~]# groupdel students

    //无法删除用户基本组
    [root@localhost ~]# tail /etc/group
    oldboy1:x:1001:
    [root@localhost ~]# groupdel oldboy1
    groupdel: cannot remove the primary group of user 'oldboy1'
    //只有删除用户或者用户变更基本后,方可删除该组


    使用gpasswd设置组密码
    [root@localhost ~]# gpasswd gtest
    Changing the password for group gtest
    New Password:
    Re-enter new password:

    使用newgrp命令切换基本组身份
    //检查账户信息
    [root@localhost ~]# id dba
    uid=998(dba) gid=1004(dba) groups=1004(dba)

    //切换普通用户
    [root@localhost ~]# su - oldgirl

    //创建新文件,并验证权限
    [root@localhost ~]# touch group_test
    [root@localhost ~]# ll
    total 4
    -rw-------. 1 root root 1577 Oct 18 18:46 anaconda-ks.cfg
    -rw-r--r-- 1 root root 0 Oct 29 21:03 group_test

    //切换组信息
    [xiao@localhost ~]$ newgrp gtest
    Password:
    [xiao@localhost ~]$ id
    uid=1002(xiao) gid=5004(gtest) groups=5004(gtest),1002(xiao)

    //建立文件,检查权限
    [xiao@localhost ~]$ touch group_new
    [xiao@localhost ~]$ ll
    total 0
    -rw-rw-r-- 1 xiao xiao 0 Oct 29 21:15 group_new

    6.身份切换*****
    Linux系统中,有时候普通用户有些事情是没办法操作,除非是root用户才能做到,这时就需要临时切换到root身份来做事了,
    那么在学习如何切换用户之前,我们先来了解下用户工作环境

    shell分类
    交互式shell 等待用户输入执行提交的命令(终端操作),exit退出
    非交互式shell 执行shell脚本,脚本执行结束shell自动退出
    1.把交互命令换成同等功能非交互命令
    2.提前做好应答文件

    登陆shell 需要输入用户名和密码才能进入shell,su - oldboy
    非登陆shell 不需要输入用户和密码就能进入,比如执行,sh,bash

    //查看登陆shell
    yum install -y psmisc
    [root@localhost ~]# pstree


    //临时设置,永久设置需要写配置文件
    [root@localhost ~]# export PS1='[h@u ]#'
    [localhost@root 21:36:33]#
    bash配置文件
    Bash的配置文件保存用户的工作环境

    个人配置文件:~/.bash_profile ~/.bashrc
    全局配置文件:/etc/profile /etc/profile.d/*.sh /etc/bashrc

    profile类文件,设定环境变量,登陆前运行的脚本和命令
    bashrc类文件,设定本地变量,定义命令别名
    字符串环境变量文件:/etc/locale.conf(centOS7)

    全局配置和个人配置设置冲突,以个人设置为准
    shell配置文件顺序
    //登录式shell配置文件执行顺序
    /etc/profile-->/etc/profile.d/*.sh-->.bash_profile-->~/.bashrc-->/etc/bashrc

    //非登陆式shell配置文件执行顺序
    ~/.bashrc-->/etc/bashrc-->/etc/profile.d/*d.sh

    //如何验证登录shell和非登陆shell,配置文件执行顺序,只需要在每个配置文件加入一段'echo'即可
    注意:添加的echo字段必须放置在第二行
    //最后通过登录shell和非登陆shell方式登录linux,即可验证执行顺序。
    如果全局配置和个人配置出现冲突,那么如何验证呢

    编辑全局变量 /etc/profile 新增一行:PS1='[h@u ]#'
    [localhost@root 22:10:43]# //当前shell终端环境

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

    [localhost@root 22:19:37]#su xiao
    [xiao@localhost root]$

    [localhost@root 22:20:28]#su - xiao
    [xiao@localhost.localdomain]#

    创建用户,并登录系统
    [localhost@root 22:23:10]#useradd xiao1
    [localhost@root 22:23:23]#echo '123'|passwd --stdin xiao1
    Changing password for user xiao1.
    passwd: all authentication tokens updated successfully.

    //使用xiao1用户登录linux
    ssh xiao1@10.0.1.31
    [localhost@xiao1 20:27:43]#

    //使用使用whoami查看当前登录用户
    [xiao1@localhost ~]$ whoami
    xiao1

    切换用户,使用命令su [-] username
    su命令后面-代表进入登陆式shell 否则代表进入非登陆式shell 只不过他们所执行的环境配置文件不一样。
    普通用户su- 不加username时可以切换root用户,但需要输入密码。
    超级管理员root用户使用su -切换普通用户不需要密码。
    [xiao1@localhost ~]$ pwd
    /home/xiao1

    //不加'-'切换到root账户下时,当前目录没有变化
    [xiao1@localhost ~]$ su
    Password:
    [root@localhost xiao1]# pwd
    /home/xiao1

    以某个用户的身份执行某个服务,使用命令su -c username
    [root@localhost ~]# su - xiao -c 'ifconfig'
    [root@localhost ~]# su - xiao -c 'ls ~'
    hello profile
    hello .bash_profile
    group_new

    7.sudo提升权限*****

    su切换用户身份,如果每个普通用户都能切换到root身份,如果某个用户不小心泄露root的密码,那么系统会变得非常不安全
    为了改进这个问题,从而产生了sudo这个命令。使用sudo执行一个root才能执行的命令是可以办到的,但是需要输入密码,这个密码
    并不是root的密码而是用户自身的密码
    默认只有root用户才能使用sudo命令,普通用户想要使用sudo,是需要root预先设定的,即,使用visudo命令去编辑相关的配置
    文件/etc/sudoers

    //CentOS7提权方法,授权用户具有管理员所有的权限
    [root@localhost ~]# usermod -G wheel xiao

    //日志审计
    [root@localhost tmp]# sudo tail -f /var/log/secure
    系统安装后就有sudo命令,如果没有sudo命令,可通过如下方式安装
    [root@localhost tmp]# yum install -y sudo
    使用visudo命令编辑/etc/sudoers配置文件
    //执行visudo,等于使用vi编辑sudoers配置文件
    [root@localhost tmp]# visudo

    //默认
    root ALL=(ALL) ALL

    //新增
    oldboy ALL=(ALL) /bin/rm,/bin/cp
    //root默认就拥有sudo最高权限,我们在改行下新增oldboy用户,让此用户拥有sudo权限

    案例需求:
    要求xiao用户能够添加删除修改所有用户属性(包括密码),但不包括root
    visudo
    xiao ALL=(ALL) /usr/sbin/user*,/usr/bin/passwd,!/usr/sbin/usermod * root,!/usr/bin/passwd * root,
    !/usr/bin/passwd root
    别名:
    100 User_Alias USER=oldboy,xiao,%dba
    101 Cmnd_Alias SU = /usr/sbin/user*,/usr/bin/passwd,!/usr/sbin/usermod * root,!/usr/bin/passwd * root,
    !/usr/bin/passwd root
    103 USER ALL=(ALL) SU


    //使用visudo -c检查配置文件
    [root@localhost tmp]# visudo -c
    /etc/sudoers: parsed OK

    sudo配置选项详解
    //下面解释如上每行代表含义
    用户名 主机名 角色名 命令名
    root ALL= (ALL) ALL
    oldboy ALL 使用最高角色执行 /bin/rm,/bin/cp
    oldboy ALL=(ALL) NOPASSWD:/bin/rm,/bin/cp

    普通用户验证sudo权限
    //切换普通用户
    [root@localhost ~]# su - xiao

    //检查普通用户sudo权限明细
    [xiao@localhost ~]$ sudo -l
    ....省略部分
    User xiao may run the following commands on localhost:
    (ALL) /usr/sbin/user*, /usr/bin/passwd, !/usr/sbin/usermod * root, !/usr/bin/passwd * root,
    !/usr/bin/passwd root

    //普通用户删除opt目录,删除失败
    [xiao@localhost ~]$ rm -rf /opt/
    rm: cannot remove ‘/opt/’: Permission denied

    //使用sudo提权,验证用户权限是否可用,需要输入普通用户的密码
    [xiao@localhost ~]$ sudo rm -rf /var/opt

    sudo免密码配置选项
    //普通用户执行sudo不需要输入密码配置
    //修改前
    oldboy ALL=(ALL) /bin/rm,/bin/cp
    //修改后
    oldboy ALL=(ALL) NOPASSWD:/bin/rm,/bin/cp

    //默认普通用户无法删除
    [xiao@localhost ~]$ rm -f /root/002
    rm: cannot remove ‘/root/002’: Permission denied

    //验证sudo免密码执行权限
    [xiao@localhost ~]$ sudo rm -f /root/002
    sudo配置组
    //如果每增加一个用户需要配置一行sudo,这样设置太麻烦了,所以可以进行如下设置
    //新增组
    %oldboy ALL=(ALL) bin/rm,bin/cp
    /group1这个组的所有用户都拥有sudo的权利,接下来只需要将用户加入该组即可

    //创建用户加入该组
    [root@localhost ~]# groupadd oldboy
    [root@localhost ~]# useradd oldboy -g oldboy
    [root@localhost ~]# useradd oldgirl -g oldboy

    //root用户建立目录
    [root@localhost ~]# mkdir /root/oldboy_sudo

    //切换用户并删除测试
    [root@localhost ~]# su - oldboy -c 'rm -rf /root/oldboy_sudo'
    rm: cannot remove ‘/root/oldboy_sudo’: Permission denied

    //使用sudo
    [oldboy@localhost ~]$ sudo rm -rf /root/oldboy_sudo
    当然配置文件/etc/sudoers包含了诸多配置项,可以使用命令man sudoers 来获得帮助信息

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

    //禁止root用户登录
    [root@localhost ~]# sed -i 's@#PermitRootLogin yes@PermitRootLogin no@g' /etc/ssh/sshd_config
    [root@localhost ~]# systemctl restart sshd

    //配置sudo权限
    [root@localhost ~]# visudo
    User_Alias USER=oldboy,xiao,%dba
    Cmnd_Alias SU = /usr/sbin/user*
    USER ALL=(ALL) SU

    sudo日志审计
    通过sudo和syslog配合实现对所有用户进行权限的日志审计并记录日志集中管理,实施后让所有运维和开发执行的sudo命令都有记录可查,
    杜绝了内部人员的操作安全隐患
    sudo日志审计,专门针对sudo命令的系统用户记录其执行命令的相关信息,所谓sudo命令日志审计,并不记录普通用户的操作,而是记录执行
    sudo命令的用户操作。

    /var/log/message 公共日志
    时间 地点(主机名) 人物(进程) 信息
    /var/log/secure 安全日志

    安装sudo、rsyslog
    yum install -y sudo rsyslog

  • 相关阅读:
    安装高版本的docker
    Apache JMeter汉化手册
    安装python包
    Jmeter Cluster
    doc下设置永久环境变量的好方法
    jmeter非常好的博客收藏
    mysql-学习链接
    python 脚本
    常见python快捷键
    2015年心情随笔--周围太烦躁,我想静静
  • 原文地址:https://www.cnblogs.com/xmtxh/p/11790783.html
Copyright © 2011-2022 走看看