在linux中每一个用户都有唯一的uid,linux内核根据uid区分不同的用户,同样每一个用户组,也有唯一的gid,一个组下可以存在多个账户,如果给group添加上了权限A,那么属于这个组的全部用户都拥有这个权限,每一个用户都可以加入多个组,但是肯定有一个是它的主要组
与用户和账户相关的文件
- /etc/passwd
[root@ecs-t6-large-2-linux-20190824103606 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
...
tcpdump:x:72:72::/:/sbin/nologin
dockerroot:x:997:994:Docker User:/var/lib/docker:/sbin/nologin
每行都有七个字段:
/etc/passwd 的第二个字段,是两个!!,表示账号被禁用
用户的用户是系统用户,一般系统用户的登录shell都是 /sbin/nologin,意思是一登录,就注销,普通用户的默认的登录shell是 bash
很多时候,为了安全考虑,安装的软件的运行权限都由 root 移交给普通用户,防止root在运行软件时,病毒获取到root权限
普通用户的UID (user identity)都大于500
超级用户root的UID=0,linux内核通过UID区分当前用户是普通用户还是超级用户,如果将这个/etc/passwd 的第三个字段修改成0,普通用户转变成超级用户
程序用户的UID 在 1-499 之间
- /etc/shadow
用于保存密码字串、密码有效期等信息
root:$6$DcAomvBO314te$bXUTg8SDgvH8pPtc2Sgbt5XctXwKOtcHHgM/Hm1vndY1jqaihIg0Vb6ge1Sww.VoQPg950Od7tnZ7OY81UGyy0:18132:0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
...
~
这里面的每一行都代表一个用户的密码记录,一共有9个字段
- 字段1: 账户名
- 字段2: 经过加密的密码字符串
- 字段3: 上次修改密码的时间
- 字段4: 密码的最短有效期,默认0
- 字段5: 密码的最长有效期,默认 99999
- 字段6: 提前多少天警告用户密码将过期,默认7
- 字段7: 密码过期多少天后禁用这个用户
- 字段8: 账号失效时间
- 字段9: 保留字段,未使用
其他文件
[root@ecs-t6-large-2-linux-20190824103606 ~]# ll -a /etc/skel/
total 20
drwxr-xr-x. 2 root root 4096 Feb 22 2019 .
drwxr-xr-x. 84 root root 4096 Sep 8 19:53 ..
-rw-r--r-- 1 root root 18 Oct 31 2018 .bash_logout
-rw-r--r-- 1 root root 193 Oct 31 2018 .bash_profile
-rw-r--r-- 1 root root 231 Oct 31 2018 .bashrc
新建用户账户时,会从/etc/skel目录中复制 /etc/skel/ 的文件,到用户的家目录中,这个家目录就是用户每次登录时进入的目录,如果他没有家目录,一登录进去进去的就是根目录
另一个用法就是,公司给新人创建账户时,可能会把公司的规章制度放置到这个文件中,达到人手一份的效果
- /etc/login.defs
和组相关的文件
- /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:root,adm,daemon
...
四个字段
- 字段1: 组账户名
- 字段2: 组密码占位符
- 字段3: GID
- 字段4: 组成员
用户至少属于一个组,默认情况下,创建用户时,会自动的创建一个组,组名和用户名一样,这个组就是用户的主要组(查看用户的主要组,在/etc/passwd 的第四个字段中可以看到GID)
- /etc/gshadow
存放组账号的密码信息
添加用户
命令: useradd [选项] [用户名]
- -u: 指定uid,默认在当前最大的uid上+1
- -d: home dir 指定宿主目录,缺省为 /home/用户名
- -e: expiredate 指定用户的失效时间
- -g: 指定用户的主要组 (或GID号)
- -G: 指定用户的附加组名 (或GID号)
- -M: no-create-home 不为用户创建并初始化宿主目录
- -s: 指定用户的登录shell,默认是 /bin/bash
通过上面的目录介绍,我们可以看知道,useradd命令至少触发了五个操作 1. /etc/passwd 2. /etc/shadow 3. etc/group 4. /home 5. /etc/skel,还会创建 /var/spool/mail
账户密码相关命令
新创建的用户是没有密码的,想登录,就得使用下面的命令给用户创建密码
命令: passwd [选项] 用户名
- -d: delete 清空用户密码,(远程不可登录)
- -l: lock 锁定用户账号
- -S: --status 查看用户的状态(是否被锁定)
- -u: unlock 解锁用户
- -stdin: 接受标准输入当成密码
echo '123' | passwd --stdin user
删除用户相关
命令: userdel [-r] 用户名
其他命令
命令: usermod [选项] 用户名
usermod -l newName oldname
命令: chage [选项] 用户名
常用命令选项
[root@ecs-t6-large-2-linux-20190824103606 home]# chage -l root
Last password change : Aug 24,2019
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
与group相关的命令
如果不指定GID,默认就是当前最大的gid+1
-
删除组
命令 groupdel 组账号名 -
groupmod 设置组名和组id
groupmod [选项]... 组帐号名
常用命令选项
格式:gpasswd [选项]... [用户] [组帐号名]
常用命令选项
gpasswd -M [用户1] [用户2] .. [用户组]
-M 会进行重置操作,也就是说,如果不添加上用户1,就算原来存在用户1,也会因为重置而被删除
id 命令
命令 : id [用户名]
[root@ecs-t6-large-2-linux-20190824103606 home]# id root
uid=0(root) gid=0(root) groups=0(root)
finger命令
命令: finger [用户名]
默认没有安装
who w users 查看当前在线的用户的信息
[root@ecs-t6-large-2-linux-20190824103606 home]# who
root pts/0 2019-09-08 19:39 (58.56.112.165)
[root@ecs-t6-large-2-linux-20190824103606 home]# w
20:47:26 up 4 days,5:18,1 user,load average: 0.00,0.01,0.05
USER TTY FROM LOGIN@ IDLE Jcpu Pcpu WHAT
root pts/0 58.56.112.165 19:39 6.00s 0.10s 0.00s w
[root@ecs-t6-large-2-linux-20190824103606 home]# users
root
groups 命令
命令 : groups 用户名
[root@ecs-t6-large-2-linux-20190824103606 home]# groups root
root : root