Linux用户和用户组

参考:https://blog.csdn.net/love20165104027/article/details/82386271linux

 

用户相关的文件shell

/etc/passwdbash

/etc/shadow测试

相关的文件编码

/etc/group加密

/etc/gshadowspa

 

/etc/passwd的文件内容.net

root:x:0:0:root:/root:/bin/bash命令行

第一个字段:帐号名称code

第二个字段:密码。(密码信息加密放在/etc/shadow中,所以这里为x)

第三个字段UID。(0表示帐号为系统管理员,1-999表示帐号为系统帐号,1000-6000表示帐号为通常使用者)

第四个字段GID。(用户所在初始群组的ID号)(每一个帐号被建立后,都会被分配到一个初始组中)

第五个字段:用户名全称或帐号意义说明。(可理解为帐号的注释说明)

第六个字段:家目录。(默认为/home/帐号名称)

第七个字段:帐号登陆系统以后取得的shell。(帐号经过该shell跟linux进行交流)

 

/etc/shadow的文件内容:

root:$6$BOzhx0mUbB97BizQ$34NhP3GsdbmnzvLwbRqY.kU0X.qUeAC02RQJSf::0:99999:7:::

第一个字段:帐号名称。

第二个字段:密码。(这里存的是加密后的密码。若密码以 "!" 开头,表示密码失效,帐号被锁,暂时没法登陆。)

1)若是为空,则对应帐号没有密码,登陆时不须要密码。

2)星号("*")表明帐号被锁定。

3)双叹号表示这个密码已通过期了。

4)$6$开头的,代表是用SHA-512加密的。

5)$1$开头的,代表是用MD5加密的。

6)$2$开头的,代表是用Blowfish加密的。

7)$5$开头的,代表是用SHA-256加密的。

虽然这些加密过的密码很难被解出来, 可是『很难』不等于『不会』,因此,这个档案的预设权限是『-rw-------』或者是『-r--------』,亦只有 root 才能够读写就是了!你得随时注意,不要不当心更动了这个档案的权限呢!

因为固定的编码系统产生的密码长度必须一致,所以『当你让这个字段的长度改变后,该密码就会失效(算不出来)』。 不少软件透过这个功能,在此字段前加上 ! 或 * 改变密码字段长度,就会让密码『暂时失效』了。

第三个字段:这个字段记录了『更改密码那一天』的日期。计算 Linux 日期的时间是以 1970 年 1 月 1 日做为 1 而累加的日期,1971 年 1

1 日则为 366 啦。

1970年1月1日 00:00:00 互联网的起始时间

echo $(($(date --date="2008/09/04" +%s)/86400+1)) 14126

这是在2008/09/04那天计算的,距离1970/01/01那天有多少天。

2008/09/04 为你想要计算的日期,86400 为每一天的秒数, %s 为 1970/01/01 以来累积总秒数。 因为 bash 仅支持整数,所以最终须要

加上 1 补齐 1970/01/01 当天。

echo $(($(date --date="2019/10/15" +%s)/86400+1)) 18184

这是在2019/10/15那天计算的,距离1970/01/01那天有多少天。

假如最后一次修改密码是在2019/10/15这天,那么第三个字段这里记录的就是18184,表示天数。

第四个字段:密码不可需改的天数。假如你最后一次修改密码是在2019/10/15这天,该字段设置的是7,那么2019/10/15到2019/10/22

这段时间以内,你不能修改密码,也根本没法修改。

第五个字段:密码须要再次修改的天数。假如你最后一次修改密码是在2019/10/15,该字段设置的是30,那么在2019/11/15以前,你须要再

次修改你的密码。过了2019/11/15日,你的密码就过时了。(2019/11/15就是过时日)

常常变动密码是个好习惯!

第六个字段:在密码过时日的前几天开始发出警告。在密码过时前,提早多少天提醒用户。假如你设置的是7,那么系统会从2019/11/08日开

是发出警告,提醒你该修改密码了。

第七个字段:密码过时以后的帐号宽限天数。假如该字段设置的是7,那么从过时日2019/11/15日开始,到2019/11/22日这段时间以内,你

依然能够用你的旧密码登陆,但只是能登陆而已。进入bash后,系统会强制让你修改密码,不然不予使用。

若是在这七天内,你依然不听劝告,坚持不改密码,那么对不起,7天以后,你的密码就失效了(等同于做废)。

在这7天内,你能够不登陆,但我会保留你密码的有效性。7天以内,你要是想登陆,我能够准许你登陆,可是有一条,登陆后,必须先改密码,

若是不改,你就没法使用系统。若是你想拖,7天以后,你的密码就做废了。

