目录
用户一般来说是指使用计算机的人,计算机对针使用其的每一个人给了一个特定的名称,用户就可以使用这些名称来登录使用计算机,除了人之外,一些系统服务也需要含有部分特权的用户账户运行;因此出于安全考虑,用户管理应运而生,它加以明确限制各个用户账户的权限,
root在计算机中用拥有至高特权,所以一般只作管理用,非特权用户可以通过SU或SUDO程序来临时获得特权
GNU/Linux 通过用户和用户组实现访问控制----包括对文件访问、设备使用的控
个人可以拥有很多账户,只不是彼此名称不同,比如root名称已经占用就不能再用了,此外,任意用户可能从属某个用户组,此用户可以加入某些已经存在的组来获得该组的特权
GNU/Linux 系统中的每一个文件都有属一个用户(属主)和一个用户组(属组)。
另外,还有三种类型的访问权限:
- 读(read)、
- 写(write)、
- 运行(execute)。
我们可以针对文件的属主、属组、而设置相应的访问权限。再次,我们可以通过 ls | stat命令查询文件属主、属组和权限
1.用户账号
(1)Linux用户三种角色
- 超级用户: root 拥有对系统的最高的管理权限 ID=0
- 普通用户:系统用户:UID:1-999(centos7版本) 1-499(centos6版本)
- 本地用户:UID:1000+ 500+
- UID:即每个用户的身份标示,类似于每个人的身份证号码.
- 虚拟用户:伪用户 一般不会用来登录系统的,它主要是用于维持某个服务的正常运行.如:ftp,apache
(2)下图是用户和组的关系
- 一对一:一个用户可以存在一个组中;
- 一对多:一个用户可以存在多个组中
- 多对一:多个用户可以存在一个组中;
- 多对多:多个用户可以存在多个组中
(3)配置文件
|
名 称 |
帐号信息 |
说 明 |
|
用户配置文件 |
/etc/passwd |
记录了每个用户的一些基本属性,并且对所有用户可读,每一行记录对应一个用户,每行记录通过冒号进行分隔 |
|
用户组文件 |
/etc/group |
用户组的所有信息存放地儿,并且组名不能重复 |
|
用户对应的密码信息 |
/etc/shadow |
因为passwd文件对所有用户是可读的,为安全起见把密码从passwd中分离出来放入这个单独的文件,该文件只有root用户拥有读权限,从而保证密码安全性 |
2.用户管理
(1)创建用户
命令:useradd
useradd -d -u “UID” -g "初始组" -G "附加组" -s "登陆的shell” 用户
- -d: -d 用户主目录路径, 可以指定用户家目录
- -M: 不创建用户的主目录
- -g:设置用户初始组的名称或数字ID;该组必须是存在的;如果没有设置该选项,useradd会根据/etc/login.defs文件中的USERGROUPS_ENAB环境变量进行设置。默认USERGROUPS_ENAB yes 会用和用户名相同的名字创建群组,GID 等于 UID.
- -G:用户要加入的附加组列表;使用逗号分隔多个组,不要添加空格;如果不设置,用户仅仅加入初始组。(一个用户只允许有一个主组,可以有多个附属组)
- -s:用户默认登录shell的路径;启动过程结束后,默认启动的登录shell在此处设定;请确保使用的shell已经安装,默认 是 Bash。有时候需要禁止某些用户执行登录动作,例如用来执行系统服务的用户。将shell设置成 /sbin/nologin 就可以禁止用户登录。
1)添加登录用户
说明:此命令会自动创建harry组,并成为harry用户的默认主组,同时默认的登录shell是bash
用户帐户的全部信息被保存在/etc/passwd文件。这个文件以如下格式保存了每一个系统帐户的所有信息 (字段以“:”分割)
- harry:用户名
- x:密码占位符
- 1001:用户的UID,它都是用数字来表示的
- 1001:用户所属组的GID,它都是用数字来表示的
- 用户描述信息:对用户的功能或其它来进行一个简要的描述
- /home/harry:用户主目录(shell提示符中“~”代表的那个)
- /bin/bash:用户登录系统后使用的shell
- 查看系统中支持哪些shell
2)指定用户UID(-u参数)
查看创建的用户的宿主目录下的文件,有一些隐藏的文件
3)指定用户主目录(-d参数)
4)指定用户的主组(-g参数)
id 用户名:查看用户的uid,gid,组
- uid:用户id
- gid:主组id
- 组:用户所属的组,上述示例只属于一个组,所以gid和此项相同,但这里也可能有多个组,而主组只有一个
5)指定用户的附属组(-G参数)
我们也可以把这个附属组称为补充组,用户可以有0个或多个附加组的成员
如果一个组有多个成员,我们是可以在/etc/group文件中最后一个字段看到的
......
6)创建用户的另外一个命令
adduser是useradd的软链接
(2)删除用户
命令: userdel (选项)用户名
选项:-r 删除的时候,会同时删除用户的家目录和/var/mail下的目录,如果不加-r不会删除家目录
可以发现home目录下已经没有了boboyu2和boboyu3
(3)密码文件
在/etc/shadow文件下
格式如下:
|
name |
登录名称,这个必须是系统中的有效账户名 |
|
password |
已加密密码,分为三个部分,第一部分是表示使用哪种哈希算法;第二部分是用于加密哈希的salt;第三部分是已加密的哈希 哈希算法:$1表示MD5 ; $6 表示SHA-512 ; $5 SHA-256 查看帮助说明: man 5 passwd man 5 shadow man 5 group man 3 crypt |
|
lastchange |
最近一次更改密码的日期,以距离1970/1/1的天数表示 |
|
min-age |
不能更改密码的最少天数,最近更改过后几天才可以更改;如果为0表示“最短期限要求” |
|
maxage |
密码过期时间,必须更改密码前的最多天数 |
|
warning |
密码即将到期的警告期,以天数表示,0表示“不提供警告” |
|
inactive |
宽限天数,密码到期后 |
|
expire |
账号过期时间,以距离1970/1/1的天数计算 (千年虫) |
|
blank |
预留字段 |
1)为用户添加密码
下述方式也可以:
思考:
1.两个用户的密码一样? 那么shadow中加密的hash值一样吗?
不一样,因为它们的salt不一样
2.如果把两段加密的内容互换,还可以登录吗?
可以的
3.salt什么时候指定的?
salt是算法中就指定好的,在执行passwd的时候会自动生成一个随机值
2)修改密码信息
可以在/etc/login.defs目录下修改
通过如下方式只查看该文件中不是以#开头或空行的行:
命令:chage
-m:密码可更改的最小天数。为0时代表任何时候都可以更改密码
-M:密码保持有效的最大天数
-W:用户密码到期前,提前收到警告信息的天数
-E:帐号到期的日期。过了这天,此帐号将不可用
-d:上一次更改的日期,为0表示强制在下次登录时更新密码
(4)修改用户的信息
语法:usermod 【参数】用户名
常用参数:
- -u UID
- -d 宿主目录
- -g 起始组 #只能有一个
- -G 附加组 #可以有多个
- -s 登录shell
1)修改uid
2)修改shell
3)更改用户主目录
-m 会自动创建新目录并且移到内容到新目录里面,即当要创建的目录不存在时可以自动创建,对于不存在的目录不加-m,就不会更改家目录成功
4)添加说明信息
总结:如果你记不住命令, 那么直接改vim /etc/passwd 一样的。
Linux命令说明:
命令 参数中间可以加可选参数,而可选参数,有的又会有参数,这时可选参数就要紧跟它自己的参数,整个有嵌套的意味