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"      普通用户的切换用户才需要密码
原文地址:https://www.cnblogs.com/syy1757528181/p/12813357.html