第八个字段:帐号失效日期。这个字段具备专权性,它能让你的帐号失效或者不失效。【帐号的失效和密码的失效不是同样的概念】

2019/11/10对应18179

2019/11/15对应18184  过时日

2019/11/20对应18189

若是该字段设置18179,表示说你的帐号在2019/11/10这天会做废。虽然你的密码尚未过时,但对不起,我是王,得听个人。

若是该字段设置18189,表示说你的帐号在2019/11/20这天会做废。虽然给了你7天的缓冲期,但对不起,在我面前,它不起做用。

第九个字段:保留字段。

 

经常使用命令:

useradd [-u UID] [-g 初始群組] [-G 次要群組] [-m/M] [-c 帐号意义说明] [-d 家目绝对路径] [-s shell] [-r] \

[-e 帐号失效日期,格式为YYYY-MM-DD] [-f 密码是否会失效,0马上失效,-1永不失效] 帐号名称

-M表示强制不创建家目录,-m表示强制创建家目录,-r表示建立系统帐号

 

-b选项:

# 建立帐号zhangsan,家目录建立到/opt/目录下,也就是/opt/zhangsan

useradd -b /opt zhangsan

 

-c选项:

# 添加帐号的同时,添加注释

useradd -b /opt -c "测试" zhangsan

cat /etc/passwd

zhangsan:x:1002:1002:测试:/opt/zhangsan:/bin/bash

 

-d选项:

# 明确指定家目录

useradd -c "测试-d选项" -d /home/lisi wangwu

注意:-d不能和-b一块儿使用。咱们建立的帐号是wangwu,但指定的家目录倒是/home/lisi。也就是说,家目录的名字不必定要和帐号名同样。

 

 

# 没有使用-b和-d,则用户的家目录建立在/home/wangwu 

useradd -c "测试-d选项" wangwu

 

-D选项:

修改默认值。

 

-e选项:

帐号失效日期。

useradd -e "2019-12-12" yangsilang

若是没有用-e,就使用/etc/default/useradd中的EXPIRE变量。要是没有EXPIRE变量,就使用空字符串。

 

-f选项:

密码过时后,再过多少天,帐户就会永久禁用。

0表示当密码过时后,帐户当即禁用。

-1表示不使用这个特性。也就是说,密码过时后,保留该帐号直到永久。

其余的正数,则表示具体的天数。好比5表示密码过时后,再过5天,禁用该帐号。

若是没有使用-f,则使用/etc/default/useradd中的INACTIVE,若是没有INACTIVE,则使用默认的-1.

 

-g选项:

组名或组ID。组名必须存在。

若是没有使用-g,则会参考/etc/login.defs中的USERGROUPS_ENAB变量。若是值为yes,表示建立用户的时候,同时建立组。组名就是用户名。等同于在命令行上添加选项

-U。

若是值为no,(等同于添加-N选项)则会参考/etc/default/useradd中的GROUP变量,若是没有GROUP,则使用100做为GID。

 

-G选项:

将用户添加到多个组中。

useradd -G group1,group2,group3 zhangsan

-G后跟的组,要参考-g选项的标准。不符合,就报错。默认是将用户放到初始组。

 

通常来讲,咱们建立用户帐号的时候只要指定帐号名称便可:useradd 帐号名称,这样帐号的其余信息都会使用系统为咱们设置的默认值。

[root@localhost ~]# useradd -D   # 默认值
GROUP=100                        # 默认组的ID
HOME=/home                       # 默认家目录所在目录
INACTIVE=-1                      # 密码失效日
EXPIRE=                          # 帐号失效日
SHELL=/bin/bash                  # 默认shell
SKEL=/etc/skel                   # 使用者家目录的内容资料参考目录
CREATE_MAIL_SPOOL=yes            # 是否创建邮件信箱,/var/spool/mail/帐号名

# 这些默认参数实际上在文件/etc/default/useradd中。

 

useradd命令会为咱们作如下这些事情:

<1> 在/etc/passwd创建一行与帐号相关的资料。

<2> 在/etc/shadow创建一行与此帐号密码相关的数据,可是还没有有密码。

<3> 在/etc/group创建一行此帐号的初始群组信息,群组名称与帐号名称一致。

<4> 在/etc/gshadow创建一行此帐号初始群组的密码信息,可是没有密码。

<5> 在/home中创建此帐号家目录,目录名称与帐号名称一致,权限为700。

 

初始群组的两种机制:公共群组机制(SuSE使用)和私有群组机制(RHEL和CENTOS)。

