Linux用户组及权限管理
用户和组
<span>Linux</span>是一个多用户的操作系统,引入用户,可以更加方便管理Linux服务器系统默认需要以一个用户的身份登入,而且在系统上启动进程也需要以一个用户身份器运行,用户可以限制某些进程对特定资源的权限控制
Linux用户及组
Linux操作系统对多用户的管理,是非常繁琐的,所以用组的概念来管理用户就变得简单,每个用户可以在一个独立的组,每个组也可以有零个用户或者多个用户。
Linux系统用户是根据用户ID来识别的,默认ID长度为32位,从默认ID编号从0开始,但是为了和老式系统兼容,用户ID限制在60000以下,Linux用户分总共分为三种,分别如下
- 超级用户:
root,ID为0 - 系统用户:
ID从1到499 - 普通用户:
ID为500以上
Linux系统中的每个文件或者文件夹,都有一个所属用户及所属组使用
ID命令可以显示当前用户的信息,使用passwd命令可以修改当前用户密码。Linux操作系统用户的特点如下
- 每个用户拥有一个
UserID,操作系统实际读取的是UID,而非用户名; - 每个用户属于一个主组,属于一个或多个附属组,一个用户最多有
31个附属组; - 每个组拥有一个
GroupID; - 每个进程以一个用户身份运行,该用户可对进程拥有资源控制权限;
- 每个可登陆用户拥有一个指定的
Shell环境
Linux用户管理
Linux用户在操作系统可以进行日常管理和维护,涉及到的相关配置文件如下
/etc/passwd:保存用户信息/etc/shadow:保存用户密码(以加密形式保存)/etc/group:保存组信息/etc/login.defs:用户属性限制,密码过期时间,密码最大长度等限制/etc/default/useradd:显示或更改默认的useradd配置文件
创建新用户
1 | useradd usertest # 创建用户usertest |
创建新用户,可以使用命令
useradd,执行命令即可创建新用户同时会创建一个同名的组,默认该用户属于该用户组
创建用户,会根据如下步骤进行操作
- 在
/etc/passwd文件中添加用户信息 - 如使用
passwd命令创建密码,密码会被加密保存在/etc/shdaow中 - 为用户创建家目录:
/home/usertest,创建目录操作应操作系统而异 - 将
/etc/skel中的.bash开头的文件复制至用户家目录 - 创建与用户名相同的组,该用户默认属于这个同名组,组信息保存在
/etc/group配置文件中
其他命令可选参数如下所示
1 2 3 | -d # 指定新用户的主目录 -G # 指定新用户的组列表 -s # 新用户所使用的shell环境 |
1 2 | useradd usertest -s /bin/bash -d /home/usertest # 创建新用户usertest,指定shell环境为bash,主目录在/home/usertest |
删除用户
1 2 3 | userdel # 保留用户的家目录 userdel –r usertest # 删除用户及用户家目录,用户login系统无法删除 userdel –rf usertest # 强制删除用户及该用户家目录,不论是否login系统 |
当一个用户创建之后,我们可以通过
usermod命令来修改用户及组的属性
Linux下命令选项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 选项:
-c, --comment 注释 GECOS 字段的新值
-d, --home HOME_DIR 用户的新主目录
-e, --expiredate EXPIRE_DATE 设定帐户过期的日期为 EXPIRE_DATE
-f, --inactive INACTIVE 过期 INACTIVE 天数后,设定密码为失效状态
-g, --gid GROUP 强制使用 GROUP 为新主组
-G, --groups GROUPS 新的附加组列表 GROUPS
-a, --append GROUP 将用户追加至上边 -G 中提到的附加组中,
并不从其它组中删除此用户
-h, --help 显示此帮助信息并推出
-l, --login LOGIN 新的登录名称
-L, --lock 锁定用户帐号
-m, --move-home 将家目录内容移至新位置 (仅于 -d 一起使用)
-o, --non-unique 允许使用重复的(非唯一的) UID
-p, --password PASSWORD 将加密过的密码 (PASSWORD) 设为新密码
-R, --root CHROOT_DIR chroot 到的目录
-s, --shell SHELL 该用户帐号的新登录 shell
-u, --uid UID 用户帐号的新 UID
-U, --unlock 解锁用户帐号
-Z, --selinux-user SEUSER 用户账户的新 SELinux 用户映射 |
1 2 | groups username # 查看用户所属组 |
修改用户所属组
1 2 | usermod usertest -G old_normal # 将用户usertest修改加入old_normal组中 |
1 2 | usermod usertest -a -G other_normal # 将用户追加至other_normal组中,且不影响原有组状态 |
1 2 | cat /etc/group | grep usertest # 可以查看到usertest用户当前所属组的情况 |
修改用户家目录及启动shell
1 | usermod usertest -d /home/user -s /bin/sh |
修改用户名
1 2 | usermod -l new old # 将old用户名变为new |
锁定/解锁用户
1 2 3 4 | usermod -L usertest; # 锁定usertest用户 usermod -U usertest; # 解锁usertest用户 |
Linux组管理
所有的
Linux或者Windows系统都有组的概念,通过组可以更加方便的管理用户组的概念应用于各行行业,例如企业会使用部门、职能或地理区域的分类方式来管理成员,映射在
Linux系统,同样可以创建用户,并用组的概念对其管理Linux组有如下特点
- 每个组有一个组
ID - 组信息保存在
/etc/group中 - 每个用户至少拥有一个主组,同时还可以拥有
31个附属组
创建新组
1 | groupadd normal # 创建normal组 |
1 | groupadd -g 1000 normal # 创建ID为1000的分组 |
其他组属性
常见参数
1 2 3 4 | -r # 系统账户 -f # 如果指定的组已经存在,则退出 -g # 指定当前组id -n --new --old # 修改组名 |
1 2 | groupmod -n old_normal normal # 修改normal组名为old_normal |
1 2 | groupmod -g 1001 old_normal # 修改old_normal组id为1001 |
权限
设置好了用户和组,那么接下来就可以对其进行权限控制
由于linux下处处皆文件,所谓权限也就是对文件的读、写、执行,至少这三种
当操作系统下某个进程在运行时,进程的权限,也相当于这个进程的运行用户身份权限
| 权限 | 文件 | 目录 |
|---|---|---|
| r | 读取文件 | 列出目录 |
| w | 修改文件 | 修改目录内文件 |
| x | 执行文件 | 进入目录 |
- 权限分组
默认的linux的权限分为三种角色
user、group、other每个文件将基于UGO三种权限进行设置
一般一个文件创建之后,谁创建该文件,默认成为该文件的所有者
用户及组权限
1 2 | ls -ahl # 查看文件所有者 |
1 2 3 4 | chmod g+rwx file # 给file文件增加rwx权限 chmod g-x file # 给file文件减少x权限 |
用户及组修改
修改某个文件或目录所属用户或组
1 2 | chown -R root file # 修改file文件所属用户为root |
1 2 3 4 | chown -R :root file # 修改file文件所属用户为root chgrp -R root file # 修改file文件所属组为root |
二进制权限
linux下具备权限设置为1,反之为0,那么一个权限按照二进制位数来计算,如下所示
1 2 3 | --x: 001 1 -wx: 011 3 rwx: 111 7 |
很清晰,对应的权限位置所代表的数字分别是:r=4,w=2,x=1
1 2 | chmod 775 file # 修改file文件权限为 rwxrwxr-x |
权限掩码
神奇的事情需要我们考虑,每次创建文件,默认都会具备一定的权限,而这个权限是如何分配而来的呢?
是通过一个叫做权限掩码的东西来维护的,这个码可以通过umask命令看到
默认系统的掩码是022
- 文件权限由默认权限减去掩码
文件默认权限:666
那么创建一个文件真实的权限是:666-022=644
目录的默认权限:777
一个目录的真实权限是:777-022=755
- 设置默认掩码
1 | umask -S 011 |
特殊权限
| 权限 | 对文件的影响 | 对目录的影响 |
|---|---|---|
| suid | 以文件的所属用户身份执行,而非执行文件的用户 | 无 |
| sgid | 以文件所属组身份去执行 | 在该目录中创建任意新文件的所属组与该目录的所属组相同 |
| sticky | 无 | 对目录拥有写入权限的用户仅可以删除其拥有的文件,无法删除其他用户所拥有的文件 |