Linux文件权限基础

重大失误操作:

chmod -R +x /   --》更改根目录下的所有文件的权限为可执行权限
chmod -R 777 /  --》没安全性可言了
rm -rf /        --》删除根下面的全部文件

设置用户不能登录系统

  1. 可以在/etc/shadow文件里的密码字段前面添加!!
  2. 可以禁用用户,或者修改/etc/passwd文件里用户的shell为/sbin/nologin。用户都不能登录系统。

访问权限

  • -r 可读(read):允许查看文件内容、显示目录列表
  • -w 可写(write):允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
  • -x 可执行(execute):允许运行程序、切换目录

归属(所有权)

  • -u 文件拥有者(owner):拥有该文件或目录的用户帐号
  • -g 属组(group):拥有该文件或目录的组帐号
  • -o 其它人(others):除了属主和属组的其他人
  • -a 所有的人(all)

这里写图片描述


read权限

  1. 对文件而言,就是查看里面的内容
    • cat,vim,less,more等
  2. 对目录而言,就是查看目录里的内容
    • ls

write (写)

1.对文件而言,就是修改里面的内容
vi
2.对目录而言,就是新建、删除、重命名、移动
mkdir 、touch 、rm、mv、cp

execute 可执行

  1. 对文件而言,就是执行这个文件里的命令。例如执行脚本文件。
  2. 对目录而言,就是进入目录 可以使用cd 命令进入。
# su xiaoniu  
切换用户到xiaoniu,继承切换前root用户的环境变量,原来在什么路径,切换后还是在什么路径。

chmod命令

这里写图片描述
chmod 是用来修改权限 :

  • u:user
  • g:group
  • o:others
  • a:all
  • +:是增加权限
  • -:是去掉权限
  • =:直接等于某些权限
  • -R:递归修改指定目录下所有文件、子目录的权限
    这里写图片描述

例子1:(推荐用数字修改!)

# chmod o+x,g+w passwd 
--》其他人增加执行,小组增加写的权限# chmod o=r,g=r,u=r passwd 
--》passwd文件的属主,属组,其他,均为读# chmod 444 passwd 
--》passwd文件的属主,属组,其他,均为读。# chmod +x passwd 
--》所有的用户都会增加一个x权限# chmod a+w passwd 
--》所有的用户增加一个w权限# chmod a-xw passwd 
--》所有用户同时去掉w和x的权限 # chmod a=rwx  hunan  -R 
--》修改hunan目录及子目录的权限为rwx 

umask 权限掩码(当前用户新建文件和目录的时候默认的权限)

root用户下默认新建文件的权限为644,新建目录的权限755 。
[root@liupeng lianxi]# umask      
--》查看用户的权限掩码
0022               
--》(组和其他人去掉写的权限)前面的0是特殊权限位
#umask -S  查看当前用户的权限设置
u=rwx,g=rx,o=rx

umask用法:

$ umask 077  
--》直接修改权限掩码,但是这种方式修改只是临时有效,重启恢复原来的 

vim /etc/bashrc 此文件里规定里umask的默认值
UID大于199同时用户名和组名相同,umask值就是002,否则为022。

if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
   umask 002
else
   umask 022
fi

系统默认umask

不推荐修改系统默认umask
用户属于那个组,会自动继承这个组的权限

练习:

 1.新建文件夹/perm
 2.进入/perm,复制/etc/hosts文件到当前目录下
 3.修改hosts文件的权限为,属主有读写执行,属组有读执行,其他人没有任何权限
 4.新建xiaoxu目录,修改权限为任何人都有读写执行的权限
 5.修改xiaoxu的权限为只有属主有读写执行,其他任何人都没有读写执行的权限
 6.修改xiaoxu的权限为所有的人都没有读写执行的权限
 7.查看/etc/passwd和/etc/shadow文件的权限
 8.查看/tmp目录的权限
 9.查看/root目录的权限
 10.查看/home/目录下所有目录的权限

答案8:

drwxr-xr-x.   2 root        root       12288 Apr 13 09:05 sbin

PS:
权限部分。代表这目录设置了selinux权限,受selinux权限策略的影响
selinux 是linux下为了保障linux的安全,使用的一套安全措施。(可以理解为一个防火墙)
建议linux服务器将此功能禁用,因为太安全会影响机器的性能和我们实验的效果。

# getenforce  --》查看selinux的状态
Disabled          --》说明selinux禁用了
# getenforce  
Enforcing    --》说明selinux是强制开启的状态
selinux禁用步骤:
 1.# vim /etc/sysconfig/selinux
SELINUX=disabled  --》修改为disabled
 2.重新启动机器,下次会自动禁用selinux
临时让selinux无效
# getenforce
Enforcing
# setenforce 0
# getenforce
Permissive
如果你使用getenforce查看的selinux的状态是disabled 就不需要使用上面的命令了。

chown 命令(修改属主和属组)

$ chown xiaoniu:root songshan --》错误,会报错。
普通用户不能执行这个命令chown ,只能root用户执行。

