Skip to content
On this page

权限管理

1. 用户(组)权限管理

1.1 用户组管理

用户组可以方便批量管理用户,每个用户必须属于一个组或多个组。为一个组赋权限后,组中所有用户自动获得相应权限

命令说明
groupadd [-options] GROUP添加用户组
groupdel [-options] GROUP删除用户组
cat /etc/group查看系统所有用户组
chgrp [-options] GROUP FILE修改文件或目录所在组。-R表示递归修改
gpasswd -options GROUP管理用户组。-a表示向组中添加用户,-d表示从组中移除用户
sh
# 添加dev用户组
$ sudo groupadd dev

# 删除dev用户组
$ sudo groupdel dev

# 查看系统用户组
$ cat /etc/group

# 将Code目录及其子目录和文件所在组递归修改为dev
$ sudo chgrp -R dev Code

# 将colin用户添加到sudo组中
$ sudo gpasswd -a colin sudo

# 将colin用户从sudo组中移除
$ sudo gpasswd -d colin sudo

添加用户到组中除了使用gpasswd -a user group命令,也可以使用usermod -a -G group user

1.2 用户管理

命令说明
su [-options] [user]切换用户
useradd [-options] user创建新用户
passwd [-options] [user]设置用户密码
userdel [-options] [user]删除用户。-r可以连同删除用户主目录
cat /etc/passwd查看系统所有用户信息
id [-options] [user]查看用户和所在组信息
who [-options]查看当前登录到系统的活跃用户
whoami查看当前用户名
usermod [-options] user修改用户信息

1.2.1 root 用户

Linux系统中root账号通常用于系统维护和管理,其对操作系统所有资源 具有所有访问权限。 若要切换到root用户,参阅 切换到root用户

sudo命令用来以其他身份来执行命令,预设的身份为root。用户使用sudo时需要输入密码,密码5分钟有效。

sh
sudo rm -r Application      # 以管理员身份删除Application目录

只有特定用户才可使用sudo,未经授权用户使用sudo会发警告邮件给管理员。不同的Linux发行版中授权sudo的方式略有区别。

1) Ubuntu/Debian

sudo组中的用户即可使用sudo。将指定用户加入sudo组中即可。

sh
# 将colin用户添加到sudo组中
$ gpasswd -a colin sudo
2) CentOS

sudoers文件中列出sudo用户。将指定用户加入sudoers 文件中即可。

sh
# 查看 sudoers 路径
$ whereis sudoers # 一般默认为 /etc/sudoers

sudoers加入要授权的用户即可。

CentOS sudoers

1.2.2 切换用户

sh
# 命令格式

# 切换用户
$ su [-options] [user]

# 退出当前登录用户
$ exit
  • options--l会在切换用户时同时切换到用户主目录

  • 以下命令都可以切换到root用户

    sh
    su
    sudo -i
  • 切换和退出用户示意图:

    切换用户

sh
# 切换test用户并切换到其主目录(/home/test)
$ su - test

# 退出test用户
$ exit

# 切换root用户
$ su

1.2.3 创建用户

1) useradd 命令
sh
# 命令格式
$ useradd [-options] user
options含义
-m自动创建用户主目录
-g指定用户所属组。若不指定会自动创建一个用户组
-d指定用户主目录为现有目录

创建用户最好添加-m创建用户主目录,否则后续创建目录、设置权限非常繁琐。如果忘记,最简单的方法就是立即删除用户,重新创建

通过-d指定用户主目录后,如果用户可能对此目录没有权限则需要赋予相应权限,比如添加到所有者组或者修改目录所有者。

sh
# 创建colin用户并分配到dev组,同时创建用户主目录
$ sudo useradd -m -g dev colin
2) passwd 命令
sh
# 命令格式
$ passwd [-options] [user]
  • passwd不指定用户默认给当前用户修改密码
  • 创建用户后必须设置用密码之后才可以登录
sh
# 给colin设置密码
$ passwd colin

出于安全性考虑,在多数流行的Linux发行版当中都对用户密码强度存在一定的限制,如果不符合规范可能会得到一个类似new password is too simple的错误信息。某些情况,如本机测试环境,我们通常想设置一些简单的密码以减少繁琐的密码输入时间,此时**使用管理员身份设置特定用户名密码则可以跳过的密码强度校验。**如,sudo passwd colin # 设置colin密码并跳过密码强度校验

1.2.4 查看用户信息

1) passwd 文件

/et/passwd文件存在的是所有用户的信息,每条记录是一个用户,记录7个字段,以":"分割,形如

sh
$ cat /etc/passwd

