用户标识符UID和GID
我们登陆linux系统时,输入的是我们的账号,但是由于计算机只认识0和1,所以linux不会直接认识账号名称,仅会认识我们的ID.每个登陆的用户至少会获得两个ID,一个是用户ID--UID,一个是用户组ID--GID,文件就是通过UID和GID来判断文件的所有者和用户组。当我们要显示文件的属性的时候,OS会依据/etc/passed和/etc/group的内容,找到UID/GID对应的账号和组名再显示出来.
当登陆linuxOS时,通过login接口输入账号和密码,系统会调用/etc/passwd和/etc/group中的账号,并且将对应的UID和GID读出来,同时,账号的home文件夹和shell设置也一起读出;然后来核对密码表,linuxOS会进入到/etc/shadow中找出对应的UID,然后核对密码是否相符;如果上述都正确,就可以登录系统,进入shell控管阶段了.
与UID和GID相关的配置文件有四个,分别是
/etc/passed:存放用户及其属性信息(名称,UID,主组ID等)
/etc/shadow:存放用户密码及其相关属性
/etc/group:存放组及其属性信息
/etc/gshadow:组密码及其属性信息
/etc/passwd文件结构
存在几行就表示系统中有几个账号,但是不能随便删除,因为有很多账号是系统运行所必须的,这些是系统账号.
/etc/passwd中存放的是用户的相关信息,结构如下
1 2 3 4 5 6 7
UserName: x :UID:GID:GECOS:directory:shell
其中x为原密码口令位置,由于/etc/passwd所有程序可读,存在安全隐患,所以将密码存放到/etc/shadow中,这里只能看到一个x
UID,这个是用户标识符,这个id的取值是有一定范围的,0为系统管理员使用,切仅有这一个,centos6中1~499是系统账号的id范围,500~是普通用户的id;centos7中1~999是系统账号id,并且是一般是不能登录的,1000~是普通用户的账号id,可以登录
GECOS为用户的描述信息,用户全名或者注释
directory为用户的家目录
shell为用户的shell类型
/etc/shadow文件结构
1:2:3:4:5:6:7:8:9
1 user name
2 encrypted password 加密后的密码 这个密码是经过加密后显示的,并且经过加密后显示的密文长度对应的编码系统的长度是一定的,所以改变密码的长度后,会使密码暂时失效
3 date of last password change 最经更新密码的时间,这个时间是从1970年1月1日开始计算的,单位是 S
4 minimum password age 密码不可被改动的天数
5 maxmum password age 密码需要重新更改的天数
6 password warning period 密码需要更改期限前的警告天数
7 password inactive period 密码过期后的账号宽限天数(密码失效日)
8 account expiration date 上号失效日期
9 保留
一般用户的密码,可以用root帐号直接更改,重新设定
查询加密算法authconfig --test | grep hashing
有效与初始用户组:groups,newgrp
/etc/group文件结构
group_name:password:GID:user_list
增加user_list 只需要在后边增加 ,user 即可
password一般不需要设置,同样密码也移动到/etc/gshadow中去了,这里也显示x
user_list 此用户组支持的账号名称
假如我们同时加入多个用户组,那么我们在操作的时候,是以哪个用户组为准呢?
有效用户组(effective group)和初始用户组(initial group)
切换用户或以其他用户身份执行命令: su
su [options...] [-] [[user]args...]
切换用户的方式
su uesrname 非登录式切换,不会读取用户的配置文件
su - username 登录式切换,会读取用户的配置文件,完全切换
groups:有效与支持用户组的查看
执行命令,第一个显示的就是有效用户组
newgrp:有效用户组的切换
想要切换的用户组必须已经支持的用户组
/etc/gshadow文件结构
用户组名:密码列:用户组管理员的账号:该用户组的所属账号
密码列,开头为!表示没有合法的密码,所以无用户组管理员
账号管理
新增与删除用户:useradd,相关配置文件,passwd,usermod,userdel
useradd - 创建一个新用户或更新默认新用户信息
useradd [选项] 登录
useradd -D
useradd -D [选项]
选项
-u UID: [UID_MIN, UID_MAX]定义在/etc/login.defs
-o 配合-u 选项,不检查UID的唯一性
-g GID:指明用户所属基本组,可为组名,也可以GID
-c "COMMENT":用户的注释信息
-d HOME_DIR:以指定的路径(不存在)为家目录
-s SHELL: 指明用户的默认shell程序可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,...]:为用户指明附加组,组必须事先存在
-N 不创建私用组做主组,使用users组做主组
-r: 创建系统用户CentOS 6: ID<500,CentOS 7: ID<1000
-M:强制,不要创建用户主文件夹(系统账号默认值)
-m:强制,要创建用户主文件夹(一般账号默认)
-f:后面接shadow的第七字段选项,制定密码是否会失效。0为立刻失效,-1为永远不会失效
在/etc/passwd里面创建一行与账号相关的数据,包括UID/GID/主文件夹等
在/etc/shadow里将账号的密码相关参数填入,但是尚未有密码
在/etc/group中加入一个与账号名称一模一样的组名
在/home下面创建一个与账号名称同名的的目录作为用户主文件夹
notice:由于系统账号主要是用来进行运行系统所需的服务的权限设置,所以系统账号默认都不会主动创建主文件夹的.
练习:
创建用户gentoo,附加组为bin和root,默认shell为/bin/csh,注释信息为"Gentoo Distribution"
useradd -G bin,root -s /bin/csh -c "Gentoo Distribution" gentoo
在我们创建用户的时候,系统为我们规定好了默认的属性和参考文件了,useradd -D 可以查看,
这个数据其实是由/etc/default/useradd文件调用出来的,可以用文本编辑器去修改需要的内容.
从上面可以看到系统默认的用户初始GID=100,但是centos上面默认的用户组为与账号相同的用户组.
passwd update user's authentication tokens更新用户的×××令牌
用法passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]
选项
-l:锁定指定用户
-u:解锁指定用户
-S:列出密码相关参数,亦即 shadow 文件内的大部分信息。
-e:强制用户下次登录修改密码
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-i inactivedays:非活动期限;
--stdin:从标准输入接收用户密码;
echo "PASSWORD" | passwd--stdinUSERNAME
与用户相关的账号和密码文件/etc/passwd /etc/shadow
chage
用法 chage [-ldEImMW] username
选项:
-l 列出账号的详细密码参数
-d Last_day
-E --expiredate 过期时间
-I --inactive
-m --mindays
-M --maxdays
-W --warndays
下次登录强制重设密码:chage -d 0 username
chfn change your finger information
-f --full-name
-o --office addr NUM.
-p --office-phone
-h --home-phone
-u --help
-v --version
当我们新建用户,但是数据设置有错误时,可以使用命令usermod 进行修改
usermod
usermod [options]... username
选项:
-u UID ,new UID
-g GID ,new GID
-G,group1[,group2]...新附加组,原来的被覆盖;若要保留原来的,需要配合-a(append)使用
-s shell new shell
-c "COMMENT",新的注释信息
-d,home_dir,new home_dir路径不会自动创建,原目录不会移动;如果要创建新目录,并且移动数据,要配合 -m 选项使用
-l login_name,new name
-L lock 锁定用户,在/etc/shadow密码项中增加!
-u unlock 解锁
-e --expiredate 用户禁用日期 格式YY-MM-DD
-f inactive 口令过期,用户被彻底禁用之前的天数
-m --move-home 将用户主目录移动到新位置 配合-d使用
-o --non-unique 使用-u时,可以将用户的UID改为非唯一值
-p --passwd
-Z --selinux 用户登录的linux账户
id
print real and effective user and group IDs
id [options]... user
-a ,ignore for compatibility(兼容性) with other versions忽略与其他版本的兼容性
-Z context 安全信息
-g group print only the effective group ID
-G groups print all groups IDs
-n --name print a name instead of a number
-r --real print the real ID instead of the effective ID
-u user print only the effective user ID
相关的命令还有 chage chfn