//权限与用户是强相关的,这里先简单介绍下linux的不同类型用户

一、linux用户

1、Linux系统中的3类用户
1)管理员:比如root用户,权限最大的用户,拥有所有权限
2)系统用户
系统用户:在红帽5或者6系列的系统中,系统用户的uid值为0-499;不同发行版可能不一致,以实际实现为准;
系统用户一般用于守护进程/服务使用,一般不允许登录系统(即/sbin/nologin),这样可以降低对应进程的权限
3)普通用户
普通用户:一般用于人机交互登录的账户
useradd、id、groupadd、userdel、usermod等命令可以设置操作用户名

二、文件类型

Linux文件类型常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件等。

1)普通文件

Linux中最多的一种文件类型, 包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件。第一个属性为 [-] 。如[-rw-r–r–]

2)目录文件

在linux中,它的思想是一切皆是文件。第一个属性为 [d],例如 [drwxr-xr-x]。

3)字符设备文件

串行端口的接口设备,例如键盘、鼠标等等。第一个属性为[c]。

4)块设备文件

存储数据以供系统存取接口设备,简单而言就是硬盘。如/dev/hda1。第一个属性为 [b]。

5)套接字文件

第一个属性为[s]。

6)管道文件

FIFO也是一种特殊的文件类型,第一个属性为 [p]。

7)链接文件

软连接文件。第一个属性为 [l],例如 [lrwxrwxrwx]。

ls\file\stat等命令可以查看文件信息

文件权限

1、普通文件权限

r : read权限
w : write权限
x : execute权限

chmod :设置文件权限
chown :设置文件的所有者和所有主
//详细操作可查看man手册

新建一个文件时,默认文件权限受umask属性控制
由上面可以看出默认权限有4组数字,其中第一个代表特殊权限,后三个代表普通权限(具体权限后面会描述)

root@test:/home/myuser# umask 
0022
root@test:/home/myuser# umask  -S
u=rwx,g=rx,o=rx

在默认权限的属性上,目录与文件是不一样的。。我么知道x权限对于目录来说是非常重要的,但是一般文件的建立则不应该有执行的权限,因为一般文件通常是用于对数据的记录,当然不需要执行权限了。因此在默认情况下:

1)若用户建立的为文件则默认没有可执行权限,即只有可读可写权限,也就是默认文件权限最大为666,所以对应类似sh脚本等需要手动添加可执行权限。
2)若用户建立的为目录,则由于x与是否可以进入该目录有关,因此默认所有权限均开放,即默认权限最大为777

2、特殊文件权限

SUID :让程序执行者,临时获取程序所有者的身份;
SGID:让程序执行者,临时获取程序所有组的身份,让目录内的新建文件,继承目录所有组的 名称;
SBIT:粘滞位、保护位,让目录内的文件,只能自己删除自己的;

一个文件被设置了SUID或SGID位,会分别表现在所有者或同组用户的权限的可执行位上。例如:

1)-rwsr-xr-x表示SUID和所有者权限中可执行位被设置
2)-rwSr–r–表示SUID被设置,但所有者权限中可执行位没有被设置
3)-rwxr-sr-x表示SGID和同组用户权限中可执行位被设置
4)-rw-r-Sr–表示SGID被设置,但同组用户权限中可执行位没有被设置

给文件加SUID和SGID的命令如下:

chmod u+s filename # 设置SUID位
chmod u-s filename # 去掉SUID设置
chmod g+s filename # 设置SGID位
chmod g-s filename # 去掉SGID设置
chmod o+t dirname #设置SBIT位
chmod o-t dirname #设置SBIT位

2.1、 SUID

SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者暂时拥有所有者的权限。

当s这个标志出现在文件拥有者的x权限上时,这个文件的权限状态“-rwsr-xr-x”,此时这种状态就被称为 Set UID ,简称为SUID的特殊权限。例如 /usr/bin/passwd :

-rwsr-xr-x 1 root root 68208 Mar 14 16:26 /usr/bin/passwd

特点:
1)SUID权限仅仅对二进制程序有效;
2)执行者对于该程序需要具有x的可执行权限;
3)本权限仅在执行该程序的过程中有效;
4)执行者将具有该程序拥有者的权限;
5)SUID仅可用在二进制程序上,不能够用在shell脚本上面;

Q:/usr/bin/passwd程序为什么要设置suid?
A:/etc/shadow文件中存储中linux用户相关的密码信息,所以此文件非root用户是不能任意修改和查看的,但非管理员用户又需要设置或修改自己的账号密码,既不让修改密码文件,又要修改密码,怎么实现呢?这就是suid要解决的问题:

