目录:
- 解释linux 的安全模型
- 用户账号和组账号的作用
- 详解/etc/passwd 、/etc/shadow、/etc/group、/etc/gshadow中的文件信息
- 管理用户和组的命令
1、linux的安全模型
我个人的理解是授权用户去登录操作,未授权的用户进入系统。通过网上的查询,如下:
首先,作为一个安全系统的重要功能之一就是只允许那些授权的用户登录该系统,而阻止那些未经授权的用户登录(进入)这一系统。其次,登录该系统的用户只能访问(操作)那些他有权访问(操作)的文件和资源。那么在 Linux 操作系统中又是怎样做到这些的呢?linux 操作系统采用了如下的措施:
(1)用户登录系统时必须提供用户名和密码(用户是由 root 用户创建的,最初的密码也是 root 用户设定的)。
(2)使用用户和群组来控制使用者访问文件和其他资源的权限。
(3)系统上的每一个文件都一定属于一个用户(一般该用户就是文件的创建者)并与一个群组相关。
(4)每一个进程(处理程序)都会与一个用户和群组相关联。可以通过在所有的文件和资源上设定权限来只允许该文件的所有者(创建者)或者某个群组的成员访问它们。
虽然主要由系统管理员(root)用来维护一个系统的安全,但是普通用户在保证系统安全方面也扮演着重要的角色。
在linux中实行3A认证 (authentication、authorization、audition)
2、用户和组
在linux中通常通过设置用户和组进行管理的,下面我们详解这些信息;
(1)用户
用户相当于一个token(identity),相当于古时候进入城门需要的一种通行证一样; linux中用户分为普通用户和系统用户: 系统用户:对守护进程获取资源进行权限的分配 普通用户:交互式登录 在CentOS6 中 系统用户 1-499 普通用户 500+ 在CentOS7 中 系统用户 1-999 普通用户 1000+
与用户有关的配置文件/etc/passwd /etc/shadow,下面详细说明下配置文件中的内容
- @/etc/passwd 配置文件
[root@centos7 ~]#head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash 下面分隔符解释
- name #用户名
- password #用户密码,通常“x”占位,密码存放到/etc/shadow中
- UID #用户的ID号
- GID #用户的组ID号
- GECOS #用户的描述信息 ;可以使用命令chfn
- directory #用户的家目录
- shell #用户使用shell,默认/etc/shell
示例:
chfn命令
[root@centos7 ~]#chfn tom #修改用户的注释信息
Changing finger information for tom.
Name []:
Office []: tom
Office Phone []: 10086
Home Phone []:
Finger information changed.finger命令命令
[root@centos7 ~]#finger tom #列出用户的详细信息
Login: tom Name: tom
Directory: /home/tom Shell: /bin/bash
Office: 10086
Never logged in.
No mail.
No Plan.chsh 修改用户的shell
[root@centos7 ~]#chsh -s /bin/csh tom
Changing shell for tom.- /etc/shadow配置文件
[root@centos7 ~]#head -1 /etc/shadow
root: 6 <script type="math/tex" id="MathJax-Element-836">6</script>A3sufQ.5JJ1VCPzb$2l.qRPK78svy18YNi/lYW.O88rQ0cuewdxHHaNjClyoPFZFz2RkxpGZ2K17bp52z3hhF3rLfy5Xr1bQRZqXGa.::0:99999:7:::
- login name # 用户名
- encrypted password #密码
- date of last password change #从1970年1月1日到修改密码的时间
- minimum password age #最短有效期 0表示随时可被修改
- maximum password age #最长有效期 99999表示永不过期
- password warning period #密码过期前几天提醒用户 警告时间
- password inactivity period #密码过期锁定的日期
- account expiration date #账户有效期
- reserved field #保留字段
- @/etc/passwd 配置文件
(2)组
linux组分为管理员组和普通组:组类别1: 管理员 普通用户组:系统用户组 登录用户组 组标识:GroupID (GID) 管理用户组: 普通用户组:1-65535 系统用户组:1-999(centos7) 1-499(centos6) 登陆用户组:500-60000(centos6) 1000-60000(centos7) 名称解析:groupname <-->gid 解析库:/etc/group 组类别2: 用户的基本组 用户的附加组 组类别3: 用户的私有组:组名同用户名:且只包含一个用户 公共组:组内包含了多个用户
与组有关的配置文件 /etc/gshadow /etc/group
/etc/group中
[root@centos7 ~]#head -1 /etc/group
root:x:0:gentoo- group_name the name of the group. #用户组名
- password the (encrypted) group password. If this field is empty,no password is needed. #组命令,存放在/etc/gshadow
- GID the numeric group ID. #组ID号
- user_list a list of the usernames that are members of this group, separated by commas. #以当前为附加组的用户列表(分隔符为逗号)
/etc/gshadow中
[root@centos7 ~]#head -1 /etc/gshadow
root:::gentoo- group name #组名
- encrypted password #组密码
- administrators #管理用户
- members #以当前组为附加组的用户列表
注意:修改/etc/gshadow和/etc/group用户列表时,必须一致,但是修改完成以后不会立即生效,必须重新登录才能有效。
3、管理用户和组的命令
(1)useradd命令 用户创建
usage:
useradd [options] LOGIN
useradd -D
useradd -D [options]-b 家目录的上级目录
-u UID 指定创建用户的UID
-g GID 指定创建用户的GID
-G GROUP1,GROUP2… 为用户指明附加组,组必须事先存在
-c “COMMENT” 用户的注释信息 等同于chfn USERNAME
-d HOME_DIR:以指定的路径为家目录 如果家目录为空时,/etc/skel则作为模板
-s SHELL 指明用户的默认shell程序 等同于chsh
-N 不创建私用组为主组,使用users组做主组
-r 创建系统用户
-D, –defaults See below, the subsection “Changing the default values”.示例
[root@centos7 ~]#useradd -u 1034 -c “nihao” -d /app/ -s /bin/csh xiaoming #创建用户
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
[root@centos7 ~]#useradd -r qiaodan #创建系统用户(2)usermod 修改用户
-G GROUP1,GROUP2…新附加组 常常与-a 选项一起使用 追加新的附加组
-s SHELL 修改shell
-c “COMMENT” 修改注释信息 chfn 等同
-d HOME 修改家目录,新家目录不会自动创建,若要创建新家目录并移动原家目录数据,与-m选项一同使用;
-l login_name 修改用户名
-L 所用用户,在/etc/shadow密码那部分之前会加!,此时用户不能直接登录,使用su命令切换可以
-e
-U 解锁
-e YYYY-MM-DD指明用户过期日期
-f INACTIVE 设定非活动期限(3)userdel 删除
-r 删除用户家目录
-f 强制删除(4)id 查看用户相关的ID信息
-u 显示用户的UID
-g 显示用户的GID
-G 显示用户所属的组ID
-n 显示名称 需配合ugG使用
示例
[root@centos7 ~]#id -un tom
tom
[root@centos7 ~]#id -gn tom
tom
[root@centos7 ~]#id -Gn tom
tom(5)passwd 设置密码
-l 锁定指定用户 在配置文件密码前加!!
-u 解锁指定用户
-e 强制用户下次登录前修改密码
-n mindays #修改最短有效期
-x maxdays #设置最长有效期
-w warnday #设置警告日期
-i inactivedays #设置非活动期限
–stdin 从标准输入用户密码示例:
[root@centos7 ~]#echo tom |passwd –stdin tom
Changing password for user tom.
passwd: all authentication tokens updated successfully.
[root@centos7 ~]#passwd -e tom 指定tom用户下次登录前修改密码
Expiring password for user tom.
passwd: Success(6)chage 修改用户密码策略
-d YYYY-MM-DD 设置用户离1970年1月1日的时间
[root@centos7 ~]#chage -d 0 tom #下次登录时必须修改密码
(7) groupadd 添加组
-g GID 指定GID 创建组
-r 创建系统组[root@centos7 ~]#groupadd -g 1345 mother
[root@centos7 ~]#groupadd -r test(8) groupmod 修改组
-n group_name 修改组名
-g GID 修改组ID[root@centos7 ~]#groupmod -n father mother
[root@centos7 ~]#groupmod -g 1555 father(9) groupdel 删除组
(10)gpasswd 修改组密码
-a user 将user添加至指定组中
-d user 从指定组中移除用户user
-A user1,user2 设置有管理权限的用户列表[root@centos7 ~]#gpasswd -a laowang testgroup #添加用户到testgroup组中
Adding user laowang to group testgroup
[root@centos7 ~]#gpasswd -d laowang testgroup #从testgroup组中删除laowang用户
Removing user laowang from group testgroup
[root@centos7 ~]#gpasswd -A tom testgroup #添加tom为testgroup管理(11)groupmems 更改和查看组成员
-g 更改为指定组
-a –add username 指定用户加入组
-d –delete username 从组中删除用户
-p –purge 从组中清除所有成员
-l –list 显示组成员列表[root@centos7 ~]#groupmems -a laowang -g aa #添加用户到aa组中
[root@centos7 ~]#groupmems -p -g aa #清空aa组中所有用户
[root@centos7 ~]#groupmems -l -g aa #列出aa组中的所有用户(12)newgrp 临时切换主组 如果用户不属于此组,则需要租密码;
(13)su 切换用户
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录;使用用户访问;
su-UserName:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换;
4、其他
1、 如果某用户的家目录删除了怎么恢复? cp -a /etc/skel/.[^.] /home/USERNAME 2、如何迁移用户? 直接在老系统中 复制/etc/passwd内容到 新系统的/etc/passwd中 默认的信息都存放在/etc/login.defs文件中。