第七章·Linux用户管理-用户的基本操作

1、用户基本概述

1.1、什么是用户

用户指的是能够正常登录Linux或windows系统

那Linux与windows系统的用户有什么区别?

本质都是登录系统的,只不过Linux支持多用户同时登录,windows默认不支持,但是修改组策略的情况下也是可以多用户登录的。

第七章·Linux用户管理-用户的基本操作

1.2、Linux用户有什么作用?

  • 系统上的每一个进程(运行的程序)都需要特定的用户运行
  • 每一个文件都有特定的用户拥有,所以访问一个文件或目录受到用户的限制
  • 进程能够以何种方式访问某一个文件或目录, 与进程所关联的用户有关。

1.3、如何查看系统中所存在的用户

  • 查看当前系统用户信息

    [root@sunedu ~]# id

    uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

    [root@sunedu ~]# w

    02:04:46 up 5:29, 1 user, load average: 0.00, 0.01, 0.05

    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

    root pts/0 10.0.0.1 20:35 6.00s 0.13s 0.01s w

  • 每一个文件都有所有者

    [root@sunedu ~]# ll

    total 4

    -rw-------. 1 root root 1592 Feb 19 12:13 anaconda-ks.cfg

    -rw-r--r--. 2 root root 0 Feb 19 20:45 soft_link

  • 每一个进程都有用户运行

    [root@sunedu ~]# ps -ef | less

    UID PID PPID C STIME TTY TIME CMD

    root 1 0 0 Feb19 ? 00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22

    root 2 0 0 Feb19 ? 00:00:00 [kthreadd]

    root 4 2 0 Feb19 ? 00:00:00 [kworker/0:0H]

    root 6 2 0 Feb19 ? 00:00:00 [ksoftirqd/0]

    root 7 2 0 Feb19 ? 00:00:00 [migration/0]

    root 8 2 0 Feb19 ? 00:00:00 [rcu_bh]

    root 9 2 0 Feb19 ? 00:00:02 [rcu_sched]

    root 10 2 0 Feb19 ? 00:00:00 [lru-add-drain]

    root 11 2 0 Feb19 ? 00:00:00 [watchdog/0]

    root 12 2 0 Feb19 ? 00:00:00 [watchdog/1]

    root 13 2 0 Feb19 ? 00:00:00 [migration/1]

    root 14 2 0 Feb19 ? 00:00:00 [ksoftirqd/1]

    root 16 2 0 Feb19 ? 00:00:00 [kworker/1:0H]

    root 18 2 0 Feb19 ? 00:00:00 [kdevtmpfs]

    root 19 2 0 Feb19 ? 00:00:00 [netns]

    root 20 2 0 Feb19 ? 00:00:00 [khungtaskd]

    root 21 2 0 Feb19 ? 00:00:00 [writeback]

    root 22 2 0 Feb19 ? 00:00:00 [kintegrityd]

    root 23 2 0 Feb19 ? 00:00:00 [bioset]

    root 24 2 0 Feb19 ? 00:00:00 [bioset]

    root 25 2 0 Feb19 ? 00:00:00 [bioset]

1.4、用户相关配置文件

用户的信息存放在/etc/passwd用户的密码都保存在/etc/shadow这两个文件是linux系统中最重要的文件之一。

