跳转至

用户管理和文件权限

用户和用户组

点击这里,看视频讲解,学习下面内容

现代操作系统基本都是一个 多用户 的操作系统,Windows、MacOS、Linux都是这样。

任何一个用户,要使用Linux系统,都必须用Linux账号登陆系统。


Linux 系统有个特殊的账号 root 。 通常是 系统管理员使用该账号,就像Windows里面的Administrator账号一样。

root账号 是系统安装好就有的,具有系统中最高的权限,比如:可以创建其它账号、停止其它用户进程、修改一些Linux系统配置文件、访问其它用户文件。

而其它账号则是有权限限制的,上面说的root用户的特权,其它账号通常是没有的。


之所以要有这样的权限区别,就是防止一些用户不小心(或者故意)做出的破坏。


Linux系统中,每个用户账号 都对应一个 用户 ID。

用户ID 就是一个数字,因为计算机处理数字更加方便。

用户的 ID 与账号的信息就存储在文件 /etc/passwd 当中。


另外 每个用户可以属于一个或者多个 用户组 ,每个用户组对应一个 GroupID

GroupID 的信息存储在文件 /etc/group 当中。

系统管理员可以对某个用户组中的所有用户进行统一管理,比如分配权限等。

添加用户

点击这里,看视频讲解,学习下面内容

当你们公司新来了一位员工,需要使用你们的Linux主机, 你如果是管理员, 可以为他创建一个用户账号。

Linux系统中创建用户,可以使用命令 adduser ,随后输入该用户的密码2次,并且一路按回车确认信息,即可。

该命令需要root权限,所以用root账号登录,

比如:

