目录
Linux 的用户
root 用户 和 普通用户
如何新建普通用户?
如何切换用户?
一开始是以 root 用户登录:
一开始以普通用户登录:
如何删除用户?
Linux文件权限
什么是读权限( r )?
什么是写权限( w )?
什么是可执行权限( x )?
什么是粘滞位( t )?
权限限制了谁?
权限如何转换为八进制?
什么是权限掩码?
怎么修改权限?
修改文件所有者的权限:
修改文件所属组的权限:
修改 other 的权限:
一次性修改多个访问者的多个权限:
编辑
用八进制修改用户权限:
如何修改文件的拥有者、所属组?
Linux 的用户
root 用户 和 普通用户
root 用户 (超级用户):Linux只有一个 root 用户,root 用户可以在Linux系统下做任何事情,不受权限的限制;
非 root 用户(普通用户):Linux下可以存在多个普通用户,普通用户在Linux系统下会受到权限的限制。
如何新建普通用户?
用户名可以自定义:
adduser 用户名
需要给当前用户设置密码,注意,输入密码时是不回显的:
passwd 用户名
用户的密码尽量和 root 用户的不一样!
这样用户就新建成功了。
Linux 可以 ls /home 查看该 root 下有哪些用户。
如何切换用户?
一开始是以 root 用户登录:
su 用户名 就可以从 root 用户切换到普通用户,不需要输入普通用户的密码。如果想再次切换到 root 用户,CTRL+D即可(CTRL+D 会自动显示 exit):
可以注意到 root 用户的命令提示符为 #,普通用户的命令提示符为 $。
一开始以普通用户登录:
同样 su 用户名 就可以切换用户,但是从普通用户切换到 root 需要输入 root 的密码!同样从 root 用户切换到普通用户 CTRL+D 即可:
如何删除用户?
userdel -r username 就可以删除用户,如果用户当前已登录或该帐户下正在运行进程,则 userdel 命令将不起作用。
Linux文件权限
当我们创建一个文件时(目录也是文件),会出现前面这 9 个字母,这 9 个字母分别代表什么意思呢?我们先来了解下面 3 个权限:
什么是读权限( r )?
对于文件而言,读权限意味着我们可以查看文件的内容;
对于目录而言,意味着我们可以查看目录的文件列表。
什么是写权限( w )?
对于文件而言,写权限意味着我们可以修改文件的内容;
对于目录而言,写权限意味着我们可以在该目录下新建和删除文件。这意味着,文件的创建和删除并不取决于文件本身,而是取决于文件所处的目录!
什么是可执行权限( x )?
对于文件而言,读权限意味着我们可以执行这个文件,前提是这个文件是可以被执行的,比如代码文件,而文本文件不可以被执行!
因为可执行文件数量较少,不可以被执行的文件数量较多, 当我们新建一个文件时,默认是没有可执行权限的。
对于目录而言,可执行权限意味着我们可以进入这个目录,我们才可以 cd 进入该目录。
而当我们新建一个目录时,默认有可执行权限,因为我们默认一个目录是可以被进入的。
什么是粘滞位( t )?
root 目录下,有一个 tmp 目录,tmp 目录的所有者和所属组都是 root,所有的用户可以在该目录下创建文件并共享文件,但是这个目录的所有权限对所有用户都是开放的,意味着该目录下,即使我不是文件的拥有者,我们也可以删除别人的文件,如果我们把 other 的 w 权限关掉,虽然别人不能删除我们的文件了,但是我们自己也没办法创建文件了!
为了实现这个需求,Linux 有了粘滞位 t ,只有目录的创建者、文件的创建者、root 才可以删除文件,其他人都不可以删除文件!
权限限制了谁?
除了上面的 3 个权限外,我们还需要了解文件有 3 类访问者:
user:文件的拥有者;
group:文件的所属组;
other:除了文件的拥有者和所属组之外的用户都属于 other。
不同的文件访问者对这个文件有不同的权限。文件权限的 9 个字母可以分为 3 组,第一组对应文件拥有者的权限,第二组对应文件所属组的权限,最后一组对应 other 的权限。
在显示文件属性时,会显示出文件拥有者、所属组的名字,但是不会显示 other 的名字,因为文件的拥有者、所属组是可列的,而 other 是不可列的,没有显示的必要。
如果文件访问者拥有某个权限,则对应的位置会显示对应的字母,没有某个权限,则对应的位置显示 - 。
权限只会限制普通用户,不会限制 root !
权限如何转换为八进制?
rwx 权限的排序是固定的,如果一个文件具有某个权限,我们可以在对应的权限位标为 1,没有权限则标为 0,比如 rwx 对应的二进制就是 111,r-x 对应的二进制就是 101。
有了对应的二进制后,我们可以把二进制转为八进制,二进制的 111 对应的八进制为 7,101 对应的八进制为 5,这样就可以实现权限转换为八进制。
总结:权限 - > 二进制 - > 八进制
什么是权限掩码?
当我们创建文件时,发现每个文件都会有默认的权限,而默认的权限并不是 777,而是 664,当我们创建目录时,默认权限为 775,这是因为权限掩码 (umask)的存在!
首先,新建一个文件时,起始权限为 666(110 110 110),因为可执行的权限并不是每个文件都需要,所以默认没有可执行权限,故起始权限为 666。而新建一个目录时,起始权限就是 777。
查看权限掩码:
权限掩码虽然是 4 位,但是我们只看后 3 位,权限掩码也是采用八进制,比如 002 实际上为 000 000 010。
有了起始权限之后,权限掩码可以在起始权限的基础上去掉一些权限,从而产生默认权限:比如文件的起始权限为 664(110 110 100),权限掩码中如果对应的权限为 1,则在起始权限中不可以具有该权限!
我们也可以修改权限掩码:
可以看出,修改权限掩码之后,新建的文件的默认权限已经不一样了。
怎么修改权限?
chmod [ 参数 ] 权限 文件名 就可以修改文件的权限,添加权限用 +,去掉权限用 - :
修改文件所有者的权限:
修改文件所属组的权限:
修改 other 的权限:
一次性修改多个访问者的多个权限:
注意一次性修改多个用户的多个权限时,中间需要加 ,:
一次性修改所有的访问者:
一次性修改同一个用户的多个权限:
用八进制修改用户权限:
输入的八进制数是最终用户得到的权限转换过来的:
如何修改文件的拥有者、所属组?
修改文件的拥有者:chown 用户名 文件名
修改文件的所属组:chgrp 用户名 文件名
没有修改 other 的指令!
即使我们是文件的拥有者,也不可以随意修改文件的拥有者或所属组,这个操作必须由 root 来实现,一共有 2 种实现方式:
1、切换成 root 用户来修改文件的拥有者或所属组:
2、用 sudo 提权:
问:假设文件的所有者也是文件的所属组中的成员,当我们把文件的所有者的权限全部去掉时,文件的所有者可以 以文件所属组的身份去使用文件的权限吗?
不可以,在使用文件的权限时,系统会先判断当前用户是否属于文件的所有者:
1、如果是,那就会匹配文件所有者的权限,不会再去匹配当前用户是否为文件的所属组;
2、如果不是,再去判断当前用户是否属于文件的所属组,再去匹配对应的权限。
也就是说,当前用户属于哪个文件访问者的身份,就会匹配对应的权限,而且只会判断一次身份!