linux是一个多任务,多用户的系统。这意味着,在同一个时间,可以有多个用户,打开不同的任务,分别处理,可以通过ssh远程登陆等方式,多个用户分别来操作同一个文件。
为安全起见,多用户多任务,需要有权限的概念。比如,为防止自己的文件,被他人误删,需要将该文件设置成他人不可操作。
linux系统中,一切皆是文件,文件有2处需要注意:1)文件属主和文件属组;2)文件权限。

1. 文件属主和文件属组

文件有3种归属方式:文件属主、文件属组、其他组;分别用user、group、other来表示。
其中,文件属主表示文件的拥有者;文件属组表示文件所属的组;其他组表示除文件所在组外的其他组。

在linux中,可以用ls -la的命令来查看一个文件的所属用户、所在组,及其他组情况。

  1. drwxr-xr-x 2 root wheel 64 7 5 2020 cores
  2. drwxr-xr-x@ 11 root wheel 352 7 10 2020 usrl
  3. rwxr-xr-x@ 1 root admin 11 7 10 2020 var -> private/var

总共有10个字段,逐一解释下这些字段的意思:

  • 文件类型,共5种 | 序列 | 类型 | 含义 | | —- | —- | —- | | 1 | - | 普通文件 | | 2 | d | 目录 | | 3 | l | 软链接 | | 4 | b | 块类型存储,比如存储设备 | | 5 | c | 字符串类型,比如键盘鼠标 |
  • 文件属主权限
  • 文件属组权限
  • 其他组权限
  • 硬链接数
  • 文件属主
  • 文件属组
  • 文件大小
  • 文件最后修改时间
  • 文件名

image.png

2. 文件权限及chmod

文件权限有3中:r,w,x,分别是可读,可写,可执行。
结合上面文件的归属:文件属主、文件属组、其他组;不同的文件归属有不同的文件权限。

只有文件属主和超级用户,才可以改变文件权限。改变文件权限,可通过chmod命令,有2种方式,可以改变文件模式:八进制法和符号法。

2.1 八进制法

8进制表示法 2进制表示法 文件模式
0 000 —-
1 001 —x(实际不存在)
2 010 -w-
3 011 -wx(实际不存在)
4 100 r—
5 101 r-x
6 110 rw-
7 111 rwx

以上是八进制的穷举,需要注意的是:文件是可执行,必须要可读,实际上最常用的是:0,4,5,6,7模式。
通过3位八进制数字,可以分别设置文件属主、文件属组、和其他用户的文件模式。最常用的是:600,755,777模式。
比如:

  1. chmod 600 test.txt # 表示文件属主对test.txt文件具有可读可写权限;文件属组和其他用户没有文件test.txt的文件权限
  2. chmod 755 test.txt
  3. chmod 777 test.txt

2.2 符号法

符号法支持以一种符号的方式来改变文件模式。符号法需要涉及3个方面:更改会影响谁、更改的操作有哪些、更改的权限有哪些。具体如下:

  • 会影响谁 | 符号 | 含义 | | —- | —- | | u | 文件属主 | | g | 文件属组 | | o | 其他用户 | | a | 全部用户 |

  • 更改会有哪些操作 | 符号 | 含义 | | —- | —- | | + | 添加上某一个权限 | | - | 删除某一个权限 | | = | 只有指定的权限可用,其他权限删除 |

  • 哪些权限

权限还是这3个权限:读r,写w,执行x

比如:

符号 含义
u+x 为文件所有者添加可执行权限
u-x 删掉文件所有者的可执行权限
+x 为所有用户(包括文件属主、文件属组、其他用户)都添加上可执行权限,等价于a+x
o-rw 其他用户删掉可读可写权限
go=rw 设置文件属组和其他用户的权限为可读可写,如果文件属组和其他用户之前有课执行权限,需要删除可执行权限
u+x, go=rx 为文件所有者添加可执行权限;同时设置文件属组和其他用户的权限为可读可执行,如果之前已经有可写权限,需要删除可写权限。
  1. chmod u+x test.txt
  2. chmod +x test.txt
  3. chmod u+x, go=rx test.txt

3. 文件归属

  • chown:改变文件属主,其实chown可以改变文件属主,也可以改变文件属组。
  • chgrp:改变文件属组

chown命令格式如下:

  1. chown owner file
  2. chown ower:group file
  3. chown :group flie
  4. chown -R own:group file # 将当前文件目录及其目录下的文件递归的修改文件属主和文件属组

比如:

  1. chown Army test.txt # 文件text.txt的所有者修改成Army
  2. chown Army:Key test.txt # 文件test.txt的所有者修改为Army,同时文件属组修改为Key

4. root用户和普通用户

su和sudu都可以用来以另一个用户的身份来运行。通常可用来切换到root超级用户。
su和sudo有什么区别呢?
1)su指定的用户环境将被加载,工作目录也更改成指定的用户主目录;sudo不需要启动一个新的shell环境,也不需要加载另一个用户的运行环境;
2)sudo可以通过配置sudo命令,是系统以一种可控的方式,允许普通用户以一个不同的身份执行命令;
3)sudo不需要输入超级用户的密码,用户只需要输入自己的密码进行认证,sudo会有几分钟可以记录密码,这就是为什么并不是每次都需要输入密码。

有多少关于【用户】或【账号】的概念?其中用户和账号,可以理解为是一个概念。用户一般是通过某一个账号,比如root账号,或user账号来登陆。
管理员用户
普通用户
系统用户
普通用户组

命令形式:

  1. su user
  2. sudo user
  3. sudo -l # 查看sudo命令可以授予哪些权限

比如:

  1. su
  2. sudo
  3. sudo -l

5. 系统用户账号

5.1 系统用户账号

linux是一个多任务、多用户的分时操作系统。可以通过useradd、userdel添加、删除用户账号,passwd修改用户账号密码,usermod修改用户的文件模式。通过useradd添加的用户账号,会放在/etc/passwd文本中。
对应的命令如下:

  • useradd
  • userdel
  • passwd
  • usermod

命令使用方法:
useradd 选项 username

  1. useradd tester # 添加一个一般的系统用户
  2. userdel tester

5.2 系统用户组

可以为系统添加一个用户组,可以对该系统用户组统一管理。添加完的系统用户组信息,将被保存在系统文件/etc/group组账号信息中。

  • groupadd
  • groupdel
  • groupmod
  • newgrp

命令使用方法:
groupadd 选项 groupname

  1. groupadd runoob

5.3 系统文件

序列 文件 含义
1 /etc/passwd 与用户账号有关的系统文件
/etc/shadow 与用户账号的密码有关的系统文件
2 /etc/group 组账号信息
/etc/gshadow 组账号密码信息
/etc/profile 全局的配置,每一个用户均使用该配置,login登陆模式
3 /etc/bash_profile 全局配置,login登陆模式
~/.bash_profile 局部配置,login登陆模式
4 /etc/bashrc 全局配置,non-login非登陆模式
~/.bashrc 局部配置,non-login非登陆模式
5 /home 主目录
6 /mail






bash_profile配置,主要用于登陆shell;
bashrc配置,主要用于交互式非登陆shell;
其中/etc/xxx,表示全局配置;~/.xxxx,表示局部配置,只针对指定用户。