root@byhy-server:~# adduser byhy2
Adding user `byhy2' ...
Adding new group `byhy2' (1001) ...
Adding new user `byhy2' (1001) with group `byhy2' ...
Creating home directory `/home/byhy2' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for byhy2
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n]


这样,就添加了一个用户byhy2

使用命令 cat /etc/passwd 查看文件内容,你会发现在/etc/passwd文件末尾中新增了一行数据,如下所示

byhy2: x:1001:1001:,,,:/home/byhy2:/bin/bash

/etc/passwd文件每行对应一个用户的信息。 一行中的字段用":"隔开。每个字段的含义分别是

 用户名
 登录密码 
 用户ID 
 用户Group ID
 描述信息
 用户的home目录
 该用户缺省shell


该命令 同时也为该用户创建了一个用户组, 组名就叫 byhy2 ,如下所示

root@byhy-server:~# groups byhy2
byhy2 : byhy2

当然,你可以创建用户的时候,就加入一个指定的组,而不是新建一个组,
比如 adduser --ingroup root byhy ,就在创建byby用户的同时,把它加入到 root 这个用户组里面了。


另外该命令 还为该用户创建了一个 home目录(这里就是 /home/byhy2), 该目录作为byhy2用户登录后使用的 主目录 ,该目录属于byhy2用户所有。

这里 /home/byhy2 就是 byhy2 这个用户的 用户根目录 , 或者说 用户主目录

设置密码

使用命令adduser添加用户时,就会设置密码。

如果后面你想更新密码了怎么办? 使用命令 passwd

# passwd byhy
Changing password for user byhy.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

但是,只有root用户才可以给其他用户设置密码,普通用户只能修改自己的密码。

删除用户

假如,有一天,这位同事辞职了,你需要删除他的账号,使用命令 deluser

比如

root@byhy-server:~# deluser byhy2
Removing user `byhy2' ...
Warning: group `byhy2' has no more members.
Done.

用户间切换

假如你是系统管理员, 正使用root账号操作。

现在你需要以byhy账号进行一些操作, 可以从root用户切换到byhy账号,

切换账号使用命令 su , 英文意思 substitute user 或者 switch user 。

比如 su - byhy

注意,其中有一个符号 - , 切换命令中使用这个符号,表示要重新创建用户环境,就像使用byhy账号重新登陆一样。

也可以不用符号 - ,比如 su byhy ,这样就会使用当前的用户的环境(保留现有的环境变量),切换到新用户byhy

如果现有用户不是root 用户,切换到其他用户账号,需要输入密码, 如果是root用户则不需要输入密码。

查看用户组

点击这里,看视频讲解,学习下面内容

要查看自己属于哪个用户组,使用命令 groups ,比如

byhy@byhy-server:~$ groups
byhy adm cdrom sudo dip plugdev lxd

表示当前用户byhy 属于这些组: byhy adm cdrom sudo dip plugdev lxd

其中第一个 byhy 是byhy用户的 主用户组(primary group) ,其它的是 从用户组(secondary group)

/etc/passwd 文件里面记录的是用户的主用户组


要查看其它属于哪个用户组,使用命令 groups <用户名> ,比如

byhy@byhy-server:~$ groups root
root : root
byhy@byhy-server:~$ groups byhy
byhy : byhy adm cdrom sudo dip plugdev lxd


要查看某个组里面有哪些用户

可以直接看/etc/group 文件,

更快速的,可以这样

grep '^sudo' /etc/group

但是这样只能查看到从用户组为该组的用户。

这个帖子的说明,/etc/group里面记录的从用户组用户。


也可以使用命令

groupmems -g groupname -l

添加用户组

增加一个新的用户组使用 addgroup 命令。

比如:

addgroup byhyusers

此命令向系统中增加了一个新组byhyusers。

删除用户组

如果要删除一个已有的用户组,使用 delgroup 命令

比如

delgroup byhyusers

此命令从系统中删除组byhyusers。

改变用户所属组

如果要将一个用户从组1改到组2,需要root用户使用 usermod 命令,其格式如下:

例如:下面的 命令将用户byhy的 主用户组(primary group)设置为 g1 。

usermod –g g1 byhy

注意:主用户组只能有一个



下面的命令将用户byhy用户的 从用户组(secondary group)设置为:g2,g3

usermod –G g2,g3 byhy

从用户组 可以有多个。



下面的命令给用户byhy 再添加 两个从用户组(secondary group) g2,g3 ,原来所属的从用户组仍然也在

usermod -a -G g1,g2 byhy

注意: 有 -a 参数是添加从用户组, 没有 -a 参数是设置从用户组

Linux 文件访问权限

点击这里,看视频讲解,学习下面内容

Linux文件的访问有三种权限: 读(用字母r表示)、写(用字母w表示)、执行(用字母x表示)

某个用户 对于一个 文件

有读权限,表示该用户可以读取文件的内容,

有写权限,表示该用户可以修改文件内容,

有执行权限, 表示该用户可以运行该文件(当然该文件应该是可执行文件)

而 这三种权限 对目录,含义又不一样。

某个用户 对于一个 目录

有读权限,表示该用户可以查看该目录里面的内容,

有写权限,表示该用户可以在该目录里面 创建 和删除 文件,

有执行权限, 表示该用户可以使用 cd命令,进入该目录


对 某个文件或者目录,Linux系统需要说明 三种类型的用户 ,分别具有怎样的权限

这三种类型分别是:

  • 文件的所有者,英文叫 owner , 也就是 该文件的 创建者

  • 文件归属的用户组里面的用户 ,英文叫 grouper,

  • 其他用户 (非owner和非grouper)

Linux系统需要为每个文件和目录,指定这个三种类型的用户,具有什么r、w、x里面的哪些权限


文件存取权限的显示 可以通过"ls -l"命令显示,如:

$ ls -l file1

显示如下:

$ ls -l mysql57-community.rpm
-rwxr-xr--. 1 root root 9224 Sep 12  2016 mysql57-community.rpm

其中:

  • 第2-4字符"rwx"表示此文件所有者root 对此文件的操作权限是为"可读、可写、可执行",

  • 第5-7字符"r-x" 表示此文件所归属的root组内的用户对此文件的操作权限是"可读、不可写、可执行",

  • 第8-10字符"r--" 表示其他用户对此文件的操作权限是"可读、不可写、不可执行"

修改文件访问权限

文件的所有者或者root用户可以修改文件的访问权限

用chmod命令修改文件的存取权限,chmod命令的格式如下:

chmod  [who][op][permission]  file...

who项表示用户类型,它的内容为以下一项或多项:

u   拥有者(user --- owner)
g   与拥有者同一组的用户(group)
o   其他人(other)
a   所有人(all)

op项表示动作:

+   表示要加上permission指定的权利
-   表示要取消permission指定的权利

permission项为存取权限,它的内容为以下一项或多项:

r   表示可读
w   表示可写
x   表示可执行

比如:

chmod u+w file1 ,该命令添加了 拥有者对file1文件的写权限

chmod u-x file1 ,该命令去掉了 拥有者对file1文件的执行权限

chmod ug+rwx file1 ,该命令添加了 拥有者和同组用户 对file1文件的 读、写、执行权限

chmod a+rwx file1,该命令添加了 所有人 对file1文件的 读、写、执行权限

chmod o+rx /root , 该命令添加了 其它组 对 目录 /root 的可读可执行权限。 对于目录来说 ,可执行权限意味着,用户可以 cd 进入 到这个目录。

chmod -R o+rx /root , 参数 -R 表示递归的意思,该命令执行结果是:其它用户可以对 /root 目录以及所有它的子目录、子文件 都有 可读可执行权限 。


改变文件所有者及文件所在组

点击这里,看视频讲解,学习下面内容

chown将指定文件的拥有者改为指定的用户或组。

该命令的参数中,用户可以是用户名或者用户ID;组可以是组名或者组ID。文件是以空格分开的要改变权限的文件列表,支持通配符。

系统管理员经常使用chown命令,在将文件拷贝到另一个用户的名录下之后,让用户拥有使用该文件的权限.

注意:必须是有root权限的用户才能改变文件所有者。


改变文件所有者的命令格式如下:

chown [选项]... [所有者][:[组]] 文件...

例如:

chown byhy test1 ,就把文件test1的所有者变更为用户byhy

chown byhy:byhy test1 ,就把文件test1的所有者变更为用户byhy,所属组变为byhy

chown -R byhy dir1 ,就把目录dir1以及下面所有的子目录和文件的所有者变更为用户byhy

也可以用命令chgrp改变文件所有者组,格式如下:

chgrp [选项] [组] [文件]

注意:必须是有root权限的用户才能改变文件组别的归属

比如:

chgrp byhy test1 , 就把文件test1的用户组变更为组byhy

sudo:以root权限运行程序

点击这里,看视频讲解,学习下面内容


有的程序需要做一些特权操作,比如前面讲的用户账号管理:adduser、deluser。

通常我们要执行这样的程序必须以root用户登录去执行。


但是,我们有时却希望给某几个信任的用户授予这样的权限,允许他们某次可以申请以以root权限执行该程序。

Windows里面的 以管理员权限 运行某个程序,就是这样。

Linux上也有这种方法,就是使用命令 sudo


比如

sudo adduser byhy3

就是申请以root权限运行 adduser byhy3 这个命令。

当然,很明白,不是你说申请运行就一定可以的,前提是你当前登录的账号 要在系统设置里面 允许这样做。

这个设置是 在 /etc/sudoers 里面配置的。 如下

root    ALL=(ALL:ALL) ALL

%admin         ALL=(ALL) ALL
%sudo          ALL=(ALL:ALL) ALL

byhy2, byhy3   ALL = /sbin/shutdown, /sbin/reboot


通过配置这个文件,可以设置

哪些用户(或者哪些组里面的用户) ,在什么地方, 以 哪些账号的权限 , 运行哪些程序。

一般不建议直接修改这个文件, 防止语法写错,导入整个规则被破坏。

而是使用命令 visudo 命令修改, 这个命令可以对错误的修改做检查,防止意外。


通常,我们会给某个组设置规则, 然后只需要把某些用户加入组中即可。

比如,Ubuntu上可以把某个用户加入 sudo 这个组, 既可以拥有 任何地方、以任何账号的权限、运行任何程序 的能力。

把用户加入组的命令,就是使用 usermod, 上面已经讲过。

注意:通常修改组后,该账号需要重新登录一下,才有组的sudo 权限。

您需要高效学习,找工作? 点击咨询 报名实战班

点击查看学员就业情况