如果没有这两个文件或者这两个文件出问题,会导致无法正常登录linux系统。

  • /etc/passwd 账户文件

    第七章·Linux用户管理-用户的基本操作

    [root@sunedu ~]# head -1 /etc/passwd

    root:x:0:0:root:/root:/bin/bash

    // /etc/passwd由 ':' 为分割符, 分为7个字段,每个字段的具体含义如下:

    字段名称 注释说明

    1.用户名称 //用户的账号名称

    2.密码占位符 //存放账户的口令,暂用x表示,密码保存在/etc/shadow

    3.用户的UID //用户标识号

    4.用户基本组GID //组标识号

    5.用户注释 //用户详细信息

    6.用户家目录 //root家目录是/root普通用户家目录存在/home/username(可自定义)

    7.用户登录Shell //用户登录Linux使用的shell #cat /etc/shells

  • /etc/shadow 用户密码文件

    第七章·Linux用户管理-用户的基本操作

    [root@sunedu ~]# tail -1 /etc/shadow

    postfix:!!:18677::::::

    // /etc/shadow由 ':' 为分割符, 分为9个字段,每个字段的具体含义如下:

    字段名称 注释说明

    1.用户登陆名 //用户的账号名称

    2.加密后的密码 //用户密码,这是加密过的口令(未设密码时为!!)

    3.最近一次密码更改时间 //从1970年到最近一次更改密码时间之间过了多少天

    4.密码最少使用几天 //密码最少使用几天才可以更改密码(0表示无限制)

    5.密码最长使用几天 //密码使用多少天需要修改密码(默认99999永不过期)

    6.密码到期前警告期限 //密码过期前多少天提醒用户更改密码(默认过期提前7天警告)

    7.密码到期后保持活动的天数 //在此期限内, 用户依然可以登陆系统并更改密码, 指定天数过后, 账户被锁定

    8.账户到期时间 //从1970年起,账户在这个日期前可使用,到期后失效。

    9.标志 //保留

1.4、用户分类(约定,规范)

用户UID

系统中约定的含义

0

超级管理员(拥有最高权限)

1-200

系统用户,由系统分配给系统进程使用

201-999

系统用户,用来运行服务账户,不需要登入系统(动态分配)

1000+

常规铍铜用户

注意: 在CentOS7系统之前, UID1-499用于系统用户, 而UID 500+则用于普通用

1.5、使用chage更改用户密码密码使用情况(了解内容)

-d //设置最近一次更改密码时间, 0下次登陆系统强制修改密码

-m //设置用户两次改变密码之间使用"最小天数"

-M //设置用户两次改变密码之间使用"最大天数"

-W //设置密码更改警告时间 将过期警告天数设为"警告天数"

-I //设置密码过期天数后, 密码为失效状态

-E //设置用户过期时间, 账户失效后无法登陆

-l //显示用户信息

[root@sunedu ~]# date -s '20210219'

Fri Feb 19 00:00:00 CST 2021

[root@sunedu ~]# date

Fri Feb 19 00:00:05 CST 2021

[root@sunedu ~]# useradd sun

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

Changing password for user sun.

passwd: all authentication tokens updated successfully.

[root@sunedu ~]# tail -1 /etc/shadow

sun:$6$JyibtMXr$TBfqHLzphLLxXcIi84cDn8q0V8ybKizpeyA7Bw7RPkkhWz0LOKrazGyRNdK5YnmFYhl/y.hegrSrRfWOqWgDB/:18676:0:99999:7:::

[root@sunedu ~]# chage -d "2021-02-19" sun

[root@sunedu ~]# tail -n1 /etc/shadow

sun:$6$JyibtMXr$TBfqHLzphLLxXcIi84cDn8q0V8ybKizpeyA7Bw7RPkkhWz0LOKrazGyRNdK5YnmFYhl/y.hegrSrRfWOqWgDB/:18677:0:99999:7:::

[root@sunedu ~]# chage -m 2 sun

[root@sunedu ~]# tail -n1 /etc/shadow

sun:$6$JyibtMXr$TBfqHLzphLLxXcIi84cDn8q0V8ybKizpeyA7Bw7RPkkhWz0LOKrazGyRNdK5YnmFYhl/y.hegrSrRfWOqWgDB/:18677:2:99999:7:::

[root@sunedu ~]# chage -M 2 sun

[root@sunedu ~]# tail -n1 /etc/shadow

sun:$6$JyibtMXr$TBfqHLzphLLxXcIi84cDn8q0V8ybKizpeyA7Bw7RPkkhWz0LOKrazGyRNdK5YnmFYhl/y.hegrSrRfWOqWgDB/:18677:2:2:7:::

[root@sunedu ~]# chage -W 6 sun

[root@sunedu ~]# tail -n1 /etc/shadow

sun:$6$JyibtMXr$TBfqHLzphLLxXcIi84cDn8q0V8ybKizpeyA7Bw7RPkkhWz0LOKrazGyRNdK5YnmFYhl/y.hegrSrRfWOqWgDB/:18677:2:2:6:::

[root@sunedu ~]# chage -W 7 sun

