Linux用户组及权限管理

浪尽此生 提交于 2020-01-06 12:27:55

用户和组

Linux是一个多用户的操作系统,引入用户,可以更加方便管理Linux服务器

系统默认需要以一个用户的身份登入,而且在系统上启动进程也需要以一个用户身份器运行,用户可以限制某些进程对特定资源的权限控制

Linux用户及组

Linux操作系统对多用户的管理,是非常繁琐的,所以用组的概念来管理用户就变得简单,每个用户可以在一个独立的组,每个组也可以有零个用户或者多个用户。

Linux系统用户是根据用户ID来识别的,默认ID长度为32位,从默认ID编号从0开始,但是为了和老式系统兼容,用户ID限制在60000以下,Linux用户分总共分为三种,分别如下

  • 超级用户:rootID为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的权限分为三种角色

usergroupother

每个文件将基于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 对目录拥有写入权限的用户仅可以删除其拥有的文件,无法删除其他用户所拥有的文件
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!