简介
Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
每个用户账号都拥有一个惟一的用户名和各自的口令。
用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
实现用户账号的管理,要完成的工作主要有如下几个方面:
- 用户账号的添加、删除与修改。
- 用户口令的管理。
- 用户组的管理。
一、用户的基本概述
1.什么是用户
用户指的是能够正常登录Linux或Windows系统(可以理解为你租了房子,能够正常入驻)。
问:那Linux与Windows系统的用户有什么区别?
答:本质都是登陆系统,只不过Linux支持多个用户同时登陆。
问:难道Windows就不算多用户操作系统吗?
答:其实不是,在Windows系统中可以创建多个用户,但不允许同一时刻多个用户登陆系统,但Linux系统则允许同一时刻多个用户同时登陆,登陆后相互之间操作并不影响。
2.显示用户的信息
[root@whb ~]# id #显示当前登录的用户信息
uid=0(root) gid=0(root) groups=0(root)
[root@whb ~]# id adm #显示其他用户的信息
uid=3(adm) gid=4(adm) groups=4(adm)
[root@whb ~]# ps aux #不同的进程使用不同的用户启动和管理
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 128032 6648 ? Ss Nov28 3:28 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S Nov28 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Nov28 0:18 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< Nov28 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S Nov28 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S Nov28 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R Nov28 0:43 [rcu_sched]
3.用户信息的存放位置
Linux系统会将用户的信息存放在/etc/passwd,记录了用户的信息,但没有密码信息,密码被存放
在/etc/shadow中。也就是说这两个文件非常的重要,不要轻易删除与修改
二、用户的配置文件
1.用户信息的配置文件/etc/passwd
[root@whb ~]# head -1 /etc/passwd #存在用户的基本信息
root:x:0:0:root:/root:/bin/bash
以:为分隔符,分成7列
第一列: root #用户的名称
第二列: x #密码的占位符
第三列: 0 #用户的UID
第四列: 0 #用户的组ID,GID
第五列: root #用户的注释信息
第六列: /root #用户的家目录
第七列: /bin/bash #用户的命令解释器
2.用户密码的配置文件/etc/shadow
[root@whb ~]# cat /etc/shadow
root:$6$JKkPVQCTgyseuqBi$0pxtzE1hJ.tum6r3D7c8AprvdQty/rKunLClXhmfePUsIwQUO6nWK9k3ZnHo7iF.oOwEQg1mZRL2qAmdSFea7.
::0:99999:7:::
bin:*:17834:0:99999:7:::
以:号为分割符,分成9列
第一列: #用户的名称
第二列: #用户的密码,加密 ,* 或 !! 表示没有密码
第三列:17834 #表示用户的密码最近的一次修改时间,距离1970年1月1号过了多少天
第四列: 0 #密码最小使用时间,0 没有限制
第五列:99999 #密码的最大有效期,最大的使用时间
第六列:7 #密码快到期的警告时间
第七列: #密码过期后的宽恕时间
第八列: #账户的失效时间
第九列: #没有使用
3.系统与用户的约定
用户UID | 系统中约定的含义 |
0 | 超级管理员,最高权限,有着极强的破坏能力 |
1~200 | 系统用户,用来运行系统自带的进程,默认已创建 |
201~999 | 系统用户,用来运行安装的程序,所以此类用户无需登录系统 |
1000+ | 普通用户,正常可以登录系统的用户,权限比较小,能执行的任务有限 |
三、用户的相关命令
useradd #添加用户
usermod #修改已存在用户的信息
userdel #删除用户
1.使用useradd命令创建用户
选项:
-u #指定用户的UID -g #指定用户组,写组名或者组的ID,基本组
-G #指定附加组,多个使用逗号分隔
-c #添加注释信息
-r #创建系统用户,不创建家目录
-M #不创建家目录
-d #指定家目录的位置,目录要是不存在
-s #指定用户的命令解释器
案例:
[root@whb ~]# id user01 #默认创建普通的用户
uid=1001(user01) gid=1001(user01) groups=1001(user01)
[root@whb ~]# grep 'user01' /etc/passwd
user01:x:1001:1001::/home/user01:/bin/bash
[root@whb ~]# useradd -u888 -c "测试用户" -d /opt/user02 user02
[root@whb ~]# id user02
uid=888(user02) gid=1002(user02) groups=1002(user02)
[root@whb ~]# grep 'user02' /etc/passwd
user02:x:888:1002:测试用户:/opt/user02:/bin/bash
[root@whb ~]# ll /opt/
drwx------. 2 user02 user02 62 Dec 12 18:36 user02
[root@whb ~]# useradd -r -s /sbin/nologin user04
[root@whb ~]# grep 'user04' /etc/passwd
user04:x:664:663::/home/user04:/sbin/nologin
[root@whb ~]# ll /home/
total 0
drwx------. 2 test test 62 Nov 27 19:57 test
drwx------. 2 user01 user01 62 Dec 12 18:29 user01
[root@whb ~]# useradd -M -s /sbin/nologin user05
[root@whb ~]# ll /home/
total 0
drwx------. 2 test test 62 Nov 27 19:57 test
drwx------. 2 user01 user01 62 Dec 12 18:29 user01
[root@whb ~]# grep 'user05' /etc/passwd
user05:x:2000:2000::/home/user05:/sbin/nologin
2.使用usermod命令修改用户信息
选项:
-u #指定要修改用户的UID
-g #指定要修改用户基本组
-a #将用户添加到补充组。仅与-G选项一起使用
-G #指定要修改用户附加组,使用逗号隔开多个附加组, 覆盖原有的附加组
-d #指定要修改用户家目录
-m #将用户主目录的内容移动到新位置。如果当前主目录不存在,则不会创建新的主目录
-s #指定要修改用户的bash shell
-c #指定要修改用户注释信息
-l #指定要修改用户的登陆名
-L #指定要锁定的用户
-U #指定要解锁的用户
案例:
[root@whb ~]# usermod -u1010 -c "test" -s /bin/bash user05
[root@whb ~]# grep 'user05' /etc/passwd
user05:x:1010:2000:test:/home/user05:/bin/bash
[root@whb ~]# usermod -md /home/user02 user02
[root@whb ~]# ll /home/
total 0
drwx------. 2 test test 62 Nov 27 19:57 test
drwx------. 2 user01 user01 62 Dec 12 18:29 user01
drwx------. 2 user02 user02 62 Dec 12 18:36 user02
[root@whb ~]# usermod -l oldboy user05 #修改名称
[root@whb ~]# id user05
id: user05: no such user
[root@whb ~]# id oldboy
uid=1010(oldboy) gid=2000(user05) groups=2000(user05)
[root@whb ~]# grep 'oldboy' /etc/passwd
oldboy:x:1010:2000:test:/home/user05:/bin/bash
[root@whb ~]# usermod -L test #锁定用户
[root@whb ~]# usermod -U test #解锁用户
3使用userdel命令删除用户
选项:
-r #删除用户同时删除它的家目录
案例:
[root@whb ~]# userdel user02 #默认不删除家目录和邮件信息
[root@whb ~]# grep 'user02' /etc/passwd
[root@whb ~]# id user02
id: user02: no such user
[root@whb ~]# ll /home/
total 0
drwx------. 2 test test 62 Nov 27 19:57 test
drwx------. 2 user01 user01 62 Dec 12 18:29 user01
drwx------. 2 888 1002 62 Dec 12 18:36 user02
[root@whb ~]# userdel -r user01 #删除跟用户相关的所有信息
[root@whb ~]# ll /home/
total 0
drwx------. 2 test test 62 Nov 27 19:57 test
drwx------. 2 888 1002 62 Dec 12 18:36 user02
四、用户组管理
(一)、用户组的类型:
基本组 #一个用户只有一个基本组
附加组 #一个用户可以有多个附加组
但是,各种组都可以有多个用户
(二)、组信息及密码信息的文件
1.组信息的文件/etc/group
[root@whb ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
第一列: #组名
第二列: #组密码占位符
第三列: #组的ID,即GID
第四列: #当组作为附加组时,它的组员。多个用逗号隔开
2.组密码信息的文件/etc/gshadow
[root@whb ~]# cat /etc/gshadow
root:::
bin:::
daemon:::
第一列: #组名
第二列: #组密码,!和空格表示无密码
第三列: #组的管理者
第四列: #当组作为附加组时,它的组员。多个用逗号隔开
(三)、创建用户组的命令groupadd
1.groupadd
#创建组命令
选项:
-g #指定组的GID
-r #创建系统组
[root@whb ~]# groupadd user01
[root@whb ~]# grep 'user01' /etc/group
user01:x:2016:
[root@whb ~]# groupadd -g 2018 user02
[root@whb ~]# grep 'user02' /etc/group
user02:x:2018:
[root@whb ~]# groupadd -r user04
[root@whb ~]# grep 'user04' /etc/group
user04:x:663:
2.groupmod
#修改组信息命令
选项:
-n #修改组名字
-g #修改组的GID
[root@whb ~]# groupmod -g 2019 user01
[root@whb ~]# grep 'user01' /etc/group
user01:x:2019:
[root@whb ~]# groupmod -n user10 user01
[root@whb ~]# grep 'user01' /etc/group
[root@whb ~]# grep 'user10' /etc/group
user10:x:2019:
3.groupdel
#删除组
删除组时,无法删除已经作为用户基本组的组,如果只是附加组,可以删除。
[root@whb ~]# groupdel user10
[root@whb ~]# grep 'user10' /etc/group
[root@whb ~]# grep 'web' /etc/group
oldboy1:x:2002:web
web:x:2015:
[root@whb ~]# groupdel web
groupdel: cannot remove the primary group of user 'web'
[root@whb ~]# usermod -g user03 web
[root@whb ~]# groupdel web
[root@whb ~]# groupadd yw
[root@whb ~]# useradd -g yw yw1
[root@whb ~]# useradd -g yw yw2
[root@whb ~]# id yw1
uid=2014(yw1) gid=2019(yw) groups=2019(yw)
[root@qls ~]# id yw2
uid=2015(yw2) gid=2019(yw) groups=2019(yw)