[root@sunedu ~]# tail -n1 /etc/shadow

sun:$6$JyibtMXr$TBfqHLzphLLxXcIi84cDn8q0V8ybKizpeyA7Bw7RPkkhWz0LOKrazGyRNdK5YnmFYhl/y.hegrSrRfWOqWgDB/:18677:2:2:7:::

[root@sunedu ~]# chage -I 5 sun

[root@sunedu ~]# tail -n1 /etc/shadow

sun:$6$JyibtMXr$TBfqHLzphLLxXcIi84cDn8q0V8ybKizpeyA7Bw7RPkkhWz0LOKrazGyRNdK5YnmFYhl/y.hegrSrRfWOqWgDB/:18677:2:2:7:5::

[root@sunedu ~]# chage -E "200000-08-31" sun

[root@sunedu ~]# tail -n1 /etc/shadow

sun:$6$JyibtMXr$TBfqHLzphLLxXcIi84cDn8q0V8ybKizpeyA7Bw7RPkkhWz0LOKrazGyRNdK5YnmFYhl/y.hegrSrRfWOqWgDB/:18677:2:2:7:5:72329215:

[root@sunedu ~]# chage -l sun

Last password change                    : Feb 19, 2021

Password expires                    : Feb 21, 2021

Password inactive                    : Feb 26, 2021

Account expires                        : Aug 31, 200000

Minimum number of days between password change        : 2

Maximum number of days between password change        : 2

Number of days of warning before password expires    : 7

2、用户相关命令

2.1、useradd

使用useradd和adduser这两个命令,来创建用户

  • 添加用户前需要确定

    确定用户的默认组是否有特殊要求

    确定用户是否允许登陆

    确定用户的密码策略

    确定用户的有效期

    确定用户的uid是否有特殊要求

  • 使用useradd命令新增用户, 注意: adduser命令软链接指向useradd命令

    '-u' 指定用户的UID,不能和现有ID冲突

    '-g' 指定用户用户默认基本组

    '-G' 指定用户附加组,用逗号隔开添加多个附加组

    '-d' 指定用户家目录

    '-c' 指定用户注释信息

    '-M' 不建立家目录

    '-s' 指定用户默认shell

    '-r' 创建系统账户, 没有家目录

    '-a' 附加组,都留下,配合-G,追加

     

    //创建zls用户,指定UID5001,基本组students 附加组sa,dba 注释信息:one newB user, 登陆的shell:/bin/bash

    [root@sunedu ~]# groupadd sa

    [root@sunedu ~]# groupadd dba

    [root@sunedu ~]# groupadd students

    [root@sunedu ~]# useradd -u 5001 -g students -G sa,dba -c "one newB user" -d /home/sun -s /bin/bash sun

    useradd: warning: the home directory already exists.

    Not copying any file from skel directory into it.

    Creating mailbox file: File exists

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

    sun:x:5001:1003:one newB user:/home/sun:/bin/bash

    //创建系统用户,不建立用户家目录 指定nologin使其用户无法登陆系统

    [root@sunedu ~]# useradd yu -M -s /sbin/nologin

[root@sunedu ~]# useradd -r dbc -s /sbin/nologin

2.2使用usermod命令修改用户组

'-u' 修改用户的UID

'-g' 修改用户所属的基本组GID

'-G' 修改用户附加组, 使用逗号隔开多个附加组, 覆盖原有的附加组

'-a' 追加更多的附加组, 必须和-G使用: -aG 追加附加组

'-m' 家目录迁移, 必须和-d一起使用, 移动用户的家目录到新的位置

'-d' 指定用户的家目录新位置

'-c' 修改用户的注释信息

'-s' 更改用户使用的shell

'-l' 更改用户登录名

'-L' 锁定用户

'-U' 解锁用户

[root@sunedu ~]# grep "sun" /etc/passwd

sun:x:5001:1003:one newB user:/home/sun:/bin/bash

//修改用户uid,gid, 附加组, 注释信息, 用户家目录, 登录shell, 登录名

 

//建立组,指定组gid

[root@sunedu ~]# groupadd -g 5008 network_sa

[root@sunedu ~]# groupadd -g 5009 network_sb

 

//修改用户属性

