• Linux 用户管理和提权


    Linux ⽀持多个⼈使⽤同⼀个⽤户登录系统, Windows 在修改组策略的情况下,也可以多个⼈使⽤同⼀个⽤户登录
    远程连接Linux的⽅式:SSH协议
    远程连接Windows的⽅式:RDP协议
    安卓⼿机(Linux系统):root 刷机,使⽤root⽤户登录系统
    用户所处的组,跟目录或文件的权限息息相关
    root用户可以进入/home 目录,普通用户不可以进入/root目录
    默认清况下,创建一个用户,就会在/home 目录下创建一个以用户名命名的家目录(系统登陆后的位置,700)
    一个用户只能有一个uid (用户的身份证号),gid 为了减少用户的权限
    Linux提供了集成的系统管理工具userconf,它可以用来对用户账号进行统一管理
    每个用户的用户名、UID、宿主目录都不可以相同,用户组的新GID可以与系统已有用户组的GID相同

    # sh /tmp/a.sh 		执行文件
    # ssh 用户名@'ip'  切换用户
    
    id jj
    -u:查看⽤户的uid  身份证号
    -g:查看⽤户的gid  用户组的id  用户组 指定用户所属的用户组
    -G:查看⽤户的属组   用户组,用户组 指定用户所属的附加组
    -n:查看 只显示名字(不显示数字)(与别的选项一起用)
    
    #拥有root权限的方法:
    1. a+rwx
    2. vim /etc/passwd ,把用户的uid改成0,这时该用户的uid和gid都是0
    3. [root@oldboy ~]# useradd -o -u 0 -g 0 test
    4. sudo
    5. su - root -c
    
    #Usage:   useradd [选项] [⽤户名]
    删
    改
    查
    默认情况下,在创建⽤户的时候,会创建⼀个和 ⽤户 同名的组 ,并且把该⽤户加⼊该组
    用户名必须要指定,而且不能重复
    
    [root@localhost ~]# useradd zls
    -u:(uid)指定uid,uid存在的不能指定,1000+,用户名不支持中文(数字)
    指定uid,会附带指定gid,指定gid,uid看上一个系统用户的uid再递增,
    -g:(gid)指定gid(必须要是存在的),也可以指定组名,#(组名,或gid)指定了就不会创建新的了
    -G:(Group)指定附加组(必须指定存在的),如果加⼊多个附加组则⽤ 逗号隔开(覆盖)
    -M:不创建家⽬录,不能登陆,创建系统用户的时候才会用,家目录是否存在,看home -M -d = -m
    -s:(shell)指定用户登录的shell,默认/bin/shell
    -c:(comment)添加注释
    -d:(directory)指定⽤户的家⽬录,如果此目录不存在,系统直接创建,(请随意指定位置)
    -r:帮我们创建⼀个uid范围是201-999的系统⽤户(从999开始倒序)(运行服务的),不创建家⽬录,但是可以登陆,(要创建,迁徙家目录)
    [root@oldboy ~]# useradd -r xt
    [root@oldboy skel]# useradd song{1..10}  # 不能这样创建用户
    
    #删
    userdel
    Usage:userdel [选项] [⽤户名]	删除uid 注释,家目录,登陆shell
    默认情况下,在删除⽤户的同时会把同名的⽤户组也删除,但是如果组内有其他⽤户,则不会删除组,#groupdel 组名   删组,无论这个组有没有其他用户
    只删除⽤户
    -r:删除⽤户的同时,删除⽤户的 家⽬录 ,和⽤户的其他 邮件⽬录... (删⼲净)(一切)
    删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。
    
    
    #改
    修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
    修改已有用户的信息使用usermod命令
    
    usermod
    Usage:usermod [选项] [⽤户名]
    -u:修改uid,指定不存在的 (数字)
    -g:修改gid(指定存在的gid)  –g develope  用户组改为developer  修改了gid 主组同时改变,指定存在的,在同一个组(共用组)#(组名,或gid)
    
    -G:修改附加组  不能指定不存在的组
    -a:配合-G,在修改附加组的时候,起到追加效果(append)
    [root@oldboy ~]# usermod syy1 -aG bob  (只能用-aG,追加多个附加组用,分割,,不能省略)
    [root@oldboy ~]# id syy1
    uid=1000(syy1) gid=1000(syy1) groups=1000(syy1),0(root),10938(bob)
    
    -m:修改(迁移)家⽬录,必须配合    usermod -md   搬到哪  (要修改的用户必须关机)
    -d:指定修改后的家⽬录
    
    -s:修改登录的shell (指定/,不能登陆)
    -c:修改注释
    -l:修改登录的⽤户名		usermod -l  要改成什么名字,修改对象要关机,修改登陆名,连接
    [root@oldboy ~]# usermod kkk -l  kk 
    
    -L:锁定⽤户(封号)root用户还可以登陆,直接输入用户名密码,登陆不了
    -U:解锁⽤户(解封)
    
    
    
    /etc/shadow:存放⽤户密码  ()
    [nn@oldboy ~]$ ll /etc/shadow
    ----------. 1 root root 3508 Apr  3 17:31 /etc/shadow
    
    9列,以冒号为分隔符
    zls:!!:18351:0:99999:7:2:183519998:
    第⼀列:⽤户名
    第⼆列:⽤户密码(!! 和 * 都是没有密码)
    第三列:上⼀次该⽤户修改密码的时间(从1970年开始计算到上⼀次修改的天数)
    第四列:密码最短使⽤的天数
    第五列:密码最⻓使⽤天数
    第六列:密码快过期,7天之前,会提示修改密码
    第七列:密码过期后两天提示强制修改密码。否则⽆法登陆
    第⼋列:账户的失效时间,从1970年开始计算
    第九列:保留
    # 如何查看组信息?这个组是否被创建
    [root@localhost ~]# cat /etc/group
    
    # 创建⼀个⽤户,会影响⼏个⽂件?
    4个⽂件:
    1./etc/passwd :存放⽤户信息
    2./etc/shadow :存放密码信息
    3./etc/group :存放⽤户组信息
    4./etc/gshadow :存放组密码信息
    当使⽤ `useradd zls` 创建⽤户时,会影响以上4个⽂件
    
    /etc/passwd
    /etc/passwd:存放⽤户信息
    7列,以冒号为分隔符
    root:x:0:0:root:/root:/bin/bash
    第⼀列:⽤户名
    第⼆列:密码占位符
    第三列:uid
    第四列:gid
    第五列:注释信息
    第六列:家⽬录
    第七列:登录的shell
    
    /etc/login.defs		用户默认信息的配置文件
    
    [root@localhost ~]# cat /etc/login.defs
    [root@localhost ~]# grep -i '^[a-z]' /etc/login.defs
    [root@localhost ~]# cat /etc/login.defs | grep -v '#'
    
    # 指定创建⽤户后的 邮件⽂件 存放位置
    MAIL_DIR /var/spool/mail
    # 密码,最⻓天数
    PASS_MAX_DAYS 99999
    # 密码最⼩天数
    PASS_MIN_DAYS 0
    # 密码最⼩⻓度(普通用户自己设置密码)
    PASS_MIN_LEN 5
    # 密码过期前7天 ,提示,密码要过期了,给⽼⼦改
    PASS_WARN_AGE 7
    # 普通⽤户的uid 最⼩值1000(顺延+)
    UID_MIN 1000
    # 普通⽤户的最⼤uid 60000
    UID_MAX 60000
    # -r创建的系统⽤户,201 - 999
    SYS_UID_MIN 201
    SYS_UID_MAX 999
    # 普通⽤户组的最⼩gid
    GID_MIN 1000
    # 普通⽤户组的最⼤gid
    GID_MAX 60000
    # -r创建的系统⽤户组,201 - 999
    SYS_GID_MIN 201
    SYS_GID_MAX 999
    # 默认创建家⽬录
    CREATE_HOME yes (no,创建用户不创建家目录,不能输入密码登陆)
    # 家⽬录的umask	家目录用的mask(创建目录用的umask)
    UMASK 077
    
     0777 0777
    - 0022 0077 (umask)
    ------- ------
     0755 0700
     [root@oldboy skel]# umask  系统的umask 是0022
    0022
    # 在删除⽤户的时候,是否捆绑,把⽤户组也删除,指定组的话不会捆绑删除
    USERGROUPS_ENAB yes
    # ⽤户密码加密算法
    ENCRYPT_METHOD SHA512()
    
    /etc/default/useradd
    
    [root@localhost ~]# ll /etc/default/useradd
    -rw-r--r-- 1 root root 119 11⽉ 5 2016 /etc/default/useradd
    [root@localhost ~]# cat /etc/default/useradd
    # 依赖于/etc/login.defs的USERGRUUPS_ENAB参数,如果为no,则在此处控制
    GROUP=100
    ⽤户的密码管理
    # 默认普通⽤户的家⽬录
    HOME=/home
    # 是否启⽤账号过期停权,-1表示不启⽤
    INACTIVE=-1
    # 账号终⽌⽇期(没有设置)
    EXPIRE=
    # 创建⽤户的默认shell
    SHELL=/bin/bash
    # 当⽤户,误删除了⾃⼰家⽬录下的环境变量。
    SKEL=/etc/skel
    -bash-4.2$ cp /etc/skel/.bash* ~/
    # 创建⽤户的同时,是否创建邮件⽂件
    CREATE_MAIL_SPOOL=yes
    
     passwd
    
    # 创建密码的规范
    1.密码的⻓度最好⼤于10位字符
    2.密码中包含 ⼤⼩写字⺟ 数字 以及 特殊字符 ! @ # $
    3.不规则性(不要出现⾃⼰名字、公司名字、⾃⼰电话、等等简单的密码) 没有密码,普通用户是不能登陆的
    
    # 直接输⼊passwd,更改当前登录⽤户的密码
    [root@localhost ~]# passwd
    
    # passwd + ⽤户名,给指定⽤户设置密码,root才有权限
    [root@localhost ~]# passwd zls000
    
    # 使⽤  ⾮交互  的⽅式设置密码给指定⽤户,root用户才可以给指定用户密码
    
    
    # 批量创建用户
    # 语法
    [root@localhost ~]# echo '123' | passwd --stdin zls000	给新用户密码
    [root@oldboy ~]# echo 123 | passwd --stdin root		给有密码的用户一个新密码
    Changing password for user root.
    passwd: all authentication tokens updated successfully.
    passwd:已成功更新所有身份验证令牌
    
    [root@oldboy ~]# echo $RANDOM  产生随机数
    [root@oldboy ~]# echo "$RANDOM" | md5sum	使用mad5sum加密随机数,32位随机数
    525f3a6d83469f501caf0b65247b07ef  -
    [root@oldboy ~]# echo "$RANDOM" | md5sum | cut -c 1-6  使用cut 选择密码位数
    4994e6
    [root@oldboy ~]# echo "$RANDOM" | md5sum | cut -c 1-6 | tee /home/mima.txt
    59ef87			用命令tee 保存密码,文件里的密码是覆盖的,-a表示追加,只能用多次tee
    [root@oldboy ~]# echo "$RANDOM" | md5sum | cut -c 1-6 | tee /home/mima.txt | passwd --stdin syy1   
    用一条命令,给用户一个随机的,加密的,指定位数的,保存下来的密码,
    
    root@oldboy ~]# md5sum /root/passwd		使用md5sum 加密文件,校验,不能加密目录,只有文件内容不变,加密码就不会变,改文件名没事
    892a67e7d4d4c5685cb2f5fe9cf2537a  /root/passwd
    
    # md5sum,加密。并且做校验
    
    [root@oldboy ~]# echo oldboy{1..100}	以行的形式显示,数字或者字符串
    oldboy1 oldboy2 oldboy3 oldboy4 oldboy5 oldboy6
    [root@oldboy ~]# echo {1..100} | xargs -n 1  (-n1) ,n不能省略,默认以空格为分隔符
    1
    2
    3
    4
    5
    6
    [root@oldboy ~]# echo {1..10} | xargs -n 2
    1 2
    3 4
    5 6
    [root@oldboy ~]# seq 100	显示一列数字
    1
    2
    3
    4
    5
    6
    [root@oldboy ~]# seq -w 100   -w 补全位数,-w不能放后面
    001
    002
    003
    004
    005
    006
    [root@oldboy ~]# seq -w 100 | awk '{print "oldboy"$1}'  用双引号拼凑,用','分割,oldboy后面接空格可以增加空格数,在这不要加空格
    oldboy001
    oldboy002
    oldboy003
    oldboy004
    oldboy005
    oldboy006
    [root@oldboy ~]# seq -w 100 | awk '{print "useradd ","oldboy"$1}'
    用多个双引号拼凑出多列内容,必须要用双引号
    useradd  oldboy001
    useradd  oldboy002
    useradd  oldboy003
    useradd  oldboy004
    useradd  oldboy005
    useradd  oldboy006
    [root@oldboy ~]# seq -w 100 | awk '{print "useradd ","oldboy"$1, " &&","echo $RANDOM | md5sum | cut -c 1-10 | tee -a /home/a.txt | passwd --stdin oldboy"$1}' | bash
    useradd  oldboy001  && echo $RANDOM | md5sum | cut -c 1-10 | tee -a /home/a.txt | passwd --stdin oldboy001
    seq为了获取变量," "为了拼凑(可以合并)(awk里双引号里面认为是字符串),bash 可以多行执行,
    
    [root@oldboy ~]# seq -w 100 | awk '{print "userdel -r","oldboy"$1}' | bash 批量删除
    
    sed 的后向引用也可以拼命令,直接修改命令行就可以删除批量用户
    [root@oldboy home]# seq -w 10 | sed -nr 's#(.*)# useradd oldboy1 && echo $RANDOM  | md5sum  | cut -c 1-20  | tee -a /tmp/a.sh  | passwd --stdin oldboy1#p' | bash
    小心转义符,&可以调用变量,| ,(.*) 1 ,可以使用多次,两边的空格可以随便用,&转义&,不调用变量,两个oldboy1,小心贪婪匹配
    [root@oldboy home]# seq -w 10 | sed -nr 's#(.*)# userdel -r  oldboy1 #p' | bash   批量删除
    
    
    [root@oldboy ~]# seq -w 10|sed -nr 's#(.*)#useradd old1 && echo $RANDOM|md5sum|cut -c 1-10|tee -a c.txt|passwd --stdin old1#p'|bash
    
    脚本
    for n in `seq -w 100`;do
       useradd syy$n
       echo $RANDOWM | tee -a /tmp/mima.txt |passwd --stdin syy$n
    done
    
    sh a.sh   (第二次执行没有意义)
    
    # seq -w 100 | awk '{print "useradd ","oldboy"$1, " &&","echo $RANDOM | md5sum | cut -c 1-10 | tee -a /home/a.txt | passwd --stdin oldboy"$1}' | bash
    
    大神   多条命令用;分割(# oldn:$a>>a.txt)
    [root@localhost ~]# for n in `seq -w 100`;do useradd lls$n;pass=`echo $RANDOM|md5sum|cut -c 1-10`;echo $pass |passwd --stdin lls$n;echo lls${n}:$pass >> /tmp/lls.pass;done
    
    seq -w 100|sed -nr 's#(.*)#useradd wls1 && pass=`echo $RANDOM|md5sum|cut -c 1-10` && echo $pass |passwd --stdin wls1 && echo wls1:$pass >> /tmp/wls.pass#gp'|bash
    
    #!/bin/bash
    
     for n in `seq -w 100`;do
        useradd qls$n
         pass=`echo $RANDOM|md5sum|cut -c 1-10`
         echo $pass |passwd --stdin qls$n
         echo qls${n}:$pass >> /tmp/qls.pass
     done
     
       #!/bin/bash
      
       read -p "请输入需要创建的用户名 :" username     username=输入内容(# 交互,变量)
      
       read -p "请输入需要创建用户的数量:" usercount
      
       for n in `seq -w $usercount`;do   (n 是自己定义的变量)
           useradd {$username}{$n}
           pass=`echo $RANDOM|md5sum|cut -c 1-10`
          echo $pass |passwd --stdin {$username}{$n}
          echo {$username}{$n}:$pass >> /tmp/$username.pass
      done
     
     # 脚本里的bash 和命令行bash 可以认为是不同的终端 /dev/pts/n,PATH和变量自定义都会变化
     
    # 密码管理命令
    yum install -y expect
    mkpasswd 默认生成 九位 随机数
    
    //2.mkpasswd密码⽣成⼯具, -l设定密码⻓度,-d数字,-c⼩写字⺟,-C⼤写字⺟,-s特殊字符
    [root@zls ~]# yum install -y expect //需要安装扩展包
    [root@zls ~]# mkpasswd -l 10 -d 2 -c 2 -C 2 -s 4
    |K&13bR)i/
    
    作业:
    1.命令总结
    2.钱导变态
    # 使⽤ 三种⽅式,创建出来100个 ⽤户,并且设置100个随机密码,并且记录密码,都可以登录
    username:password
    cat /tmp/1.txt
    zls001:123456
    zls002:kzsuhiuh1
    
    
    Python 2.7.5 (default, Aug  7 2019, 00:51:29) 
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> print (hello world)    
      File "<stdin>", line 1
        print (hello world)
                         ^
    SyntaxError: invalid syntax
    >>> print ('hello world')   #单引号必须要加,可以用双引号,括号可以去掉,命令行不能用
    hello world
    >>> quit()
    
    # read -p "请输入需要创建的用户名 :" username
    #
    # read -p "请输入需要创建用户的数量:" usercount
    #
    # for n in `seq -w $usercount`;do
    #     useradd $username$n
    #     pass=`echo $RANDOM|md5sum|cut -c 1-10`
    #    echo $pass |passwd --stdin $username$n
    #    echo $username$n:$pass >> /tmp/$username.pass
    
    [root@oldboy ~]# read -p "请输入需要创建的用户名 :" username(定义了变量)
    请输入需要创建的用户名 :1
    [root@oldboy ~]# echo $username
    1
    
    #找出所有/tmp下的2层目录里以old开头的普通文件复制到/opt并改成以abc开头的文件
     find /tmp -maxdepth 2 -name "old*" -type f |sed -n s#old#abc#g|xargs -I {} cp -a {} /opt/
    
    [root@lb01 ~]# echo xxx004:password4 >> /tmp/a.pass
    [root@lb01 ~]# cat /tmp/a.pass 
    xxx004:password4
    useradd xxx001 && pass=`echo $RANDOM|md5sum|cut -c 1-10` && echo $pass  |passwd --stdin xxx001 && echo xxx001:$pass >> /tmp/a.pass
    
    ## 组的基本管理--  group
    [root@localhost ~]# tail -2 /etc/group
    hfls49:x:1779:1780
    hfls50:x:1780:
    
    第一列:组名
    第二列:密码占位符(组密码存在gshadow)
    第三列:gid
    第四列:组的附加成员,基本成员(基本组,主组)不显示。
    
    
    [root@localhost ~]# ll /etc/gshadow
    ---------- 1 root root 8902 4月   1 10:11 /etc/gshadow
    
    [root@localhost ~]# tail -2 /etc/gshadow
    hfls49:!::
    hfls50:!::(用户)
    
    第一列:组名
    第二列:组密码(!! 表示没有密码)
    第三列:组管理员
    第四列:组的附加成员,基本成员(相对于用户来说)不显示?
    kk:x:345343:kk 使用 -G 会显示这个组的基本成员
    
    ## 创建组命令:groupadd 
    -g   只能修改为不存在的gid,超级用户  -g 只能修改主组,没有 -G 这个选项
    -r   创建gid范围是201-999之间的系统组
    
    [root@localhost ~]# groupadd z1s	使用默认的gid,上个gid+1(基本组)
    zhiding
    [root@localhost ~]# groupadd z1s -g 6666 	指定gid,只能指定不存在的组gid
    
    # 创建gid范围是201-999之间的系统组
    [root@localhost ~]# groupadd -r z1s		上一个gid-1
    
    ## 修改组命令:groupmod  +  必须加(必须是组的gid)
    -g   只能修改为不存在的gid,超级用户  -g 只能修改主组,没有 -G 这个选项
    -n   组名不能是中文,数字串,普通用户不能修改别的组gid,组名	自己的也不能修改,
                                组名   组的gid
    [root@localhost ~]# groupmod z1s -g 6666	只能修改为不存在的gid,超级用户-g 只能修改主组,没有 -G 这个选项
    
    # 修改组名
    [root@localhost ~]# groupmod z1s -n  z1s01   组名不能是中文,数字串,普通用户不能修改别的组gid,组名	自己的也不能修改,
    
    ## 删除组命令:groupdel   (不能删除一个用户的主组)(没有 -r 这个选项)
    [root@localhost ~]# groupdel z1s01	只能接组名来删除组,无论有没有别的组成员,都会删除这个组,无法删除一个用户的主组,只能删除附加组
    
    [root@oldboy ~]# gpasswd uu(组名)		给uu组密码,普通用户进入组的时候需要输入密码
    -M
    Changing the password for group uu
    New Password: 
    Re-enter new password: 
    
    [root@localhost chen]# gpasswd -M   tsengia,obama,kylin,jerry  zonghe
    将jerry、kylin、tsengia、obama等用户添加到zonghe组内
    
    [root@oldboy ~]# usermod syy1 -G uu  修改syy1 的附加组为uu
    [root@oldboy ~]# id syy1
    uid=1000(syy1) gid=1000(syy1) groups=1000(syy1),995(uu)
    [root@oldboy ~]# usermod syy1 -G root  修改syy1 的附加组为root,-a追加
    [root@oldboy ~]# id syy1
    uid=1000(syy1) gid=1000(syy1) groups=1000(syy1),0(root)
    [root@oldboy ~]# usermod syy1 -aG bob  追加syy1的附加组bob
    [root@oldboy ~]# id syy1
    uid=1000(syy1) gid=1000(syy1) groups=1000(syy1),0(root),10938(bob)
    [root@oldboy ~]# gpasswd root (组名)  给root 组密码,普通用户如果有附加组root的话,就可以切换为root组,但是必须要输入密码
    Changing the password for group root
    New Password: 
    Re-enter new password:
    [syy1@oldboy ~]$ newgrp root  #切换为root组,前提是用户syy1有这个组,也就是root给了这个组给syy1,输入密码
    [syy1@oldboy ~]$ touch kk
    [syy1@oldboy ~]$ ll
    total 4
    -rw-rw-r--. 1 syy1 syy1 95 Mar 16 04:58 a.sh  
    -rw-r--r--. 1 syy1 root  0 Apr  1 17:04 kk   #文件属组改变,同一个组的用户才能看到
    
    普通用户创建目录或文件的属主是该用户,属组是基本组,当使用newgrp切换用户组之后,创建目录或者文件属主不变,属组变成了切换的组,并且umask从0002变成0022
    [nn@oldboy ~]$ id -un  当前用户名
    nn
    [nn@oldboy ~]$ id -gn  当前组名,小心切换
    syya
    
    ## 用户身份切换
    
    如何在普通用户的情况下,完成日常工作?
    1)`su` 切换用户,使用普通用户登录,然后使用su命令切换到root。
    优点:简单,方便
    
    缺点:需要知道root密码,不安全,切换到root没有日志审计功能
    
    -c   :
    
    2)`sudo` 提权,当需要使用root权限时,进行提权,而无需切换至root用户。
    优点:安全,方便
    缺点:复杂
    
    ### shell的分类
    
    - 交互式shell
    
    等待用户输入执行的命令(终端操作,需要不断提示) (比如 用passwd 修改密码)
    
    - 非交互式shell
    
    执行shell脚本, 脚本执行结束后shell自动退出,和一部分命令(有些命令是交互的,比如read  )(比如 脚本 ll  cd )
    
    - 登录式shell
    
    需要输入用户名和密码。才能进入shell  (`su - root` ,切换用户,位置改变,加载了该用户 的环境变量)
    
    - 非登录式shell (拒绝使用)
    
    不需要输入用户和密码就能进入,比如执行sh, bash, (`su username`  虽然切换了用户,但是当前的位置不变,没有加载该用户的环境变量)
    
    # 环境变量文件
    
    ## 个人环境变量: (只影响当前用户的环境变量)
    ~/.bash_profile (个人修改)
    ~/.bashrc
    
    
    [root@localhost ~]# ll ~/.bashrc
    -rw-r--r-- 1 root root 176 Mar 25 10:55 /root/.bashrc
    
    [root@localhost ~]# ll ~/.bash_profile
    -rw-r--r--. 1 root root 176 Dec 29  2013 /root/.bash_profile
    
    ## 全局环境变量:(影响系统所有用户的变量)
    /etc/profile
    /etc/profile.d/*.sh  (以.sh 结尾的文件都是全局环境变量)(不加载隐藏文件)
    /etc/bashrc
    
    [root@localhost ~]# ll /etc/profile
    -rw-r--r-- 1 root root 1819 Apr 11  2018 /etc/profile
    
    [root@localhost ~]# ll /etc/profile.d/*.sh
    
    [root@localhost ~]# ll /etc/bashrc
    -rw-r--r-- 1 root root 2853 Apr 11  2018 /etc/bashrc
    
    
    #登录式shell配置文件执行顺序
    /etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc
    
    #非登陆式shell配置文件执行顺序
    ~/.bashrc->/etc/bashrc->/etc/profile.d/*.sh
    
    # 切换用户:
    su - root
    -c  :不切换用户的情况下,直接执行命令
    [syyb@oldboy ~]$ su - root -c 'vim /etc/hosts'  引号必须要加,需要输入root的密码
    Password:
    [syyb@oldboy ~]$ sudo vim /etc/hosts  sudo 提权
    [syya@oldboy ~]$ sudo cd /root/  sudo提权进不去root ,只能当个门外客
    
    [root@oldboy ~]# yum install -y psmisc  安装stree 命令
    [root@oldboy ~]#pstree
    sshd─┬─sshd───bash───bash───su───bash───su───bash───su───bash───su───bash───pstree
    #CTRL+d   按5次,回到root用户(bash 窗口)
    
    ─sshd───bash───bash───bash───bash───bash───pstree
    #4次回到第一层终端,bash一次就相当于打开一个终端,这些终端是覆盖到一起的,用patree可以查看当前窗口开了几层终端
    
    用户身份提权
    ## sudo 提权
    #usermod zls -G wheel	加入到wheel (context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023)(自由重复)
    
    1.将用户加入到 sudoers 文件中(加入自由文件)---单个用户
    2.将用户加入到 sudoers 文件中设置的组里(加入自由组)---多个用户(可以sudo)
      加入自由组的用户还是不能直接进入root,但是sudo的时候不用输入密码
    
    [root@localhost ~]# visudo     vim /etc/sudoers = visudo 
    [root@localhost ~]# visudo -c  检查sudoers中有没有语法错误
    
    [root@oldboy ~]# su - www -c "pwd"      普通用户的切换用户才需要知道对象密码
    [root@oldboy ~]# su -  root -c "pwd"
    --------------------------------------------------------
    1.用户名      2.主机名   3.角色名       4.命令名
    root            ALL=    (ALL)           ALL (表示sudo 的时候所有命令都能执行)
    syya            ALL=    (ALL)          ALL  (ALL /bin/cp,ALL !/bin/su,vimvirm)(可以在这用变量)()
                               NOPASSWD: ALL (相应的普通用户sudo的时候,不再需要密码)
    命令名改为 /bin/cat,/bin/cp ,用which命令可以查看该命令的位置从而选择/bin或/sbin 意思就是相应用户sudo提权的时候只能使用这两个命令,!/bin/rm 表示相应用户sudo提权的时候不能使用这这个命令,
    
    命令名:             #在sudo文件或者自由组里的用户,sudo的时候要输入自己的密码
    1.ALL               # sudo可以执行所有的命令
    2./bin/cp,/bin/cat  #当sudo的时候,只能执行这两个命令
    3.!/bin/rm          # 除了rm命令不能执行,别的命令都能执行
    4.!/bin/rm,!/bin/vim,!/bin/vi
    5. ## 自定义别名
       Cmnd_Alias SYY=/bin/cat,/bin/cp (# 设置别名)(注意开头注释,别名大写)
       syya            ALL=    (ALL)          SYY
       [root@oldboy ~]# visudo -c   检查语法有没有错误
        Warning: /etc/sudoers:51 unused Cmnd_Alias "SYY"
       /etc/sudoers: parsed OK
    
    
     www     ALL=(ALL)       NOPASSWD: ALLNOPASSWD   (钱导题)
     
     31.创建一个普通用户test01,只给这个普通用户有查看的权限
    test01  ALL=(ALL)       /usr/bin/cat
    32.创建一个普通用户test02,只限制这个普通用户的删除权限
    test01  ALL=(ALL)       ALL,!/usr/bin/rm
    --------------------------------------------------------------
    入职新公司,老大让你在服务器上限制rm 命令,当用户输入rm 命令时候提示”rm commandis not allowed to use.” 请问实现的步骤是?
    [root@oldboy ~]# alias rm = "echo rm commandis not allowed to use"
    
    [root@oldboy ~]# useradd kk		创建用户
    [root@oldboy ~]# groupadd syyys  创建组
    [root@oldboy ~]# tail -1 /etc/group		查看组gid
    syyys:x:10942:
    [root@oldboy ~]# id kk		查看用户kk的主组和附加组
    uid=10940(kk) gid=10941(kk) groups=10941(kk)
    [root@oldboy ~]# usermod kk -G syyys  添加或修改用户kk的附加组(root执行)
    [root@oldboy ~]# id kk
    uid=10940(kk) gid=10941(kk) groups=10941(kk),10942(syyys)
    
    /etc/sudoers  sudo命令的配置文件
    ## Allows people in group wheel to run all commands
    %wheel  ALL=(ALL)       ALL
    %syyys  ALL=(ALL)       ALL   (可以自己添加无限制的组)
    ## Same thing without a password
    
    [root@oldboy ~]# passwd kk	创建了用户,给了密码,才能使用密码登陆
    Changing password for user kk.
    New password:
    
    在root用户下,以普通用户身份执行"pwd"命令。
    [root@oldboy ~]# su - www -c "pwd"      普通用户的切换用户才需要密码
  • 相关阅读:
    产品经理应该知道的那点事儿(1)
    C语言的前世今生
    “隔代教育的成功之道”新浪教育专家宋少卫做客西单图书大厦
    【9.21更新】跟踪报道TopLanguage关于《深入理解计算机系统(第2版)》一书翻译问题 的讨论
    中国要做物联网技术的强国,而非大国
    关于时钟芯片DS1302的问题
    stm32开发问题集锦
    keil 中使用c++的注意事项
    iar atof 问题
    IAR生成HEX文件
  • 原文地址:https://www.cnblogs.com/syy1757528181/p/12813357.html
Copyright © 2020-2023  润新知