linux是一个多任务,多用户的系统。这意味着,在同一个时间,可以有多个用户,打开不同的任务,分别处理,可以通过ssh远程登陆等方式,多个用户分别来操作同一个文件。
为安全起见,多用户多任务,需要有权限的概念。比如,为防止自己的文件,被他人误删,需要将该文件设置成他人不可操作。
linux系统中,一切皆是文件,文件有2处需要注意:1)文件属主和文件属组;2)文件权限。
1. 文件属主和文件属组
文件有3种归属方式:文件属主、文件属组、其他组;分别用user、group、other来表示。
其中,文件属主表示文件的拥有者;文件属组表示文件所属的组;其他组表示除文件所在组外的其他组。
在linux中,可以用ls -la的命令来查看一个文件的所属用户、所在组,及其他组情况。
drwxr-xr-x 2 root wheel 64 7 5 2020 cores
drwxr-xr-x@ 11 root wheel 352 7 10 2020 usrl
rwxr-xr-x@ 1 root admin 11 7 10 2020 var -> private/var
总共有10个字段,逐一解释下这些字段的意思:
- 文件类型,共5种 | 序列 | 类型 | 含义 | | —- | —- | —- | | 1 | - | 普通文件 | | 2 | d | 目录 | | 3 | l | 软链接 | | 4 | b | 块类型存储,比如存储设备 | | 5 | c | 字符串类型,比如键盘鼠标 |
- 文件属主权限
- 文件属组权限
- 其他组权限
- 硬链接数
- 文件属主
- 文件属组
- 文件大小
- 文件最后修改时间
- 文件名
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模式。
比如:
chmod 600 test.txt # 表示文件属主对test.txt文件具有可读可写权限;文件属组和其他用户没有文件test.txt的文件权限
chmod 755 test.txt
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 | 为文件所有者添加可执行权限;同时设置文件属组和其他用户的权限为可读可执行,如果之前已经有可写权限,需要删除可写权限。 |
chmod u+x test.txt
chmod +x test.txt
chmod u+x, go=rx test.txt
3. 文件归属
- chown:改变文件属主,其实chown可以改变文件属主,也可以改变文件属组。
- chgrp:改变文件属组
chown命令格式如下:
chown owner file
chown ower:group file
chown :group flie
chown -R own:group file # 将当前文件目录及其目录下的文件递归的修改文件属主和文件属组
比如:
chown Army test.txt # 文件text.txt的所有者修改成Army
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账号来登陆。
管理员用户
普通用户
系统用户
普通用户组
命令形式:
su user
sudo user
sudo -l # 查看sudo命令可以授予哪些权限
比如:
su
sudo
sudo -l
5. 系统用户账号
5.1 系统用户账号
linux是一个多任务、多用户的分时操作系统。可以通过useradd、userdel添加、删除用户账号,passwd修改用户账号密码,usermod修改用户的文件模式。通过useradd添加的用户账号,会放在/etc/passwd文本中。
对应的命令如下:
- useradd
- userdel
- passwd
- usermod
命令使用方法:
useradd 选项 username
useradd tester # 添加一个一般的系统用户
userdel tester
5.2 系统用户组
可以为系统添加一个用户组,可以对该系统用户组统一管理。添加完的系统用户组信息,将被保存在系统文件/etc/group组账号信息中。
- groupadd
- groupdel
- groupmod
- newgrp
命令使用方法:
groupadd 选项 groupname
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 | ||
bash_profile配置,主要用于登陆shell;
bashrc配置,主要用于交互式非登陆shell;
其中/etc/xxx,表示全局配置;~/.xxxx,表示局部配置,只针对指定用户。