[root@sunedu ~]# usermod -u 6001 -g5008 -a -G 5009 -c "2019 new student" -md /sun -s /bin/sh -l sun_sun sun

[root@sunedu ~]# grep "sun" /etc/passwd

sun_sun:x:6001:5008:2019 new student:/sun:/bin/sh

[root@sunedu ~]# id sun_sun

uid=6001(sun_sun) gid=5008(network_sa) groups=5008(network_sa),1001(sa),1002(dba),5009(network_sb)

 

//验证家目录

[root@sunedu ~]# ll -d /sun/

drwx------. 2 1000 1000 62 Feb 19 00:00 /sun/

锁定用户

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

Changing password for user sun_sun.

passwd: all authentication tokens updated successfully.

[root@sunedu ~]# usermod -L sun_sun

[root@sunedu ~]# ssh sun_sun@10.0.0.200

The authenticity of host '10.0.0.200 (10.0.0.200)' can't be established.

ECDSA key fingerprint is SHA256:IaeFfmdsNZ2KR0fq8U5vuJEqZLDiDYaQFZlBqtCOtjY.

ECDSA key fingerprint is MD5:a5:55:2a:6c:9b:5f:19:0a:01:15:85:7e:aa:4e:de:52.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '10.0.0.200' (ECDSA) to the list of known hosts.

sun_sun@10.0.0.200's password:

Permission denied, please try again.

解锁用户

[root@sunedu ~]# usermod -U sun_sun

正常登入系统

[root@sunedu ~]# ssh sun_sun@10.0.0.200

sun_sun@10.0.0.200's password:

Last failed login: Fri Feb 19 00:23:10 CST 2021 from 10.0.0.200 on ssh:notty

There were 3 failed login attempts since the last successful login.

Could not chdir to home directory /sun: Permission denied

-sh: /sun/.profile: Permission denied

-sh-4.2$

当然还有很多命令可以查看用户的信息,以下简单列举一些,都是我们压根不用的,了解即可

  • 使用finger命令查询永辉信息以及登录信息

    [root@sunedu ~]# yum -y install finger

    [root@sunedu ~]# finger sun_sun

    Login: sun_sun             Name: 2019 new student

    Directory: /sun     Shell: /bin/sh

    Last login Fri Feb 19 00:23 (CST) on pts/1 from 10.0.0.200

    No mail.

    No Plan.

  • 使用chfn命令修改用户信息

    #修改用户信息

    [root@sunedu ~]# chfn sun_sun

    Changing finger information for sun_sun.

    Name [2019 new student]: sun

    Office []: 123

    Office Phone []: 8888

    Home Phone []: ssss

     

    Finger information changed.

    #再次查看

    [root@sunedu ~]# finger sun_sun

    Login: sun_sun             Name: sun

    Directory: /sun     Shell: /bin/sh

    Office: 123, x8888            Home Phone: ssss

    Last login Fri Feb 19 00:23 (CST) on pts/1 from 10.0.0.200

    No mail.

    No Plan

  • 使用chsh命令修改用户登录bash shell

    [root@sunedu ~]# chsh yu

    Changing shell for yu.

    New shell [/sbin/nologin]: /bin/sh

    Shell changed.

  • 使用who,whoami,w检查用户登录情况

    [root@sunedu ~]# who

    root pts/0 2021-02-19 20:35 (10.0.0.1)

    [root@sunedu ~]# whoami

    root

    [root@sunedu ~]# w

    00:29:32 up 6:11, 1 user, load average: 0.00, 0.01, 0.05

    USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

    root pts/0 10.0.0.1 20:35 ? 0.45s 0.02s w

2.3、使用userdel删除用户

语法 : userdel [-r] username //-r 同时删除家目录

[root@sunedu ~]# userdel sun_sun

3、用户的拓展知识