1)普通用户对于/usr/bin/passwd程序来说有可执行的权限,所以普通用户能够执行passwd;
2)passwd的拥有者是root用户;
3)由于passwd程序带有suid标记,所以普通用户在执行passwd时会暂时获得root的权限;
4)通过步骤3,/etc/shadow可以被普通用户所执行的passwd所修改
5)另外,当普通用户cat去读取 /etc/shadow 时,却不能够读取,因为cat不具有SUID的权限,所以是不能够读取 /etc/shadow 的。//如果管理员将cat添加了suid,cat就可以看/etc/shadow文件内容了。

2.2、SGID

当s标志在用户属组的x位时则称为Set GID,简称为SGID。SGID可以针对文件或目录来设置。对于文件来说SGID具有如下功能:

1)SGID对二进制程序有用;
2)程序执行者对于该程序来说,需要具备x的权限;
3)执行者在执行的过程中将会获得该程序用户组的支持
4)事实上SGID也能够用在目录中,这也是一种很常见的用途。当一个目录设置了SGID的权限后,它将具有如下的功能:

  • 用户若对于此目录具有r和x的权限时,该用户能够进入目录;
  • 用户在此目录下的有效用户组将会变成该目录的用户组;
  • 用途:若用户在此目录下具有w的权限(可以新建文件),则用户所建立的新文件,该新文件的用户组与此目录的用户组相同;
2.3、 SBIT

当某个目录设置了SBIT位,那么该目录中的文件只能被其所有者执行删除操作。这样就保护了文件,避免被其它用户删除。

SBIT目前只针对目录有效,对于文件已经没有效果了,
SBIT对于目录的作用如下:

  • 当用户对于此目录具有w、x的权限时,即具有写入的权限;
  • 当用户在该目录下建立文件或目录时,仅有自己与root账户才有权力删除该文件或者该目录;
2.4、 SUID/SGID/SBIT权限设置
  • 数字设置
    我们已经知道通过数字形式更改权限的方式为【三个数字】的组合,那么如果在这三个数字前面再加上一个数字的话,最前面的那个数字就代表这几个特殊权限了。
    1)数字4代表SUID权限
    2)数字2代表SGID权限
    3)数字1代表SBIT权限

假设要将一个文件权限更改为[-rwsr-xr-x]时,由于s在用户权限位置中,所以是属于SUID.
所以在原先的744之前再加上4,也就是chmod 4744 filename 来设置。此外还有大S与大T的产生。

root@test:/home/test# ls -l testa
-rw-r--r-- 1 root root 0 May 30 19:31 testa
root@test:/home/test# 
root@test:/home/test# chmod 4744 testa 
root@test:/home/test# ls -l testa
-rwsr--r-- 1 root root 0 May 30 19:31 testa
root@test:/home/test# 
root@test:/home/test# 
root@test:/home/test# chmod 7766 testa 
root@test:/home/test# ls -l testa
-rwsrwSrwT 1 root root 0 May 30 19:31 testa
root@test:/home/test# 

最后一个例子怎么会出现大写的S与大写的T呢,因为s与t都是表示在x这个权限的,7666时user、group以及other都没有可执行权限x,所以大写的S、T代表的设置了suid/sgid,但没有执行权限。

  • 符号设置

SUID设置: u+s
SGID设置: g+s
SBIT设置: o+t

root@test:/home/test# ls -l testa 
-rw-r--r-- 1 root root 0 May 30 19:37 testa
root@test:/home/test# 
root@test:/home/test# chmod u+s testa
root@test:/home/test# ls -l testa 
-rwSr--r-- 1 root root 0 May 30 19:37 testa
root@test:/home/test# 
root@test:/home/test# chmod g+s testa
root@test:/home/test# ls -l testa 
-rwSr-Sr-- 1 root root 0 May 30 19:37 testa
root@test:/home/test# 
root@test:/home/test# chmod o+t testa
root@test:/home/test# ls -l testa 
-rwSr-Sr-T 1 root root 0 May 30 19:37 testa

其他

  • 文件属性
    chattr/lsattr可以设置查看文件属性,包括文件隐藏属性、锁定属性等,详细内容参考man手册
    文件属性是全局的,对所有用户生效,如设置文件不可删除,或者设置文件只能追加内容,不可以删除文件内容等

  • Setfacl、getfacl可以设置查看文件访问控制列表,精细化文件访问对象,如对具体某个用户或某个用户组设置不同的rwx权限。chmod等是设置不同种类的用户的权限,不能具体到单个用户名。

详细参考man手册

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