# 结果示例
# colin:x:1000:1000:Colin Chang,,,:/home/colin:/bin/bash
# test:x:1001:1001::/home/test:/bin/sh
用户名密码UIDGID用户全名或本地账号主目录Shell
colinx10001000Colin Chang,,,/home/colin/bin/bash
testx10011001/home/test/bin/sh
  • 密码x表示密码加密不显示,即使没有设置密码
  • UID是用户唯一的ID标识
  • GID是用户主组唯一的ID标识
  • Shell表示用户登录时使用的终端。可修改shell
  • 没有内容的项全部留空
2) id 命令
sh
# 命令格式
$ id [-options] [user]

id命令可以快速方便的查看用户和所在组信息。不指定用户默认显示当前用户信息。命令执行结果示例如下:

sh
# 查看colin用户信息
$ id colin

# 执行结果如下
# uid=1000(colin) gid=1000(colin) groups=1000(colin),4(adm),24(cdrom),27(sudo)

groups列出了用户的所有所在组(主组+附加组)。gid为主组ID

3) 其他相关命令
sh
# 查看登录到系统的活跃用户
$ who

# 查看当前当前登录用户
$ whoami

1.2.5 修改用户信息

1.2.5.1 主组与附加组

一个用户可以隶属与多个组。其中至少包含一个主组和任意多个附加组。

  • 主组:通常在用户创建时指定。主组ID在/etc/passwd的第四列GID。通过id命令快速查看主组信息
  • 附加组:用于指定 用户附加权限。在/etc/group中最后一列表示该组所有用户列表。通过id命令结果groups可以快速查看所有所在组(主组+附加组)
1.2.5.2 usermod 命令
sh
# 命令格式
$ usermod [-options] user

usermod命令可以修改用户信息,如用户主组、附加组、主目录、shell等。

options含义
-g修改用户主组。用户创建后一般不会修改主组
-G修改用户附加组。一般配合-a来完成向其它组添加
-s修改shell
1) 修改组
  • 修改用户组后需要重新登录才能生效
  • useradd添加的用户默认无法以root身份执行命令。若要使用可以将用户附加到sudo
sh
# 将colin用户附加到sudo组中
$ sudo usermod -a -G sudo colin
2) 修改 Shell
  • Ubuntu中useradd添加的用户默认shell为dash(/bin/sh),而系统用户使用的shell默认为bash(/bin/bash)。bash在颜色渲染和使用上更加方便。
  • 修改用户Shell后需要重新登录方可生效
sh
# 修改test用户的shell为bash
$ sudo usermod -s /bin/bash test

2. 权限管理

2.1 权限介绍

权限数字代码缩写英文
4rread
2wwrite
执行1xexecute
无权限0

目录可读权限表示是否可以读取目录下内容,可写表示是否可以修改目录下内容,可执行表示是否可以在此目录执行命令

2.2 修改权限

Linux修改权限有一下三种方式:

命令作用
chown [-options] [owner] FILE修改所有者
chgrp [-options] GROUP FILE修改所在组
chmod [-options] MODE FILE直接修改权限

2.2.1 chown 命令

sh
# 将123.txt所有者修改为test用户
$ sudo chown test 123.txt

# 将code目录所有者修改为test用户
$ sudo chown test code

2.2.2 chmod 命令

chmod是change mode缩写,其功能是修改用户(组)对文件或目录的权限

1) 加减方式
sh
# 命令格式
$ chmod +/-r|w|x file|dir
  • 添加权限使用+,移除权限使用-
  • 此种方式会同时修改 所有者、所在组、其他组 权限,不能精确修改三者各自权限
sh
chmod +x 123.txt    # 添加123.txt文件的可执行权限
chmod -rw demo      # 移除demo目录的读写权限
2) 数字方式
sh
# 命令格式
$ chmod [-options] xxx file
  • -R表示递归修改文件目录权限
  • chmod可以简单的使用三个数字分别设置 拥有者/所在组/其他组权限
  • xxx代表三个0-7的数字。每位数字含义为各部分权限数字代码的和值。权限数字代码结构如下表
所有者权限所在组权限其他组权限
rwxrwxrwx
421421421
权限各位权限码权限值
rwx4217
rw-4206
r-x4015
r--4004
-wx0213
-w-0202
--x0011
---0000
  • 常见权限组合有
权限组合所有者权限所在组权限其他组权限
777rwxrwxrwx
755rwxr-xr-x
644rw-r--r--
```sh
# 递归修改ColinBlog目录的权限为 所有者可读可写可执行,所在组可读可执行,其他组可读可执行
$ chmod -R 755 ColinBlog
```

Released under the MIT License.