用户和组
3A认证
Authentication:认证,传统的认证方式比如密码,其他的比如使用公钥和私钥来认证
Authorization:授权,给予用户相应的权限
Accouting:审计,对用户的行为进行审查等等
用户和组
在Linux系统中,有用户和组两个概念,用户是被包含在组里面的
用户
分为两大类
管理员:就是root,UID:0
普通用户:系统用户(为了能够让有些后台进程以非管理员的身份运行,通常为此创建很多的系统用户,该类用户不用登陆系统),UID:1-499(centos6),1-999(centos7)。登录用户,UID:500+(centos6),1000+(centos7)
组
组也有自己的GID,不同类型组的取值范围也是不一样的,同样也是16位二进制。组按照不同的分类可以分为以下3种类型的组:
按管理员组和普通用户组
管理员组:对系统有着管理权限的组,GID为0
普通用户组:系统用户组: 1-499(centos6),1-999(centos7)。登陆用户组:500+(centos6),1000+(centos7)
按主要组和附加组
主要组:用户在创建的时候,都会默认创建一个与其名字相同的基本组
附加组:一个用户属于一个基本组后,也可以添加多个其他的组,这些其他的组就成为附加组
按用户数目
私有组:组名同用户名且只包含一个用户
公有组:组内包含多个用户
用户和组的相关配置文件
/etc/passwd
用户及其属性信息
[root@centos7 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
......
fanjie:x:1002:1002::/home/fanjie:/bin/bash
会看到一行从左到右被冒号分割成了7个部分,下面就这七个部分作出解释,我们以最后一行为例:
- fanjie:用户名
- x:密码位,默认使用了pwconv将密码映射到了/etc/shadow中,可以使用pwunconv将密码替代x,这样的话/etc/shadow文件就会被删除
- 1002:UID,用户的ID
- 1002:GID,用户的组ID
- GECOS:用户的全名或者注释
- /home/fanjie:用户的家目录
- /bin/bash:用户登陆后的默认shell,如果设置为/sbin/nologin,表示为不可交互式
/etc/shadow
用户密码及其相关属性
[root@centos7 ~]# cat /etc/shadow
root:$6$t7YfBMG2kWqZvykg$.nk3ovmX9ldIQVYHXtOxCr4nmjZqxrgRhIDLC1i1f2p2HNkGVD.DuFAUruVoCw2ceyx8QQN1QhEnm5BTLwE0X1::0:99999:7:::
......
fanjie:!!:17673:0:99999:7:::
会看到一行被冒号分为了9个部分,我们以root为例子来说明:
- fanjie:登陆的用户名
- 密码位:分为三个部分,$6为加密类型,$t7YfBMG2kWqZvykg为盐(salt),加盐的作用就是即使存在相同的密码,生成的密码也具有唯一性,$...为sha512加密后的密文,当密码前有!或者*代表这个用户被禁用了
- 17673:用户最近修改密码的日期,用天数表示,表示操你个1970年1月1日到被修改那天之间的天数
- 0:密码最短使用天数,0表示可以随时修改密码,如果为3,那么表示用户只能在当前日期的三天后才可以修改密码
- 99999:密码最长使用天数,相当于永久
- 7:密码失效前多少天提醒用户修改密码,默认为7天
- 密码过期多少天账户会被锁定
- 账号失效时间,也就是基于1970年1月1日的天数,当用户到了这个时间的时候,就无法在使用了
- 保留位
/etc/group
组及其信息
[root@centos7 ~]# cat /etc/group
root:x:0:
......
fanjie:x:1000:
每一行被冒号从左至右分割成了4个部分,还是以fanjie这一行来说明:
- fanjie:组名,默认创建一个用户,就会创建一个与其同名的组
- x:组密码占位符
- 1000:GID
- 是一个以逗号分隔的用户列表,为此组为附加组的用户列表
/etc/gshadow
组密码及其相关属性
[root@centos7 ~]# cat /etc/gshadow
root:::
......
fanjie:!::
每一行被冒号从左至右分割成了4个部分,还是以fanjie这一行来说明:
- fanjie:组名
- 如果为!或者是*,那么其他用户就不需要密码就可以加入到这个组中,如果组是设置密码的,则为一串密文,如果为空,则表示只有该组的成员可以获得组的权限
- 用户组的管理员,是一个以逗号分隔的用户列表,用户管理员可以修改密码和组成员,也跟组里其他成员拥有相同的权限
- 成员,是一个以逗号分隔的用户列表,以此组为附加组的用户的用户列表,应该要和/etc/group下的用户列表一样
用户和组常用的管理命令
pwck
校验密码文件的完整性
grpck
校验组文件的完整性
useradd
创建一个新的用户,常用选项:
- -u:创建用户时指定用户的ID
- -o:配合-u选项,不检查UID的唯一性
- -g:指定用户所属的基本组,可以为组名,也可以是GID
- -c:指定用户的注释信息
- -d:以指定的路径为家目录
- -s:指定用户的默认shell
- -G:指定用户附加组,组必须事先存在,多个组以逗号分隔
- -N:不创建私有组为主组,使用users(默认存在的组,GID为100)
- -r:创建系统用户
- -m:创建家目录,属于系统用户
- -M:不创建家目录,用于非系统用户
[root@centos7 ~]# useradd -u 1009 fanjie8
[root@centos7 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
......
fanjie8:x:1009:1009::/home/fanjie8:/bin/bash
用户在创建的时候会有一些默认值,默认值的设定在/etc/default/useradd中
[root@centos7 ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
在新建普通用户的时候,会为其创建一个家目录,我们会发现一个用户家目录下默认会有很多隐藏文件,这些隐藏文件就是来自/etc/skel下
[root@centos7 ~]# ls -a /etc/skel/
. .. .bash_logout .bash_profile .bashrc .mozilla
还有其他的配置是保存在/etc/login.defs,比如是否创建家目录,UMASK,密码的时间的设置等等都在里面。
chage
查看和修改用户密码的相关时间,比如查看一个用户的时间
[root@centos7 ~]# chage -l fanjie
Last password change : May 22, 2018
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
getent
可以用来查看系统的数据库中的相关记录,比如查看用户的passwd信息或shadow信息
[root@centos7 ~]# getent passwd fanjie
fanjie:x:1000:1000::/home/fanjie:/bin/bash
[root@centos6 ~]# getent shadow fanjie
fanjie:!!:17678:0:99999:7:::
usermod
用户属性的修改,常用选项:
- -u:指定新的用户ID
- -g:指定新的组
- -G:指定新的附加组
- -s:指定新的shell
- -c:指定新的注释信息
- -d:指定新的家目录不会自动创建,若要自动创建并移动原始家目录的数据,需要配合-m选项来使用
- -l:修改登录名
- -L:锁定用户,也就是在/etc/shadow密码栏前面加上!
- -U:解锁用户,也就是拿掉!
[root@centos7 ~]# getent shadow fanjie
fanjie:$6$e3uZLz9r$69IndMMaEizzorAUkxXbhO.Ns9eEa41jC0egRZpSPHxcmrAZ9GbwV1L00SppzYPaMhRSjsi2cLLlrpJONNKak/:17673:0:99999:7:::
[root@centos7 ~]# usermod -L fanjie
[root@centos7 ~]# getent shadow fanjie
fanjie:!$6$e3uZLz9r$69IndMMaEizzorAUkxXbhO.Ns9eEa41jC0egRZpSPHxcmrAZ9GbwV1L00SppzYPaMhRSjsi2cLLlrpJONNKak/:17673:0:99999:7:::
userdel
删除用户,默认情况下不删除用户的家目录,使用-r选项同时删除用户的家目录
[root@centos7 ~]# userdel fanjie
[root@centos7 ~]# useradd fanjie
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
Creating mailbox file: File exists
id
查看用户的相关信息,常用选项:
- -u:显示UID
- -g:显示GID
- -G:显示所有的组ID
- -n:显示名称,需要配合ugG使用
[root@centos7 ~]# id fanjie
uid=1002(fanjie) gid=1002(fanjie) groups=1002(fanjie),1003(test)
[root@centos7 ~]# id -u fanjie
1002
[root@centos7 ~]# id -g fanjie
1002
[root@centos7 ~]# id -G fanjie
1002 1003
[root@centos7 ~]# id -Gn fanjie
fanjie test
su
切换用户,root用户su到任何用户都不需要密码
su username:非登录切换,不会读取目标用户的配置文件,不会变更当前的工作目录
su - username:登录切换,会读取目标用户的配置文件。切换至目标用户的家目录
# 使用目标用户执行命令
[root@centos7 ~]# su - fanjie -c "mkdir /app/fanjie"
mkdir: cannot create directory ‘/app/fanjie’: Permission denied
passwd
修改用户密码,常用选项:
- -l:锁定指定的用户
- -u:解锁用户
- -e:强制用户下次登录修改密码
- --stdin:从标准输入接受用户的密码
# 强制用户下次登录修改密码
[root@centos6 ~]# passwd -e fanjie
Expiring password for user fanjie.
passwd: Success
[root@centos6 ~]# su - fanjie1
[fanjie1@centos6 ~]$ su - fanjie
Password:
You are required to change your password immediately (root enforced)
Changing password for fanjie.
(current) UNIX password:
New password:
Retype new password:
# 从标准输入修改密码
[root@centos6 ~]# echo 123 |passwd --stdin fanjie
Changing password for user fanjie.
passwd: all authentication tokens updated successfully.
finger
用来显示用户的相关信息
[root@centos7 ~]# finger
Login Name Tty Idle Login Time Office Office Phone Host
root root pts/0 May 22 16:26 (172.18.118.140)
练习
-
创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为"Gentoo Distribution"
[root@centos7 ~]# useradd -G bin,root -s /bin/csh -c "Gentoo Distribution" gentoo
-
创建用户sarah,不可交互登录系统
[root@centos7 ~]# useradd -s /sbin/nologin sarah [root@centos7 ~]# su - sarah This account is currently not available.
group
新增组,常用选项:
- -g:指定GID
- -r:创建系统组
groupmod
修改组的信息,常用选项:
- -g:修改GID
- -n:修改组名称
groupdel
删除组
gpasswd
设置组密码,也能添加或者删除组成员,常用选项:
- -a:添加单个用户到指定组(组管理员可执行)
- -d:删除指定的组中单个用户(组管理员可执行)
- -r:将指定的组密码删除(组管理员可执行)
- -R:禁止切换该组,该组的密码被设置为了!,仅仅只有组成员才可以使用newgroup切换到该组
- -M:可以一次性设置多个组成员,但会覆盖掉原来的组成员信息,组管理员不可执行,仅仅只有root用户可以执行,用逗号分隔成员,若不想覆盖,直接追加,可以配合-a选项
- -A:设置组管理员的列表,用逗号分隔
newgrp
切换到一个新组,用户在切换到自己的附加组的时候,是不需要输入密码的,但是切换到其他的 组中的时候,需要验证密码。切换的时候会打开一个子shell
groupmems
- -g:指定组的名字,配合以下选项使用
- -a:将指定的用户加到指定的组
- -d:将指定的用户从组中删除
- -p:清除该组的所有成员
- -l:列出组成员列表
groups
查看用户属于哪些组(包含主要组)
chown
修改文件的属主和属组,常用选项:
- -R:递归修改
- ./::修改属组
- --reference=目标名 待修改的文件名:将指定文件的从属关系设置为目标文件的从属关系
[root@centos7 app]# ll
total 0
-rw-r--r--. 1 root root 0 May 24 09:25 b
dr-x------. 4 fanjie fanjie 87 May 23 20:46 test
[root@centos7 app]# chown wangcai.wangwu b
[root@centos7 app]# ll
total 0
-rw-r--r--. 1 wangcai wangwu 0 May 24 09:25 b
dr-x------. 4 fanjie fanjie 87 May 23 20:46 test
[root@centos7 app]# chown --reference=test b
[root@centos7 app]# ll
total 0
-rw-r--r--. 1 fanjie fanjie 0 May 24 09:25 b
dr-x------. 4 fanjie fanjie 87 May 23 20:46 test
chgrp
修改文件的属组,所属人要修改时,所属人一定要属于目标组,可配合-R递归删除