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 | 无 | 对目录拥有写入权限的用户仅可以删除其拥有的文件,无法删除其他用户所拥有的文件 |