对于公共群组机制:建立的新帐号都会分配给GID为100的群组(组名为users),也就是说多个帐号都在users组中。使用了GROUP=100。

对于私有群组机制:每一个帐号都有各自的群组和家目录,你们并不共用。没有使用GROUP=100。

 

/etc/default/useradd这个文件只是设置了一些帐号的基本信息默认值,更多参数默认值可在/etc/login.defs文件中查看。

总结起来,使用useradd命令建立帐号时会参考的文件有:/etc/default/useradd、/etc/login.defs、/etc/skel/*。

 

usermod

usermod -L  # 冻结帐号(在密码前加 "!")

usermod -U  # 解冻帐号(取消密码前的 "!")

 

userdel username

userdel -r username  # 递归删除(删除家目录)

 

passwd   # 修改密码,修改密码属性,冻结密码,解冻密码,查看密码信息

chage    # 也能修改密码信息

chage [-d 最近修改密码日期,格式为YYYY-MM-DD] [-m 密码不可修改的天数] [-M 密码须要再次修改的天数] \

[-W 在密码过时日前几天开始发出警告] [-I 密码过时以后的帐号失效宽限天数] [-E 帐号失效日期,格式为YYYY-MM-DD]

[root@localhost ~]# chage -l yangling

Last password change                   : never

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

 

# id yangling

# finger        # 查询当前登陆系统的全部用户信息

# finger yangling   # 查询某个用户的属性

# chfn  # 修改finger中的展现信息

[root@localhost ~]# chsh -l   # 查看可用的shell,内容来源于/etc/shells

/bin/sh

/bin/bash

/sbin/nologin

/usr/bin/sh

/usr/bin/bash

/usr/sbin/nologin

 

cat /etc/group

yangling:x:1000:yangling

群组名称

群组密码

GID

群组中的成员

 

cat /etc/gshadow

yangling:!!::yangling

群组名称

群组密码:一般给群组管理员使用,少有设置。

群组管理员的帐号。

组中的成员

 

建立组

groupadd [-g gid] 组名

建立系统组

groupadd -r -g gid 组名

 

修改组名(原来的名字是A,如今改成B)

groupmod [-g gid] [-n 新组名] 旧组名

不要随意修改GID

 

删除组(若是组内有用户,则没法删除)

groupdel 组名

 

初始群组与有效群组

初始群组:用户登入系统以后就获取到并拥有其相关权限的群组。也就是/etc/passwd文件第四个栏位上的GID对应的群组。

用户能够加入多个群组。可是该用户在建立新文件或新目录的时候,新文件或新目录的群组只能是用户当前的有效群组。

 

有效群组:可使用命令“groups”查看当前用户加入的全部群组,列表中第一个群组便是当前有效群组,可使用命令“newgrp 群组名称”

切换有效群组,可是只能在当前用户加入的全部群组中切换。切换有效群组以后会进入一个新的shell环境,可使用“exit”命令来退出,回到原来有效群组和shell环境。

 

用户加入群组

方法1:由root将用户加入到组中。

usermod -a -G 'groupname' username

username加入到groupname中。

 

方法2:由群组管理员来添加用户到组中。

1)用root指定群组的管理员。

修改群组密码:gpasswd groupname

设置群组管理员、用户成员:gpasswd [-A 群组管理员帐号列表] [-M 用户成员帐号列表] 群组名称

移除群组名称:gpasswd -r 群组名称

使群组密码失效:gpasswd -R 群组名称

 

gpasswd -a username groupname

username加入到groupname中

 

su 帐号名                # 以non-login shell方式切换,不切换环境变量

su -                    # 以login shell方式切换,切换环境变量

su -l                   # 以login shell方式切换,切换环境变量

su - -c "指令" 帐号名  # 利用新身份执行一条指令,执行后身份恢复为当前用户,不指定帐号时,表示切换为root身份。

 

使用su命令切换身份是须要输入新切换帐号的密码的(只有root不须要),也就是说,若要使用su切换身份,就必需要知道新切换帐号的密码

才行。另外一个命令sudo也能够切换身份执行命令操做,并且只须要输入当前帐号密码便可,无需知道新切换帐号的密码,只是切换身份执行命令

以后会自动恢复到原来帐号身份。

 

sudo只是切换身份执行一个命令而已,要知道本身的密码

su是切换身份,要知道新帐号的密码

 

sudo -u 帐号名 指令

-u后的帐号执行指令

没有-u时,表示以root身份执行

 

/etc/sudoers

哪些用户或群组可在哪些主机登入系统时切换到哪些帐号执行哪些指令,还能够设置执行sudo指令时无需输入密码。

相关文章
相关标签/搜索