3.1、用户的创建流程

  • useradd创建用户时,系统会以/etc/login.defs、/etc/defaults/useradd两个配置文件作为参照物,如果在创建用户时指定了参数则会覆盖/etc/login.defs、/etc/defaults/useradd文件的默认配置,如果未指定则使用默认

    [root@sunedu ~]# less /etc/login.defs

    #参数讲解

    #用户的邮件目录

    MAIL_DIR /var/spool/mail

    #密码最大天数

    PASS_MAX_DAYS 99999

    #密码最小天数

    PASS_MIN_DAYS 0

    #密码最小长度

    PASS_MIN_LEN 5

    #密码警告天数

    PASS_WARN_AGE 7

    #普通用户最小uid

    UID_MIN 1000

    #普通用户最大uid

    UID_MAX 60000

    #系统用户最小uid

    SYS_UID_MIN 201

    #系统用户最大uid

    SYS_UID_MAX 999

    #普通用户组最小gid

    GID_MIN 1000

    #普通用户组最大gid

    GID_MAX 60000

    #系统组最小gid

    SYS_GID_MIN 201

    #系统组最大gid

    SYS_GID_MAX 999

    #是否创建家目录

    CREATE_HOME yes

    #权限

    UMASK 077

    #删除用户时,是否要移除用户组

    USERGROUPS_ENAB yes

    #密码加密算法

    ENCRYPT_METHOD SHA512

     

    #查看useradd配置文件

    [root@sunedu ~]# cat /etc/default/useradd

    # useradd defaults file

    GROUP=100            //依赖于/etc/login.defs的USE RGRUUPS_ENAB参数,如果为no,则在此处控制

    HOME=/home        //把用户的家目录建在/home中。

    INACTIVE=-1            //是否启用账号过期停权,-1表示不启用。

    EXPIRE=            //账号终止日期,不设置表示不启用。

    SHELL=/bin/bash        //新用户默认所有的shell类型。

    SKEL=/etc/skel        //配置新用户家目录的默认文件存放路径。

    CREATE_MAIL_SPOOL=yes    //创建mail文件。

  • 当使用useradd创建用户时,创建的用户家目录下会存在.bash_*环境变量相关的文件,这些环境变量默认文件在/etc/skel目录中拷贝。这个默认拷贝环境变量位置是由/etc/defaults/useradd配置文件中定义

    企业故障案例

    #在当前用户的家目录下,想要删除所有文件,执行了如下命令

    [root@db04 ~]# rm -fr .*

    #结果再次登录时

    -bash-4.1#

     

    #解决办法

    -bash-4.1# cp /etc/skel/.bash* .

    #再次登录 即可恢复

    [root@db04 ~]#

4、用户密码管理

创建完账户后,默认是没有设置密码的,所以该账户是没有办法登陆操作系统。只有使用passwd设置好密码后方可登录系统。

使用passwd为用户创建密码时,为了安全起见,请尽量设置复杂一些。可以按照如下规则设置密码:

1.密码的长度最好大于10位字符

2.密码中包含大小写字母数字以及特殊字符 ! @ # $

3.不规则性(不要出现自己名字、公司名字、自己电话、等等简单的密码

需要注意:

1.普通用户只能更改自己的密码(密码必须满足8位字符)

2.管理员用户能更改任何人的密码(密码长度无限制)

4.1、使用passwd命令修改用户密码

语法: passwd [username]

 

//'passwd'后面不加[username]则是修改当前登陆终端用户的密码。

//如果你登陆的是root管理员用户,后面可以指定要修改的用户。

//只有root管理员才可以修该其他用户的密码,普通账户只能修改自己的密码,并且普通用户没有修改其他用户密码的权限

 

 

//root管理员用户登陆,修改root用户密码

[root@sunedu ~]# passwd

更改用户 root 的密码 。

新的 密码:

无效的密码: 密码少于 8 个字符

重新输入新的 密码:

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

 

//root用户登陆,修改其他用户的密码

[root@sunedu ~]# passwd yu

更改用户 yu 的密码 。

新的 密码:

无效的密码: 密码少于 8 个字符

重新输入新的 密码:

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

 

//普通用户修改root管理员密码

[root@sunedu ~]# su - sun

[sun@sunedu ~]$ passwd root

passwd:只有根用户才能指定用户名。

 

//无需用户交互修改密码, 将前者的输出结果, 成为后者的输入

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

更改用户 sun 的密码 。

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

4.2、随机复杂密码生成的方式

  • 系统内置变量生成随机密码

    [root@sunedu ~]# echo $RANDOM | md5sum | cut -c 1-10

    3e4b368d5d

    [root@sunedu ~]# echo $(echo $RANDOM | md5sum | cut -c 1-10) | tee pass.txt | passwd --stdin sun

    更改用户 sun 的密码 。

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

    [root@sunedu ~]# cat pass.txt

    3044e58f92

  • mkpasswd密码生成工具, -l设定密码长度,-d数子,-c小写字母,-C大写字母,-s特殊字符

    [root@sunedu ~]# yum install -y expect

    [root@sunedu ~]# echo $(mkpasswd -l 10 -d 2 -c 2 -s 4) | tee pass.txt | passwd --stdin sun

    更改用户 sun 的密码 。

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

    [root@sunedu ~]# cat pass.txt

    W)t:!83D!w