具体例子:

# chown xiaoniu songshan    --》只把属主改为xiaoniu
# ll -d songshan    --》songshan是文件夹
drwxrwxr-x 2 xiaoniu kkk 4096 May 25 11:18 songshan
②# chown xiaoniu:root songshan    --》属主为xiaoniu 属组为root 
[root@teacher lianxi]# ll -d songshan
drwxrwxr-x 2 xiaoniu root 4096 May 25 11:18 songshan
PS# chown xiaoniu.root songshan  使用.和:效果一样# chown -R kkk.kkk shenongcheng --》将shennongcheng目录及子目录的属主和属组都修改为kkk
# chown  :shaolinshi songshan --》修改属组为shaolinshi 

chgrp 修改属组(与用chown 属主:属组修改,效果一样)

# ll
total 36
-rw-r--r-- 1 root    root          0 May 25 10:13 dengchao
drwxr-xr-x 2 root    root       4096 May 25 11:14 huashan
drwxrwxrwx 3 root    root       4096 May 25 10:07 hunan
drwxr-xr-x 2 root    root       4096 May 25 11:31 wudangshan
drwxr-xr-x 2 root    root       4096 May 25 10:13 zhongguohehuoren
# groupadd wudang
# chgrp wudang wudangshan    --》把wudangshan加到wudang组里
# ll -d wudangshan
drwxr-xr-x 2 root wudang 4096 May 25 11:31 wudangshan

练习:

 1.进入/tmp目录
 2.新建用户zhaomin,然后使用zhaomin登录,进入/tmp目录
 3.新建目录dadu
 4.新建用户wuji
 5.将dadu目录的属主修改为wuji所有,属组修改为wudang所有。
 6.新建目录 mingjiao/guangmingding目录
 7.修改mingjiao目录及子目录的属主和属组都为wuji

newgrp 修改用户的有效组,当用户属于多个组的时候,可以更改

chattr 修改文件的特殊属性

chattr:修改linux文件系统里文件的特殊的属性

  • a属性表示只能追加,不能删除里面的内容;
  • i属性表示写保护,不能修改。

具体例子:

# chattr +i /etc/passwd  --》给/etc/passwd文件添加i属性,相当于锁住了。不能修改此文件了。
# useradd  xiaochen123
useradd: cannot open /etc/passwd  --》不能添加用户# chattr +a jiuyangshengong/ --》添加a属性,只能追加,不能删除了。
# lsattr -d jiuyangshengong/    --》查看此文件的ACL访问控制列表。
-----a-------e- jiuyangshengong/
PS:即,加了a属性后,只能新建文件、文件夹,但是建立后不能删除。

练习:

1.新建目录taohuadao,要求taohuadao目录不能被删除,只能往目录里新建文件或者目录
2.新建一个空文件honghuamiji ,要求只能往honghuamiji里追加内容不能删除里面的内容
3.新建目录wudang,组wudang目录下新建空文件zhangsanfeng,要求不能删除wudang目录下所有的文件
4.复制/etc/passwd到当前目录下,设置passwd文件不能被修改
5.去掉honghuamiji文件的特殊属性,要求能删除里面的内容

suid 权限位(黄马卦、尚方宝剑)、sgid

当某个命令具有suid权限位的时候,普通用户在执行这个命令的时候,会具有root用户的权限

查看passwd命令的suid权限位

# ll /etc/shadow  --》默认只有root用户可以修改
---------- 1 root root 2791 May 25 14:12 /etc/shadow
# which passwd
/usr/bin/passwd
# ll /usr/bin/passwd  
    passwd文件默认具有suid权限位,普通用户修改密码的时候,是以root用户的身份去修改密码的,这样可以达到修改/etc/shadow文件里的密码的作用
-rwsr-xr-x. 1 root root 25980 Feb 17  2012 /usr/bin/passwd

练习:把tail命令加suid权限位

# which tail
/usr/bin/tail
②# ll /usr/bin/tail
-rwxr-xr-x 1 root root 62636 Apr 17  2012 /usr/bin/tail
③# chmod u+s /usr/bin/tail  --》授予tail命令suid权限位# ll /usr/bin/tail
-rwsr-xr-x 1 root root 62636 Apr 17  2012 /usr/bin/tail
⑤# su - weixiaobao$ tail -1 /etc/shadow
weixiaobao:$6$Of8lblam$iToAGG5QzEVF3uFZITkKpctHIkLPOxABKc6zjt6I9ZYXny6/W2NK5WOkLnUBgG67f2fZfsGyzWO6RAbYdRTJH0:15850:0:99999:7:::
PS# chmod u-s /usr/bin/tail  取消tail命令suid权限位

建议:不要将所有的命令都赋予suid权限位,这样对系统不好,不安全!!

操作对象 特殊权限 功能
文件 SUID:以文件属主的权限执行文件
SGID:以文件属组的权限执行文件

sticky 粘滞位

给某个目录设置粘滞位权限后,所有的用户互相之间不能删除别人的目录和文件,就算目录的权限为777。

