修改权限
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/shadow2.创建用户组 信息记录到 > /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