5、组的基本管理

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

  • /etc/group 组账户信息

    [root@sunedu ~]# head -2 /etc/group

    root:x:0:

    bin:x:1:

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

    字段名称

    1.组的名称

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

    3.组GID信息

    4.仅显示附加成员,基本成员不显示

  • /etc/gshadow 组密码信息

    [root@sunedu ~]# head -2 /etc/gshadow

    root:::

    bin:::

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

    字段名称

    1.组名称

    2.组密码

    3.组管理员

    4.仅显示附加成员,基本成员不显示

5.1、使用groupadd命令新增组groupadd [-g GID] groupname

//创建基本组, 不指定gid

[root@sunedu ~]# groupadd yh

[root@sunedu ~]# tail -n1 /etc/group

yh:x:5010:

 

//创建基本组, 指定gid为5555

[root@sunedu ~]# groupadd -g 4444 yh

[root@sunedu ~]# tail -n1 /etc/group

yh:x:4444:

 

//创建系统组,gid从201-999

[root@sunedu ~]# groupadd -r zh

[root@sunedu ~]# tail -n1 /etc/group

zh:x:995:

5.2、使用groupmod命令新增组

//-g 修改组gid

[root@sunedu ~]# groupmod -g 1111 zh

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

zh:x:1111:

 

//-n 修改组名称

[root@sunedu ~]# groupmod -n uu zh

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

uu:x:1111:

 

5.3、使用groupdel删除组

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

#删除组

[root@sunedu ~]# groupdel uu

#删除用户附加组

[root@sunedu ~]# id sun

uid=5001(sun) gid=1003(students) 组=1003(students),1001(sa),1002(dba)

[root@sunedu ~]# groupdel sa

[root@sunedu ~]# id sun

uid=5001(sun) gid=1003(students) 组=1003(students),1002(dba)

 

#无法删除用户基本组

[root@sunedu ~]# id sun

uid=5001(sun) gid=1003(students) 组=1003(students),1002(dba)

[root@sunedu ~]# groupdel students

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

#只有删除用户或者用户变更基本组后,方可删除该组

5.4、使用gpasswd设置组密码[了解即可]

[root@sunedu ~]# groupadd yytu

[root@sunedu ~]# gpasswd yytu

正在修改 yytu 组的密码

新密码:

请重新输入新密码:

5.5、使用newgrp命令切换基本组身份[了解即可]

//检查账户信息

[root@sunedu ~]# useradd oouu

[root@sunedu ~]# id oouu

uid=5003(oouu) gid=5004(oouu) 组=5004(oouu)

 

 

//切换普通用户

[root@sunedu ~]# su - oouu

 

//创建新文件,并验证权限

[oouu@sunedu ~]$ touch file_oouu

[oouu@sunedu ~]$ ll

总用量 0

-rw-rw-r--. 1 oouu oouu 0 2月 19 01:10 file_oouu

//切换组信息

[oouu@sunedu ~]$ newgrp yytu

密码:        #输入组密码

 

 

//建立文件,检查权限

[oouu@sunedu ~]$ touch file_test

[oouu@sunedu ~]$ ll

总用量 0

-rw-rw-r--. 1 oouu oouu 0 2月 19 01:10 file_oouu

-rw-r--r--. 1 oouu yytu 0 2月 19 01:14 file_test

6、用户切换身份

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

