目录
Linux用户与权限管理
用户
Linux是一个多用户的操作系统,在Linux中,理论上来说,我们可以创建无数个用户,但这些用户是被划分到不同的群组里面的,有一个特殊的用户root,是超级用户,拥有最高权限。
自己创建的用户权限是有限的,这大大提高了Linux系统的安全性,能够有效防止误操作或是病毒攻击,当我们执行某些需要更高权限的命令是可以使用sudo
命令来提升权限(前提是该用户在/etc/sudoers
文件中被分配了该权限)。与用户相关的常用命令有:
-
sudo
以root的身份运行命令sudo visudo
-
useradd
或adduser
useradd testuser #创建一个名为testuser的用户 adduser testuser #创建一个名为testuser的用户
这两个命令都可以创建新用户,且会在
/home
目录下生成相同名字的家目录,此命令需要root权限。 -
passwd
passwd testuser #修改testuser用户的密码
修改用户的密码,当我们创建完用户之后,该用户是没有密码的,这显然是不安全的,因此作为root用户,我们可以为任何用户创建和修改密码,但作为普通用户,我们只能用
passwd
来修改自己的密码。 -
userdel
userdel testuser #只删除用户,但不会从/home中删除对应文件夹 userdel -r testuser #删除用户的同时删除/home下对应的文件夹
-
usermod
usermod testuser -l testuser_new #将testuser的用户名修改为testuser_new,但/home下的家目录名称不会改变,需要自己手动进行修改,用userdel -r testuser_new删除用户时无论家目录名字是否修改都会被一并删除 usermod testuser -g testgrp #将testuser所属的群组修改为testgrp usermod testuser -G testgrp,foo,bar #将testuser一次性添加到多个群组中 usermod testuser -ag testgrp #将testuser添加到testgrp中,但同时不离开自己原来的群组
-g
和-G
选项会让用户离开原来的群组,如果你不想这样做的话,就得再添加-a
参数,意味着append。
群组的管理
Linux中每个用户都属于一个特定的群组,如果你不设置用户的群组,默认会创建一个和它的用户名一样的群组,并把用户划归到这个群组中。与群组相关的常用命令有:
-
groupadd
groupadd testgrp #创建一个新的群组,用法和useradd类似
-
groupdel
groupdel testgrp #删除一个已存在的群组
-
groups
groups testuser #查看testuser用户所在的群组
-
usermod -g
或usermode -G
修改用户的群组,在用户部分已经有过介绍
-
chgrp
chgrp bar file.txt #将file.txt文件的群组修改为bar
修改文件的群组
-
chown
chown testuser file.txt #将file.txt的所属权转让给testuser chown testuser:testgrp file.txt #将file.txt所属的用户改为testuser,所属群组改为testgrp chown -R testuser /home/foo chown -R testuser:testgrp /home/foo #递归设置子目录和子文件,一同转让所有权
文件权限管理
说到文件权限管理,我们首先需要了解文件权限是什么。我们用ls -l
命令查看一个目录时,可以得到这样的结果:
[root@x86c deviceQuery]# ls -l
total 52
-rw-rw-r-- 1 test01 test01 1165 Sep 15 2022 A30.intro
-rwxr-xr-x 1 test01 test01 5044 Sep 15 2022 deviceQuery.cuf
-rwxrwxr-x 1 test01 test01 34464 Dec 14 2022 deviceQuery.out
-rwxr-xr-x 1 test01 test01 972 Sep 15 2022 Makefile
drwxr-xr-x 2 root root 6 Feb 20 17:29 test
其中第一列所表示的就是文件或目录的权限,以最后一行的drwxr-xr-x
为例:
d
:表示目录,普通文件是-
,链接是l
r
:read
,表示文件可读w
:write
,表示文件可写,一般有写的权限,就有删除的权限x
:execute
,表示文件可执行-
: 表示没有相应权限
权限的整体是按用户来划分的,如下图所示:
了解了这张图所说的内容之后,我们再来理解上面这句drwxr-xr-x
的意思:
- 它是一个文件夹
- 它的所有者
root
用户具有读、写、执行的权限 root
群组中的用户具有读、执行的权限,但无权对文件进行修改- 其他用户具有读、执行的权限,无权对文件进行修改
了解了文件权限的含义之后,我们就可以使用chmod
来修改权限,chmod并不是需要root权限才能运行的,只要你是此文件的所有者,就可以用chmod来修改文件的访问权限。
chmod
- 用数字来分配权限
权限 | 数字 |
---|---|
r | 4 |
w | 2 |
x | 1 |
因此改变权限,只需要做一些简单的加法就行:
chmod 640 hello.c
# 分析
6 = 4 + 2 + 0 表示所有者具有 rw 权限
4 = 4 + 0 + 0 表示群组用户具有 r 权限
0 = 0 + 0 + 0 表示其它用户没有权限
对应文字权限为:-rw-r-----
-
用字母来分配权限
u
:user的缩写,表示所有者g
: group的缩写,表示群组用户o
: other的缩写,表示其他用户a
:all的缩写,表示所有用户+
:加号,表示添加权限-
: 减号,表示去除权限=
: 等于号,表示分配权限
chmod u+rx file # 文件file的所有者增加读和运行的权限 chmod g+r file # 文件file的群组用户增加读的权限 chmod o-r file # 文件file的其它用户移除读的权限 chmod g+r o-r file # 文件file的群组用户增加读的权限,其它用户移除读的权限 chmod go-r file # 文件file的群组和其他用户移除读的权限 chmod +x file # 文件file的所有用户增加运行的权限 chmod a+rwx file #给所有用户增加file文件的读写执行权,当然这是危险的 chmod u=rwx,g=r,o=- file # 文件file的所有者分配读写和执行的权限,群组其它用户分配读的权限,其他用户没有任何权限