Linux用户与权限

191 阅读3分钟

Linux用户与权限

用户

用户分为普通用户和root用户,普通用户的命令行提示符为$,root用户的命令行提示符为#

cat@cat $ whoami
cat
root@cat:/home/cat/cat# whoami
root

创建用户:使用useradd命令

root@cat:/home/cat/cat# useradd A

删除用户:使用userdel命令

root@cat:/home/cat/cat# userdel A

查看系统中所有的用户的信息:cat /etc/passwd

root@cat:/home/cat/cat# cat /etc/passwd | grep  cat
cat:x:1000:1000:cat,,,:/home/cat:/bin/bash

文件权限与目录权限

在Linux下新建一个文件,默认权限是664,文件的拥有者和属组均具有文件的读写权限,其它人只有读权限

cat@cat $ touch a.txt
cat@cat $ ls -l a.txt 
-rw-rw-r-- 1 cat cat 0 Jun 22 20:02 a.txt

在Linux下新建一个目录,默认权限是775

cat@cat $ mkdir Adir
cat@cat $ ls -dl Adir
drwxrwxr-x 2 cat cat 4096 Jun 22 20:11 Adir

目录的拥有者和所属组具有目录的所有权限,other拥有目录的读和执行权限,没有写权限

文件权限的理解:

  • 读权限:具有读权限,可以使用cat、more、less等命令查看文件中的内容
  • 写权限:具有写权限,可以使用vim、nano编辑文件内容,同时可以使用echo配合重定向向文件中写入内容
  • 执行权限:具有执行权限,表示可以执行该文件
  • 创建的普通文件默认没有执行权限,通过gcc/g++编译完成的可执行文件,拥有者和所属组具有执行权限

目录权限的理解:

  • 读权限:具有读权限,可以使用ls等命令查看目录中的内容,查看目录中的内容本质上是在查看目录下所有文件的文件名及其属性,因为文件名与inode的映射属于目录的内容,所以查看目录下的数据需要具有对目录的读权限
  • 写权限:具有写权限,可以使用touch、mkdir等命令在目录下创建内容,该操作本质上是在向当前目录写入一组文件名/目录名与inode的映射;同时可以使用rm命令删除目录中的内容,本质上是从当前目录中去除了一组文件名与inode的映射
  • 执行权限:具有执行权限,意味着可以进入目录

权限掩码

创建一个目录,其权限是775,创建一个文件,其权限是664,这与权限掩码有关,新建文件默认权限是0666,新建目录默认权限是0777,真实权限=默认权限&(~umask),其中umask称为权限掩码,普通用户的权限掩码是0002

cat@cat $ umask
0002

root用户的权限掩码是0022

root@cat:/home/cat/cat# umask
0022

权限掩码可以修改

umask 0000 #修改权限掩码为0000,这样新建一个文件权限就是0666,目录权限就是0777

粘滞位

只要对目录有写权限,那么就可以删除目录中的内容,A用户创建了一个文件a.txt,其权限为660,表示other不能对该文件进行任何操作,B用户与A用户处于同一个目录,B用户对于a.txt而言,属于other,无法读写a.txt,但是只要B用户对所在的目录有写权限,B用户就可以删除a.txt。

为了解决这种不合理的问题,可以给目录设置粘滞位,给目录设置粘滞位之后,就可以解决不同用户在同一个工作目录下可能导致的误删问题。

root@cat:/home/cat/cat# ls -dl Adir/
drwxrwxr-x 2 cat cat 4096 Jun 22 20:11 Adir/
root@cat:/home/cat/cat# chmod +t Adir/
root@cat:/home/cat/cat# ls -dl Adir/
drwxrwxr-t 2 cat cat 4096 Jun 22 20:11 Adir/