如何在普通用户的情况下,完成日常工作

  • su 切换用户,使用普通用户登录,然后使用su命令切换到root。

    优点:简单,方便

    缺点:需要知道root密码,不安全,切换到root没有日志审计功能

  • sudo 提权,当需要使用root权限时,进行提权,而无需切换至root用户

    优点:安全,方便

    缺点:复杂

6.1、Shell分类

交互式shell //等待用户输入执行的命令(终端操作,需要不断提示)

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

 

登陆shell //需要输入用户名和密码才能进入shell su - zls

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

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

[root@sunedu ~]# export PS1='[\h@\u \t]# '

[sunedu@root 01:19:53]#

6.2、bash shell 配置文件

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

 

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

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

 

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

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

 

全局配置和个人配置设置冲突, 优先使用个人配置准

6.3、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, 即可验证执行顺序。

扩展登录提示信息

_ooOoo_

o8888888o

88" . "88

(| -_- |)

O\ = /O

____/`---'\____

.' \\| |// `.

/ \\||| : |||// \

/ _||||| -:- |||||- \

| | \\\ - /// | |

| \_| ''\---/'' | |

\ .-\__ `-` ___/-. /

___`. .' /--.--\ `. . __

."" '< `.___\_<|>_/___.' >'"".

| | : `- \`.;`\ _ /`;.`/ - ` : | |

\ \ `-. \_ __\ /__ _/ .-` / /

======`-.____`-.___\_____/___.-`____.-'======

`=---='

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

佛祖保佑 永不宕机

 

 

// _ooOoo_

// o8888888o

// 88" . "88

// (| -_- |)

// O\ = /O

// ____/`---'\____

// . ' \\| |// `.

// / \\||| : |||// \

// / _||||| -:- |||||- \

// | | \\\ - /// | |

// | \_| ''\---/'' | |

// \ .-\__ `-` ___/-. /

// ___`. .' /--.--\ `. . __

// ."" '< `.___\_<|>_/___.' >'"".

// | | : `- \`.;`\ _ /`;.`/ - ` : | |

// \ \ `-. \_ __\ /__ _/ .-` / /

// ======`-.____`-.___\_____/___.-`____.-'======

// `=---='

//

// .............................................

// 佛祖镇楼 BUG辟易

// 佛曰:

// 写字楼里写字间,写字间里程序员;

// 程序人员写程序,又拿程序换酒钱。

// 酒醒只在网上坐,酒醉还来网下眠;

// 酒醉酒醒日复日,网上网下年复年。

// 但愿老死电脑间,不愿鞠躬老板前;

// 奔驰宝马贵者趣,公交自行程序员。

// 别人笑我忒疯癫,我笑自己命太贱;

// 不见满街漂亮妹,哪个归得程序员?

 

 

/**

*        ┏┓  ┏┓+ +

*       ┏┛┻━━━┛┻┓ + +

*       ┃      ┃  

*       ┃   ━   ┃ ++ + + +

*       ████━████ ┃+

*       ┃       ┃ +

*       ┃   ┻   ┃

*       ┃      ┃ + +

*       ┗━┓   ┏━┛

*         ┃   ┃           

*         ┃   ┃ + + + +

*         ┃   ┃    Code is far away from bug with the animal protecting       

*         ┃   ┃ +     神兽保佑,代码无bug  

*         ┃   ┃

*         ┃   ┃  +         

*         ┃    ┗━━━┓ + +

*         ┃      ┣┓

*         ┃       ┏┛

*         ┗┓┓┏━┳┓┏┛ + + + +

*         ┃┫┫ ┃┫┫

*         ┗┻┛ ┗┻┛+ + + +

*/

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

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

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

6.5、创建用户,并登录系统

[root@sunedu ~]# useradd sunedu

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

 

//使用sunedu用户登录当前Linux系统

~ ssh sunedu@192.168.56.111

sunedu@192.168.56.111's password:

[sunedu@sunedu ~]$

 

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

[sunedu@sunedu ~]$ whoami

Sunedu

6.6、切换用户,使用命令su [-] username

su命令后面跟-代表进入登陆式shell 如果su命令后不加-代表进入非登陆式shell,他们之间的区别在于加载的环境变量不一样。

普通用户su -代表直接切换至root用户身份, 但需要输入root用户密码。

超级管理员root用户使用su - username切换普通用户不需要输入任何密码