具体例子:

# mkdir /houcheshi
# chmod 777 /houcheshi
# ll -d /houcheshi
drwxrwxrwx 2 root root 4096 May 25 15:55 /houcheshi
# chmod1777 /houcheshi/
# su lihao
$ ls
[lihao@teacher houcheshi]$ touch wahaha
[lihao@teacher houcheshi]$ ll
total 0
-rw-rw-r-- 1 lihao lihao 0 May 25 16:02 wahaha

# su tanghailong
[tanghailong@teacher houcheshi]$ ls
wahaha
[tanghailong@teacher houcheshi]$ ll
total 0
-rw-rw-r-- 1 lihao lihao 0 May 25 16:02 wahaha
$ rm -rf wahaha  删除不成功,因为设置了粘滞位
rm: cannot remove `wahaha': Operation not permitted
$ ll -d /houcheshi/
drwxrwxrwt 2 root root 4096 May 25 16:02 /houcheshi/

难点:
如果对父目录有完全控制(读写执行)的权限,可以对目录下的文件进行删除,但是对父目录下的子目录里的文件就不能进行完全控制了,需要看权限。

一个用户属于某个组,会自动继承这个组里的权限

练习:

1.新建3个组,wudang、shaolin、huashan
2.新建用户qingshu 加入到wudang组
3.新建用户xiaozhao 加入到shaolin组
4.新建用户linghu,liuyang加入到huashan组
5.新建一个目录wulin要求qingshu有读写执行的权限,xiaozhao有读执行的权限,linghu没有任何权限,如何实现?

[root@teacher lianxi]# mkdir wulin
[root@teacher lianxi]# ll -d wulin
drwxr-xr-x 2 root root 4096 May 25 16:40 wulin
[root@teacher lianxi]# chown qingshu wulin
[root@teacher lianxi]# ll -d wulindrwxr-xr-x 2 qingshu root 4096 May 25 16:40 wulin
[root@teacher lianxi]# chown :shaolin wulin
[root@teacher lianxi]# ll -d wulin/
drwxr-xr-x 2 qingshu shaolin 4096 May 25 16:40 wulin/
[root@teacher lianxi]# chmod 750 wulin
[root@teacher lianxi]# ll -d wulin/
drwxr-x--- 2 qingshu shaolin 4096 May 25 16:40 wulin/

ACL访问控制列表、getfacl、setfacl

ACL(Access Control List):访问控制列表
一个文件/目录的访问控制列表,可以针对任意指定的用户/组分配RWX权限。

getfacl -》 get file access control lists -》查看/获得
setfacl -》set file access control lists -》设置

语法:
设置ACL:setfacl指令
格式: setfacl 选项 规则 文件
常用选项

  • -m:新增或修改ACL中的规则(–modify)
  • -b: 删除所有ACL规则(–remove-all)
  • -x: 删除指定的ACL规则 (–remove)

规则:
ACL类型

  • 存取型ACL(Access ACL):文件或目录 (默认)
  • 预设型ACL(Default ACL):只能对目录(格式:在存取型ACL的基础上加了个d:)

预设型ACL(Default ACL)
格式:

  • setfacl –m default:类型:特定的用户或组:权限
  • setfacl –m d:类型:特定的用户或组:权限。

设置了预设型ACL的目录,其下的所有文件或者子目录就都具有了主目录的ACL权限,并且子目录也同样有预设的ACl权限(会继承父目录的权限)。

具体例子:

# setfacl -m m::r gongda  设置最大权限为读,所有的用户都生效
# getfacl gongda/
# file: gongda/
# owner: root
# group: root
user::rwx
user:linghu:rwx #effective:r--    实际权限
group::r-x  #effective:r--
group:huashan:---
group:wudang:rwx    #effective:r--
group:shaolin:---
mask::r--    最大权限
other::r-x

标准例子2:

# mkdir jingzhou
# useradd liubiao 新建用户liubiao
# ls
gongda  hunantv  jingzhou
# setfacl  -m d:u:liubiao:rwx jingzhou -》设置默认权限
# getfacl jingzhou/
# file: jingzhou/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:liubiao:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
  • 对文件夹的操作的权限,主要是看当前目录里有什么权限,如果父目录(当前目录)有rwx的权限,是可以在父目录(这个目录)下新建文件夹或文件;
  • 但是,如果对父目录(这个目录)下的子文件夹没有w权限,是不能新建文件夹的。

setfacl、getfacl命令练习

1.新建3个组,shuiguo,mifen ,shaokao
2.新建3个用户,pingguo属于shuiguo组,
jingshi属于mifen组
yueyang属于shaokao组
3.在根目录下新建目录food,再将/etc/passwd
文件复制到food目录下
4.设置权限,passwd文件能被shuiguo组读写,
jingshi这个用户能读写执行
yueyang这个用户不能进行任何操作
5.然后去验证
原文地址:https://www.cnblogs.com/lpeng94/p/12546507.html