权限

修改权限

chmod  ()  文件或目录    可以直接修改文件或目录的权限,选项必须放中间
# 数字修改
[root@localhost ~]# chmod 777 a.sh  数字必须放在chmod 后面,0777是最大权限,不考虑特殊权限的情况下

-R +  数字   :递归授权  可以直接修改文件或目录,修改目录下所有目录或文件的属性,最前面不能放,别的位置都可以放

# 字⺟修改
[root@localhost ~]# chmod a=rwx zls_quanxian   777  all  a=0 错  ,没有写的都是-
[root@localhost ~]# chmod u=rwx zls_quanxian
[root@localhost ~]# chmod g=rw zls_quanxian
[root@localhost ~]# chmod o=rx zls_quanxian
[root@localhost ~]# chmod u=rwx,g=rw,o=r zls_quanxian
[root@oldboy ~]# chmod u+rwx,g+rwx ,o+rwx yy2  中间不能有空格
chmod: cannot access ‘,o+rwx’: No such file or directory
# UGO⽅式修改(+-)
[root@localhost ~]# chmod o-x a.sh   可以同时减去两个
[root@localhost ~]# chmod u-w a.sh
[root@localhost ~]# chmod g-r a.sh
[root@localhost ~]# chmod u+x a.sh
[root@localhost ~]# chmod -x zls123   去掉所有的x
[root@localhost ~]# chmod +x zls123   加上所有的x
[root@localhost ~]# chmod u-r,g-rw,o-r zls_quanxian  中间不能有空格
[root@oldboy ~]# chmod  a+x  333 -R

rwx权限对文件的影响
r:⽂件可以读取内容,不能写,不能执⾏
w:⽂件可以写⼊内容,但是追加只能>>,不能vim,因为不能读取内容,所以不能修改⽂件内容,只能覆盖(vim 可以写入)
x:啥也不能⼲,普通用户因为没有读权限。所以⽆法执⾏⽂件中的内容,#root可以执行
rw:可读,可写,不能执⾏
rx:可读,可执⾏,不能写 
wx:可写,不可读,也不可以执行,root用户可以执行
rwx:可读,可写,可执⾏   深绿
注意:⽂件的rwx权限,只能针对⽂件内容,如果想要删除,或者移动,那么跟⽂件所在⽬录的权限有关
cp (读) mv (写) rm (写) 要看上一级目录的权限

rwx权限对目录的影响
r:可以查看⽬录下所有的⽂件 名 ,但是看不⻅⽂件或目录的详细信息,也不能看二级目录下的一切,不能移动文件不能移动目录,想看文件信息,#必须rx
rx:加上x权限,就可以看⻅⽂件的详细信息了 蓝 ,可以进子目录了,可以cp,不能rm,mv
w:啥也不是,不能删除目录下的文件,但是想要删除目录下的内容必须要有w
wx:可以创建,可以删除,不能查看,可以进入目录,ll显示权限不足
rw:可以查看⽬录下的⽂件,可以写入,但是不能删除,不能移动,不能拷⻉,可以查看文件内容
rwx:删除⽂件,创建⽂件,移动⽂件,拷⻉⽂件,查看  背景绿
x:啥也不是,#辅助查看,辅助删除,没有x就不能删除,有x就能进
-rwxr-x--- 1 zls qiandao 0 4⽉ 2 12:10 aaaa
zls⽤户: rwx
qiandao组: rx
其他⽤户:没有任何权限
zls:rwx
zls1:rx
zls2:0
chown 属主.属组  文件或目录
chown root.root /zls  .或:前后都不能有空格
chown root:root /zls
chown .zls /zls  .后面不能有空格
chown :zls /zls
chown zls . /zls  只修改属主,最多只能有一个空格
chown zls. /zls  修改属主和属组
chown zls: /zls  修改属主和属组
-rwxr-x--- 1 root root 0 4⽉ 2 12:10 aaaa
⽤户 ⽤户组
chown zls.zls aaaa
chown root.zls aaaa
chown zls.root aaaa
chown www.www /code
-R:递归修改属组和属主