[sunedu@sunedu ~]$ pwd

/home/sunedu

 

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

[sunedu@sunedu ~]$ su

密码:

[root@sunedu sunedu]# pwd

/home/sunedu

[root@sunedu sunedu]# exit

exit

 

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

[sunedu@sunedu ~]$ su -

密码:

[root@sunedu ~]# pwd

/root

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

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

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

7、用户身份提权

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

为了改进这个问题,从而产生了sudo这个命令。

sudo执行一个仅有root身份才能执行的命令是可以办到的,但是需要输入密码,这个密码并不是root的密码而是用户自己的密码。

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

  • Centos7提权

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

    //日志审计

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

  • CentOS6提权

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

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

     

    #2.使用`visudo`命令编辑sudo配置文件, 相当于 vim /etc/sudoers`配置文件

    [root@sunedu ~]# visudo #会对配置进行验证

    sunedu ALL=(ALL) /bin/rm, /bin/cp #新增

     

    #3.配置选项详解

    1.用户名 2.主机名 3.角色名 4.命令名

    root ALL= (ALL) ALL

    sunedu ALL 使用最高角色执行 /bin/rm, /bin/cp #允许使用sudo执行命令

    sunedu ALL=(ALL) NOPASSWD:/bin/cp, /bin/rm //不需要密码使用rm、cp命令

     

    #4.使用visudo -c检查配置文件

    [root@sunedu ~]# visudo -c

    /etc/sudoers: parsed OK

7.1、普通用户验证sudo权限

#1.切换普通用户

[root@sunedu ~]# su - sunedu

 

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

[sunedu@sunedu ~]$ sudo -l

...

User sunedu may run the following commands on this host:

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

 

#3.普通用户删除opt目录,删除失败

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

rm: cannot remove `/opt': Permission denied

 

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

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

7.2、sudo免密码配置选项

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

[root@sunedu ~]# visudo

sunedu ALL=(ALL) /bin/rm, /bin/cp #默认

sunedu ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp #修改后

 

#2.默认普通用户无权删除

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

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

 

#3.验证sudo免密码执行权限

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

7.3、sudo配置组

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

 

%sunedu ALL=(ALL) NOPASSWD:/bin/rm, /bin/cp #新增组

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

 

//创建用户加入该组

[root@sunedu ~]# groupadd sunedu

[root@sunedu ~]# useradd sunedu1 -g sunedu

[root@sunedu ~]# useradd sunedu2 -g sunedu

 

//root用户建立目录

[root@sunedu ~]# mkdir /root/sunedu_sudo

 

//切换用户并删除测试

[root@sunedu ~]# su - sunedu1

[sunedu1@sunedu ~]$ rm -rf /root/sunedu_sudo

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

 

//使用sudo

[sunedu1@sunedu ~]$ sudo rm -rf /root/sunedu_sud

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

 

下面介绍一个很实用的案例,我们的需求是将Linux服务器设置成如下:

1.仅允许使用普通账户登陆Linux服务器,禁止root直接登录

2.可以让普通用户不输入密码就能sudo su -切换到root账户

//禁止root用户登陆

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

[root@sunedu ~]# systemctl restart sshd

 

//配置sudo权限

[root@sunedu ~]# visudo

User_Alias USER_SU = sunedu1,sunedu2,sunedu

Cmnd_Alias SU = /bin/su

USER_SU ALL=(ALL) NOPASSWD:SU

 

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

➜ ~ ssh root@192.168.56.11

root@192.168.56.11's password:

Permission denied, please try again.

 

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

➜ ~ ssh sunedu@192.168.56.11

sunedu@192.168.56.11's password:

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

 

//使用sudo提权至root用户

[sunedu@sunedu ~]$ sudo su -

[root@sunedu ~]#

7.4、sudo执行流程

1.普通用户执行sudo命令, 会检查/var/db/sudo是否存在时间戳缓存

2.如果存在则不需要输入密码, 否则需要输入用户与密码

3.输入密码会检测是否该用户是否拥有该权限

4.如果有则执行,否则报错退出

第七章·Linux用户管理-用户的基本操作

上一篇:java的单例模式小知识点


下一篇:查看JVM运行参数jinfo命令