用户、组
- 越是对服务器安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范。
- 在Linux中主要是通过用户配置文件来查看和修改用户信息。
用户:当我们使用Linux时,需要以一个用户的身份登入,一个进程也需要一个用户的身份运行,用户限制使用者或者进程可以使用、不可以使用哪些资源。
组:组用来方便组织管理用户。
- 每个用户拥有一个UserID,操作系统实际使用的是用户ID,而非用户名
- 每个用户属于一个主组,属于一个或多个附属组
- 每个组拥有一个GroupID
- 每个进程以一个用户身份运行,并受该用户可访问的资源限制
- 每个可登陆用户拥有一个指定的shell
用户
- 用户ID为32位,从0开始,但是为了和老式系统兼容,用户ID限制在60000以下。
- 用户分为三种:
- -root用户 (ID为0的用户为root用户)
- -系统用户(1~499)
- -普通用户(500以上)
- 系统中的文件都有一个所属用户及所属组
- 使用
id
命令可以显示当前用户的信息
查看id
命令分别查看root用户和普通用户的用户信息。 - 使用
passwd
命令可以修改当前用户密码
相关文件
- /etc/passwd -保存用户信息
- /etx/shadow -保存用户密码(加密的)
- /etc/group -保存组信息
passwd
在/etc目录下输入cat passwd
,查看passwd文件。
其中每一行代表一个用户的信息,每一行分为7个部分,每个部分用“:”隔开。
- 第一部分是用户名;
- 第二部分是用户密码,“x”表示密码是保存在shadow文件中;
- 第三个部分是用户号,即userID;
- 第四个部分是“组ID”;
- 第五部分是用户的描述信息;
- 第六部分是用户的家目录;
- 最后一个是每个用户登陆用的shell,普通用户用的是就是“/bin/bash”,而系统用户使用的都是“/sbin/nologin”或者“/bin/false”。
shadow
在/etc目录下输入cat shadow
,查看shadow文件。
每一行也是代表一个用户的信息,也是分为若干个部分,每一个部分用“:”隔开。
- 第一个部分代表用户名;
- 第二个部分是密码,如果是“ !! ”或者“ * ”代表该用户没有设置密码,
上图中,这一行中的密码部分不是“!!”,这串密码也分为3个部分,用“$”隔开,第一个“1”代表加密的类型,第二个代表加密SALT,第三个就是加密后的密文。
所谓加Salt,就是加点“佐料”。当用户首次提供密码时(通常是注册时),由系统自动往这个密码里加一些“Salt值”,这个值是由系统随机生成的,并且只有系统知道。然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的“Salt值”,然后散列,再比较散列值,已确定密码是否正确。
这样,即便两个用户使用了同一个密码,由于系统为它们生成的salt值不同,他们的散列值也是不同的。即便黑客可以通过自己的密码和自己生成的散列值来找具有特定密码的用户,但这个几率太小了(密码和salt值都得和黑客使用的一样才行)。
- 第三部分是密码最后一次修改的日期。
使用1970年1月1日作为标准时间,每过一天时间戳+1。 - 第四部分密码修改的时间间隔,单位是天,如果是10就意味着10天之内不允许再次修改密码。
- 第五部分是密码的有效期,单位也是天。
- 第六部分是修改密码的到期警告时间,就是在密码有效期即将到期的天数里,系统会警告用户修改密码。
- 第七部分是密码修改的宽限时间,在密码失效之后,可以在对应的天数里继续登录,并且警告。
0 代表密码过期后立即失效。
-1 代表密码永远不会失效。 - 第八部分代表账号的失效时间,会忽略前面的有效期。时间用时间戳的形式。
时间戳换算:
时间戳换算为日期:date -d "1970-01-01 16066 days"
日期换算成时间戳:echo $(($(date --date="2019/05/13" +%s)/86400+1))
- 第九部分是保留字段,暂时没有用。
group
在/etc目录下输入cat group
,查看group文件。
也是分为几个部分,分别是组名、组密码、组ID,后面跟的是组里有哪些用户。
查看登陆的用户
- 命令
whoami
显示当前用户 - 命令
who
显示有哪些用户已经登录系统 - 命令
w
显示有哪些用户已经登录并且在干什么
额外提一句,Linux中有个约定俗成的习惯,但是不是强制的,就是命令越长显示的信息越少,而命令越短,显示的信息就越多。我们从上面这三条命令中可以明显的看到这一点。
额外提醒:如果输入w
命令后,终端出现提示“ column window is too narrow ”,原因是终端窗口太窄了,此时扩大终端窗口重新输入命令即可,或者是输入命令w|cat
,也可以输出结果。
创建一个用户
命令名称:useradd
命令所在路径:/usr/sbin/useradd
执行权限:root
语法:useradd 用户名
功能描述:用以创建一个用户。
这个命令会执行以下操作:
-
生成userID,并在/etc/passwd中添加用户信息;
-
如果使用passwd命令创建密码,则将密码加密保存在/etc/shadow中;
-
为用户建立一个家目录“/home/用户名”
-
将/etc/skel中的文件复制到用户的家目录中
我们进入/etc/skel文件夹,看到全是隐藏文件。
.bash_logout:用户在注销的时候会执行的一些命令;
.bash_profile:用户的一些简介信息;
.bashrc:用户登录进来的时候想执行的一些命令;
.mozilla:火狐的配置信息。
我们可以提前把一些文件放在/etc/skel文件夹中,这样在建立一个新的用户的时候,就会自动把这些文件放在新用户的家目录中。 -
建立一个与用户用户名相同的组,新建用户默认属于这个同名组。
命令useradd
支持以下参数:
-u
手工指定用户的UID号-d
手工指定用户的家目录-c
手工指定用户的说明-g
手工指定用户的主组-G
指定用户的附属组(最多31个,用“,”分割)-s
手工指定用户的登录shell。默认是/bin/bash
也可以通过直接修改/etc/passwd的方式修改,但是不建议这样做。
用户默认值文件
/etc/default/useradd
GRUOP=100
用户默认组HOME=/home
用户家目录INACTIVE=-1
密码过期宽限天数EXPIRE=
密码失效时间SHELL=/bin/bash
默认shellSKEL=/etc/skel
模板目录CREATE_MAIL_SPOOL=yes
是否建立邮箱
/etc/login.defs
PASS_MAX_DAYS 99999
密码有效期PASS_MIN_DAYS 0
密码修改间隔PASS_MIN_LEN 5
密码最小5位PASS_WARN_AGE 7
密码到期警告UID_MIN 500
最小和最大UID范围GID_MAX 60000
ENCRYPT_METHOD SHA512
加密模式
修改用户密码
命令名称:passwd
命令所在路径:/usr/bin/passwd
执行权限:所有用户
语法:
passwd [用户名]
:root用户修改某用户的密码
passwd
:所有用户修改自己的密码
功能描述:设置用户密码。
参数:
-S
查询用户密码的密码状态。仅限root用户使用
-l
暂时锁定用户。仅限root使用
-u
解锁用户。仅限root使用
--stdin
可以通过管道符输出的数据作为用户的密码。
示例:
由于是root用户下,新设置的密码即使不符合复杂度要求,也是可以修改成功的,但是普通用户在修改自己的密码时,必须符合密码复杂度规则,否则无效。
修改用户信息
- 命令
usermod
用来修改已经存在的用户的信息
格式:usermod 参数 username
- 参数:
-l
新用户名
-u
新userID
-d
用户家目录位置
-g
用户所属主组
-G
用户所属附属组
-L
锁定用户使其不能登录
-U
解锁用户
修改用户密码状态
- 命令
chage
用来修改已经存在的用户的信息
格式:chage 参数 username
- 参数:
-l
列出用户的详细密码状态
-d 日期
修改密码最后一次修改的日期(shadow3字段)
-m 天数
两次密码的修改间隔(4字段)
-M 天数
密码有效期(5字段)
-W 天数
密码过期前警告天数(6字段)
-I 天数
密码过期后宽限天数(7字段)
-E 日期
账号失效时间(6字段)
删除用户
- 命令
userdel
用以删除指定用户:
userdel username
删除用户名为username的用户(保留用户的家目录)
userdel -r username
删除用户名为username的用户(同时删除用户的家目录)
查看用户ID
id
命令可以查看用户的id。
格式:id 用户名
示例:
切换用户
su
命令可以切换用户。
格式:su [参数] 用户名
参数:
-
选项只使用“-”代表连带用户的环境变量一起切换。
-c
仅执行一次命令,而不切换用户身份。
示例:
su - root -c "useradd user3"
:不切换成root,但是执行useradd命令添加user3用户
组
几乎所有的操作系统都有组的概念,通过组,我们可以更加方便的归类、管理用户。一般来讲,我们使用部门、职能或地理区域的分类方式来创建使用组。
- 每个组有一个组ID
- 组信息保存在 /etc/group中
- 每个用户拥有一个主组,同时还可以拥有最对31个附属组。
主组:就是初始组,用户一登录就立刻拥有这个用户组的权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为这个用户的初始组。
附属组:也叫附加组,用户可以加入多个其他的附加组,并且拥有这些组的权限,附加组可以有多个。
创建组
命令groupadd
用以创建组
格式:groupadd 组名
参数:-g GID
:指定组ID
修改组
命令groupmod
用以修改组信息
groupadd -n 新的组名 旧的组名
:修改组名
groupadd -g 新的组ID 旧的组ID
: 修改组ID
删除组
命令groupdel
用以删除组
groupdel 组名
:删除组
要想删除一个组,这个组不允许有初始用户的存在。
把用户添加入组或者删除
命令gpasswd
用以把用户添加入组或者从组中删除
格式:groupdel [选项] 组名
参数:
-a 用户名
:把用户加入组
-d 用户名
:把用户从组中删除
综合示例
- 假设某个部门及员工如下:
- 我们为其设计用户、组如下形式:
- 所以我们先创建组:
groupadd training groupadd market groupadd manage
- 再创建用户:
useradd -G training Veeja useradd -G training Bob useradd -G market Alice useradd -G market John useradd -G manage Steve useradd -G manage David
That’s all.
Linux系统版本:CentOS 7 ×86_64 1511
如有纰漏,望不吝指出,不胜感激。