Linux 权限解读

Linux 权限解读

Linux 系统上对文件的权限有着严格的控制,用于如果相对某个文件执行某种操作,必须具有对应的权限方可执行成功。

Linux的文件权限有以下设定:

  • Linux 下文件的权限类型一般包括读、写、执行,对应字母为rwx
  • Linux 下权限的属组有:拥有者 、群组 、其它组,总共三种

如果我们要表示一个文件的所有权限详情,有两种方式:

  • 十位二进制表示法,(三个属组每个使用二进制位,再加一个最高位共十位),可简化为三位八进制形式
  • 十二位二进制表示法(十二个二进制位),可简化为四位八进制形式

1. 十位权限

-rw------- (600)    只有拥有者有读写权限
-rw-r--r-- (644)    只有拥有者有读写权限;而属组用户和其他用户只有读权限
-rwx------ (700)    只有拥有者有读、写、执行权限
-rwxr-xr-x (755)    拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限
-rwx--x--x (711)    拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限
-rw-rw-rw- (666)    所有用户都有文件读、写权限
-rwxrwxrwx (777)    所有用户都有读、写、执行权限

# 其中:- 代表无权限,r 代表读权限,w 代表写权限,x 代表执行权限

1.1 第一位:表示文件类型

d 代表的是目录(directroy)
- 代表的是文件(regular file)
s 代表的是套字文件(socket)
p 代表的管道文件(pipe)或命名管道文件(named pipe)
l 代表的是符号链接文件(symbolic link)
b 代表的是该文件是面向块的设备文件(block-oriented device file)
c 代表的是该文件是面向字符的设备文件(charcter-oriented device file)

1.2 后九位:不同属组的三种操作权限

Linux 权限总共有三个属组,这里给每个属组使用三个位置来定义三种操作权限,后九位每个位置的意义(代表某个属组的某个权限)都是固定的,可以用三位二进制数表示为:

r-- = 100
-w- = 010
--x = 001
--- = 000

转换成八进制数,r=4, w=2, x=1, -=0(数字设置权限:4代表读,2代表写,1代表执行),所以文件的权限可以表示为三位八进制数。

1.3 chmod 修改权限

可以使用八进制数字或者字母形式修改:

# 使所有用户获取 a.sh 全权限
chmod ugo+r a.sh 
chmod a+r a.sh

# u g o 代表不同的属组
# a 可以指代全部属组
# +- 用于增加删除 rwx 权限

# 复杂案例
chmod a+r,ug+w,o-w a.conf b.xml

2. 十二位权限(Linux附加权限)

Linux 除了设置正常的读写操作权限外,还有一类 Linxu 附加权限,包括:

  1. SET位权限 suid, sgid
  2. 粘滞位权限 sticky

2.1 SET位权限

suid/sgid 是为了使“没有取得特权用户要完成一项必须要有特权才可以执行的任务”而产生的。 一般用于给可执行的程序或脚本文件进行设置。

其中 suid 表示对属主用户增加SET位权限,sgid 表示对属组内用户增加SET位权限。执行文件被设置了 suidsgid 权限后,任何用户执行该文件时,将获得该文件属主、属组账号对应的身份。

不恰当地使用这些位可能使系统的安全遭到破坏。所以应该尽量避免使用SET位权限程序。

  • suid(set User ID,set UID):进程执行一个文件时通常保持进程拥有者的UID。如果设置了suid位,进程就获得了该文件拥有者的UID
  • sgid(set Group ID,set GID):进程就获得了进程组的UID

2.2 SET位权限表示形式(10位权限)

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

  • 如果文件设置了 suid,还设置了x,则相应的执行位表示为s(小写)
  • 如果文件设置了 suid,但没有设置x位,它将表示为S(大写)
-rwsr-xr-x    表示设置了suid,且拥有者有可执行权限
-rwSr--r--    表示suid被设置,但拥有者没有可执行权限
-rwxr-sr-x    表示sgid被设置,且群组用户有可执行权限
-rw-r-Sr--    表示sgid被设置,但群组用户没有可执行权限

2.3 SET位权限修改

SET位权限可以通过chmod命令设置,给文件加suidsgid的命令如下(类似于上面chmod赋予一般权限的命令):

chmod u+s filename 	# 设置suid位
chmod u-s filename 	# 去掉suid设置
chmod g+s filename 	# 设置sgid位
chmod g-s filename 	# 去掉sgid设置

2.4 粘滞位权限

粘滞位权限即sticky。一般用于为目录设置特殊的附加权限,当目录被设置了粘滞位权限后,即便用户对该目录有写的权限,也不能删除该目录中其他用户的文件数据。

设置了粘滞位权限的目录,使用ls查看其属性时,其他用户权限处的x将变为t

2.5 粘滞位权限表示形式(10位权限)

一个文件或目录被设置了粘滞位权限,会表现在其他组用户的权限的可执行位上:

  • 如果文件设置了sticky,还设置了x,其他组用户的权限的可执行位为t(小写)
  • 如果文件设置了sticky,没有设置x位,它将表示为T(大写)

2.6 粘滞位权限修改

使用chmod命令设置目录权限时,+t-t权限模式可分别用于添加、移除粘滞位权限。

2.7 十二位的权限表示方法

附加权限除了用十位权限形式表示外,还可以用用十二位字符表示:

11 10 9 8 7 6 5 4 3 2 1 0
S  G  T r w x r w x r w x

在这十二位的每一位上都置值。如果有相应的权限则为1, 没有此权限则为0

-rw-r-sr-- 的值为: 0 1 0  1 1 0  1 0 0  1 0 0
-rwsr-xr-x 的值为: 1 0 0  1 1 1  1 0 1  1 0 1
-rwsr-sr-x 的值为: 1 1 0  1 1 1  1 0 1  1 0 1 
-rwsr-sr-t 的值为: 1 1 1  1 1 1  1 0 1  1 0 1

如果将则前三位SGT也转换成一个二进制数,则:

  • suid 的八进制数字是4
  • sgid 的代表数字是 2
  • sticky 位代表数字是1

十二位权限便可以转化为4个八进制数。


假设 netlogin 是 root 用户创建的一个上网认证程序,如果其他用户要上网也要用到这个程序,
那就需要 root 用户运行 chmod 755 netlogin 命令,使其他用户也能运行 netlogin。

但假如 netlogin 执行时需要访问一些只有 root 用户才有权访问的文件,
那么其他用户执行 netlogin 时可能因为权限不够还是不能上网。

这种情况下,就可以用 chmod 4755 netlogin,
设置其他用户在执行 netlogin 也有 root 用户的权限,从而顺利上网。

参考链接 - Linux权限详解(chmod、600、644、666、700、711、755、777、4755、6755、7755)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值