Linux用户组及权限管理

SoarFly00 2020-01-06

用户和组

<span>Linux</span>是一个多用户的操作系统,引入用户,可以更加方便管理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对目录拥有写入权限的用户仅可以删除其拥有的文件,无法删除其他用户所拥有的文件

相关推荐