SetUID权限
在Linux系统中,每个普通用户都可以更改自己的密码,这是合理的设置,问题是,普通哦用户的信息保存在 /etc/passwd文件中,与用户的密码在 /etc/shadow 文件中,也就是说,普通用户在更改自己密码时,修改了 /etc/shadow 文件中的加密密码,但是文件权限显示。普通用户对这两个文件都没有写权限。
当一个具有执行权限的文件设置了SetUID权限后,用户在执行这个文件时,将以文件所有者身份来执行,命令执行完成后该身份也就消失了

[root@oldboy ~]# stat 2.
  File: ‘2.’
  Size: 10244     	Blocks: 24         IO Block: 4096   regular file
Device: 803h/2051d	Inode: 33615068    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-04-03 12:02:14.752816436 +0800
Modify: 2020-04-03 11:58:46.135806488 +0800
Change: 2020-04-03 12:01:56.091815546 +0800
 Birth: -
 
[root@oldboy ~]# stat -c %a 2.
[root@oldboy ~]# stat 2. | grep 0644 | sed -nr 's#.*s: (0(.*)/-.*#1#p'
[root@oldboy ~]# stat 2. | sed -n '4p'| cut -c 11-13
[root@oldboy ~]# stat 2. | sed -n '4p' | sed -nr 's#.*(0(.*)/-.*#1#p'
[root@oldboy ~]# stat 2. | sed -nr '4s#.*(0(.*)/-.*#1#p'

[root@oldboy ~]# stat 2. | awk -F[0/] 'NR==4{print $2}'

[root@oldboy ~]# stat 2. | grep 0644 | cut -c 11-13
[root@oldboy ~]# stat 2. | grep 0644 | tr / 0 | cut -d 0 -f 2
[root@oldboy ~]# stat 2. | grep -w 0644 | tr 0 / | cut -c 11-13
[root@oldboy ~]# stat 2. | grep -o  "Access: ([0-9][0-9][0-9][0-9]" |grep -o  "[0-9][0-9][0-9]$"
[root@oldboy ~]# stat cs | grep 0755 | grep -o 755
[root@oldboy ~]# stat cs | grep -o 755

[root@oldboy ~]# stat 1.txt | head -4 | tail -1 | cut -d '0' -f2 |cut -d '/' -f1

# 使⽤五种⽅法,查看⽂件的权限,数字形式
[root@www ~]# stat 1.txt |awk -F '[(: 0/]+' 'NR==4{print $2}'
awk指定在一起的分隔符的时候,用+ ,有(的话注意转义( ,在一起的列忽略列数
[root@www ~]# stat 1.txt |sed -nr '4s#.*: (0(.*)/-.*#1#gp'
小心贪婪匹配,转义特殊符号
[root@www ~]# ls -l 1.txt |tr 'rwx-' '4210'|awk -F '' '{print $2+$3+$4
$5+$6+$7 $8+$9+$10}'  
awk指定分隔符的时候已经定义了变量,可以用$直接用,awk可以调用变量相加
[root@www ~]# stat 1.txt | grep -o "Access: ([0-9][0-9][0-9][0-9]" |grep -
o "[0-9][0-9][0-9]$"
644
[root@www ~]# quan="$( stat 1.txt | head -4 | tail -1 )" && echo
${quan:10:3}    双引号可以省略,不能用单引号
echo 也可以截取字符,quan已经定义了变量,可以用$直接调用,格式 echo ${变量:目标之前字符个数:目标字符个数},针对行
644 

# 特殊权限
passwd 是命令    和   /usr/bin/passwd  也是一个命令,像是软链接关系。/etc/passwd 是一个文件,

修改属主属组的话,原来属主属组位上的**s**会消失
[root@www ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6⽉ 10 2014 /usr/bin/passwd
[root@www ~]# ll /usr/bin/write
-rwxr-sr-x. 1 root tty 19624 4⽉ 11 2018 /usr/bin/write
[root@www ~]# ll /tmp/ -d
drwxrwxrwt. 9 root root 4096 4⽉ 3 09:49 /tmp/

SUID (set uid)

属主权限位上,本来应该是x执⾏权限出现了⼀个s ⼀般是针对可执⾏⽂件(二进制,命令)

如果一个没有执行权限的文件,属主权限位上有s 的话,s没有意义

/etc/passwd 上虽然有s ,普通用户可以修改自己的密码,/usr/passwd 属主权限位上如果有s ,虽然以root的身份去执行,但是还是不能修改别的用户的密码,这是程序设定的,没有路过去(或许这也是一种权限的问题把)

/usr/bin/passwd

文件有SUID,只是这个文件有SUID,里面的内容没有

sudo提权,整个用户有了root的权限

文件

如果⼀个可执⾏⽂件,在属主权限位的x位上有s权限,那么证明该⽂件有set uid特殊权限。
set uid:任何⽤户(除了root外)执⾏具有suid权限的⽂件时,会以该⽂件属主的身份去执⾏
属主权限位上有s的话,直接看 该文件或目录的 属主身份 去执行这个文件(root或普通用户),不看属主权限位
用于 :passwd  vim  (对命令文件授权加上s,属主又是root)
rwsr-xr-x  /usr/cat   那么cat 看哪都行,还可以追加

vim如果有setuid权限的话,一切普通用户都变成了root用户,可以执行root的写权限,针对 写 来说,可以vim /etc/sudoers   vim /root,然后把自己加入到sudo 文件中,这样可以继承root的一切权限,甚至创建用户

## SUID授权----4
# chmod ugo⽅式   (不能是字母授权)
[root@www ~]# chmod u+s ⽂件或⽬录
# chmod number⽅式 4000
[root@www ~]# chmod 4755 aaaa   添加属主位特殊权限s
[root@www ~]# chmod 4000 aaaa	添加属主位特殊权限,同时修改文件权限
[root@oldboy tmp]# chmod 0744 a.sh  取消属主位特殊权限
注意:当授权⽂件,原本属主位上有x权限时,是s,原本属主位上没有x权限时,是S

[root@oldboy tmp]# ll /usr/bin/passwd
-rws--x--x. 1 root root      27856 Aug  9  2019 passwd  (有没有s无所谓)

[root@oldboy ~]# ll /etc/passwd
-rwsr-xr-x 1 root root 2540 Apr  4 02:53 /etc/passwd(root的身份,zls的身份)
[root@oldboy ~]# chmod 644 /etc/passwd  (默认是0644)
[root@oldboy ~]# ll /etc/passwd
-rw-r--r-- 1 root root 2540 Apr  4 02:53 /etc/passwd

SGID (set gid)

目录

属组权限位上,本来应该是x执⾏权限出现了⼀个s ⼀般是针对⽬录(满权限),也有可执⾏⽂件(⼤部分针对⽬录)

[root@www ~]# ll /usr/bin/write
-rwxr-sr-x. 1 root tty 19624 4⽉ 11 2018 /usr/bin/write

1.针对⽤户组权限位修改,⽤户创建的⽬录或⽂件所属组和该⽬录的所属组⼀致。 2.当某个⽬录设置了 sgid后,在该⽬录中新建的⽂件不在是创建该⽂件的默认所属组 3.使⽤sgid可以使得多个⽤户之间共享 ⼀个⽬录的所有⽂件变得简单。 主要⽬的:共享⽬录(指定)

## SGID授权⽅式----2
# chmod ugo⽅式
[root@www ~]# chmod g+s /tmp/test/
# chmod number⽅式 2000
[root@www ~]# chmod 2000 3
注意:当授权⽂件,原本属组位上有x权限时,是s,原本属组位上没有x权限时,是S

[root@oldboy ~]# mkdir -m 2755 999   /root下创建一个共享目录
[root@oldboy ~]# ll 999
total 0
[root@oldboy ~]# ll 999 -d
drwxr-sr-x 2 root root 6 Apr 30 03:43 999
[root@oldboy ~]# mv 999 /
[root@oldboy ~]# ll /999 -d
drwxr-sr-x 2 root root 6 Apr 30 03:43 /999
[root@oldboy ~]# cd /999
[root@oldboy 999]# ll
total 0
[root@oldboy 999]# mkdir oo
[root@oldboy 999]# ll
total 0
drwxr-sr-x 2 root root 6 Apr 30 03:45 oo  普通用户创建目录,权限位,属组跟共享目录一样,属主是自己,创建文件,是普通的644权限,属主也是自己,这样属组位上没用w,同组的普通用户还是不能创建为文件,所以suid为了实现共享目录,是作用于*7*权限的目录的,s的作用就是使--目录的权限位跟共享目录一样,属组跟共享目录一样,不改变其他内容,是文件的属组跟共享目录一样,不改变其他内容
目录:--sgid--*7*--共享
文件:--sgid--*7*--自己设置文件770权限--共享

[root@oldboy 999]# touch ll               
[root@oldboy 999]# ll
total 0
-rw-r--r-- 1 root root 0 Apr 30 03:46 ll
drwxr-sr-x 2 root root 6 Apr 30 03:45 oo
[root@oldboy ~]# mkdir jj
[root@oldboy ~]# ll
drwxr-xr-x  2 root root     6 Apr 30 03:47 jj


[syya@oldboy ~]$ mkdir -m 000 ml
[syya@oldboy ~]$ ll -d ml
d--------- 2 syya syya 6 Apr 30 04:15 ml  000权限的目录
[syya@oldboy ~]$ rm -rf ml   普通用户相对于自己创建的文件或目录,不是 root,按规矩
[syya@oldboy ~]$ ll ml       办事,不过可以直接删除
ls: cannot access ml: No such file or directory

SBIT (粘滞位)

目录

限制其他用户的权限,在有sbit权限的目录中,只能操作自己 的文件或目录(只能读写执行自己的),限制其他用户的权限,只能授权目录

sticky (SI TI KI)粘滞 在其他⽤户权限位上,本来应该是x执⾏权限出现了⼀个t 普通⽤户对该⽬录拥有w和x权限,即普通⽤户可以在此⽬录中拥有写⼊权限,*如果没有粘滞位,那么普 通⽤户拥有w权限,就可以删除此⽬录下的所有⽂件,包括其他⽤户简历的⽂件。但是⼀旦被赋予了粘 滞位,除了root可以删除所有⽂件,普通⽤户就算有w权限也只能删除⾃⼰建⽴的⽂件,⽽不能删除其 他⽤户简历的⽂件。

** 系统中存在的 /tmp ⽬录是经典的粘滞位⽬录,谁都有写权限,因此安全成问题,常常是⽊⻢第⼀⼿跳 板。

/tmp 是系统设置的一个777 目录

[root@oldboy tmp]# ll -d /tmp/
drwxrwxrwt. 8 root root 188 Apr 3 08:15 /tmp/

## SB授权⽅式
# chmod ugo ⽅式----1
[root@www ~]# chmod o+t SB
# chmod number⽅式
[root@www ~]# chmod 1755 IT
注意:当授权⽬录,原本其他⽤户权限位上有x权限时,是t,原本其他⽤户权限位上没有x权限时,是T
作用对象 : wx rwx 目录,粘滞位可以防止普通用户(其他用户),删除别人的文件

[root@oldboy tmp]# ll -d /tmp/
drwxrwxrwt. 8 root root 188 Apr  3 08:15 /tmp/

命令中的''慈禧'' ,隐藏权限,额外权限

# 当创建一个用户的时候:1.创建用户   信息记录到 > /etc/passwd1.1 用户相关的密码  记录到 > /etc/shadow​2.创建用户组  信息记录到 > /etc/group2.1 用户组相关的密码 记录到 > /etc/gshadow​# chattr  上锁 chattr +i 文件或目录 ,可以查看追加和拷贝,可以覆盖,只有root可以使用无视用户的权限,是一种凌驾于rwx的权限+i 目录,root和普通用户可以进入上锁的目录,可以cp(文件)(到别的目录),不能创建目录或文件,不能删除或移动,只能查看目录下的目录或文件的内容  看-cp-执行(删根)​+i 文件   只能看。不能移动,不能删除,可以拷贝文件,并且拷贝出来的文件没有上锁,用vim只能看到文件内容,不能删除,不能追加​+a 文件  只能看和追加内容(不能覆盖),可以复制(文件),并且没有上锁,看-追加-cp-执行​+a 目录  可以看,可以创建文件或目录,可以拷贝文件​lsattr 目录或文件   只查看额外的权限,不能删除,移动-a    查看隐藏的权限-d    查看 目录 的权限​ai=a 可以同时用,可以追加创建用户设计到4个文件,/etc/passwd,/etc/shadow,/etc/group,/etc/gshadow只要锁住一个文件,root就不能创建用户

# umask
系统默认的umdsk 是-0022  (-2 减的就是w ),w很重要,可以配合x,执行删除,mv

创建目录:777 - umask

创建文件;   666 - umask

文件用666- ,因为系统自动-1-1-1  

UID=xxx   , 是系统自定义的一个变量

echo  $UID   =  id  -u     可以查看uid ,

创建一个目录,默认权限是755,创建一个文件,默认权限是666

```bash
[root@www ~]# vim /etc/profile
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else      
    umask 022 
fi
如果用户的uid 和 gid 名字一样,并且数值大于199,那么umask=0002,否则umask=0022


[root@www ~]# umask  查看umask
0022 = 22

mkdir dir
0777
0022
----
0755  所以创建一个目录,默认权限是755

touch file
0666 (系统自动-1-1-1)
0022
----
0644  所有创建一个文件,默认权限是644


[root@www ~]# umask 0033  自定义umask (临时修改)
[root@www ~]# umask
0033

dir:744
file:644

[root@www ~]# umask 0011  当umask中出现奇数时:目录计算方式不变,但是文件uask奇数位的结果要+1
dir:766
file:666

0777
0011
----
0766  (目录有奇数位,数值也不变)

0666
0011
----
0655 (结果奇数位+1)
0666

[root@www ~]# umask 0033
dir:733
file:622

# umask 0033 计算,当umask中出现奇数时:目录计算方式 不变 ,但是umask奇数位的结果要+1
0777
0033
----
0744

0666
0033
----
0633
0644



[root@www ~]# umask 0045
dir:732
0777
0045
----
0732

file:622

0666
0045
----
0622


[root@oldboy ~]# echo $UID
0
[root@oldboy ~]# echo "$UID"  弱引用
0
[root@oldboy ~]# echo '$UID'  强引用
$UID

# 总结
# SUID
作用:如果一个文件(或目录),被设置SUID的权限,那么任何用户执行该文件,都会以该文件属主身份去执行(root或者普通用户)

[root@www ~]# ll /etc/shadow  (系统默认权限,root可以修改)
---------- 1 root root 85555 4月   3 12:19 /etc/shadow
[root@oldboy ~]# ll /usr/bin/passwd      s-执行(普通用户bash)-结果 ,系统默认的suid权限,普通用户只能修改自己的账号密码,这是程序的原因
-rwsr-xr-x 1 root root 27856 Apr  4 05:09 /usr/bin/passwd
[root@oldboy ~]# ll -d /tmp/  (sbit粘滞位)限制别的普通用户的权限,是用户只能对自己的文件或目录操作
drwxrwxrwt. 11 root root 266 Apr  7 08:37 /tmp/



[root@oldboy ~]# vim 1.txt  编辑文件,写入 useradd syy
[root@oldboy ~]# ll 1.txt  644,默认没有执行权限
-rw-r--r-- 1 root root 9 Apr  7 16:58 1.txt
[root@oldboy ~]# /root/1.txt   没有执行权限所以报错,没有x就是不能执行(包括root)
-bash: /root/1.txt: Permission denied
[root@oldboy ~]# chmod a+x,u+s 1.txt
[root@oldboy ~]# ll 1.txt
-rwsr-xr-x 1 root root 9 Apr  7 16:58 1.txt
[root@oldboy ~]# /root/1.txt  文件有了执行权限,所以会执行里面的内容
  权限不足              (useradd syy)  
虽然以root的身份去执行这个文件,但是里面的内容还是在普通用户的bash 里执行的,所以有可能会显示没有权限(看里面的内容有没有牵涉到root),#用sudo 可以权限问题
没有x(执行权限)的目录或文件,root也不能执行。没有w的目录或文件,root可以写,没有r的目录或文件,root也可以读



[root@oldboy ~]# ll /etc/shadow
---------- 1 root root 3705 Apr  6 13:16 /etc/shadow
[root@oldboy ~]# vim /etc/shadow
dbus:!!:18336::::::0   虽然root用户对这个文件没有 任何权限,但是可以操作

# 创建一个用户需要修改几个文件
/etc/passwd  用户信息 644
/etc/shadow  用户密码 000

/etc/group   组名  644
/etc/gshadow 组密码 000

[zls@www ~]# ll /usr/bin/passwd  二进制文件,ll可以省略
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
[root@oldboy ~]# ll /etc/shadow  000文件
-rw------- 1 root root 3705 Apr  6 13:16 /etc/shadow
[root@oldboy ~]# ll /etc/passwd  普通文件
-rwxr--r-- 1 root root 2808 Apr  6 13:16 /etc/passwd
原文地址:https://www.cnblogs.com/syy1757528181/p/12813402.html