认识权限:
通过 ls -l 命令可以查到
r 4: 代表读权限 w:代表写权限 2 x:代表执行权限 1
一次下来
第一个 -:代表是文件
rw- :代表所有者(创建这个文件的)具有读和写的权限
r–:代表所属组 只具有读的权限
r–:代表其他人 只具有读的权限
也可以用数字表示为 644
一个文件的所有者或root 用户才能修改权限
chmod 命令:
chmod [ugoa][±][rwx][文件目录] u代表 所有者 g 代表所属组 o 代表其他人 a代表所有
Demo:
chmod u + x /etc/cho :给 /etc/cho文件 的所有者添加一个执行权限
chmod 777 /etc/cho 给文件所有者所属组其他人 都有读写执行权限
加上参数 -R 可以实现递归修改–即修改目录及目录下所有文件的权限
rwx 对于 目录 和 文件 是有区别的:
文件的 目录的
chown命令:
chown [用户] [文件或者目录] 改变文件的所有者
chown [用户组] [文件或者目录] 改变文件的所属组
chown root:test /project/ :把root 用户对于 /project目录的 所属组改成test
权限管理:
ACL权限介绍:
主要是为了解决权限身份不足的问题,有些时候,某些用户,我们既不希望它拥有所有者,所有组,其他人的权限,而是希望单独给他分配一种权限,这个时候呢,就需要用到ACL权限了。
怎么查看是否开启 ACL 权限呢 ACL权限相对于文件所在的分区来讲的
df -h 查看分区的使用状况:
dump2fs -h /dev/sda5 命令 因为这个是挂载在/ ,可以查看 / 的信息
到文件系统的时候会具体来说
Linux 系统默认下 都是开启了ACL 权限的,如果没有开启 ,则可以使用命令:mount -o remount,acl / – 临时的(重启之后就没了, 临时给根目录开启ACL权限。
要想永久生效 需要修改 /etc/fstab 文件:
在后面加上 acl 然后重启即可
setfacl命令
setfacl [-选项] 文件名 :设定ACL 权限
-m 设定ACL 权限
-x 删除指定的ACL权限
-b 删除所有的ACL权限
-d 设定默认的ACL权限
-k 删除默认的ACL权限
-R 递归设定ACL权限
setfacl -m u(代表用户,如果是g代表组):user3:rx /project/
给user3 用户 一个对 /project 目录 读和执行的ACL权限
可以看到有一个+号
setfacl -m m:rx 文件名 修改最大权限
setfacl -x u:用户名 文件名 删除指定用户的ACL权限
setfacl -x g:组名 文件名 删除指定组的ACL权限
setfacl -b 文件名 删除文件下所有的ACL权限 (对于目录来说)
setfacl -m u:用户名:权限 -R 文件名 父目录下所有子目录和文件 ACL都被修改
setfacl -m d:u:用户名:权限 文件名 如果给父目录设置了默认ACL权限,那么之后在这个父目录之下创建的文件 的权限都和父目录保持一致。
getfacl 文件名 查看ACL权限
umask命令
umask -S 注意是大写S 以rwx 形式显示系统默认的新建的文件或者目录的权限
新建文件默认没有X 权限是处于安全考虑
umask 不带参数 可以查看掩码值 777-掩码值=权限值
umask 掩码值 可以更改默认权限
mask :代表最大执行权限 给ACL用户分配的权限与这个作与运算的结果就是实际ACL用户拥有的权限
文件特殊权限:
SUID
简单来说,就是普通用户在执行某一个文件的时候,这个用户可以获得这个文件所属者对于这个文件所拥有的权限 使用条件:普通用户得对这个文件拥有x 执行权限
举个例子:
可以看到这个文件的所属者里面多了一个S
其实我们知道 执行 passwd 命令 实际上是对 /etc/shadow里面写入数据 我们查一下这个文件的权限:
我们可以知道其他人根本没有往里面写东西的权限 (因为root是超级用户 还是可以读写)
但是实际上普通用户也可以执行这个命令 为啥呢? 是因为普通用户在执行这个命令时候,是以root身份来执行的! 这就是SUID的作用
设定SUID 的方法 4代表SUID
chmod 4755 文件名
chmod u+s 文件名
取消SUID的方法
chmod 755 文件名 (没有加上4)
chmod u-s 文件名
SUID最后就使用系统默认的,别手动设置其他了,不然会存在隐藏危险
SGID
SGID对文件和目录的作用是不同的
对文件来说:
使用条件 用户得对这个文件具有 x 权限 ,普通用户在执行这个文件的时候,组身份会升级为这个文件的属组
举个例子:
比如 locate这个命令 我们查一下他的权限情况
执行这个命令 实际上是对 /var/lib/mlocate/mlocate.db 文件进行查看来找到信息
我们再来看看这个文件的权限:
我们可以知道其他人对这个文件是没有任何权限的,但实际上普通用户还是可以成功执行locate命令来完成查看,正是因为普通用户在执行这个命令的时候,普通用户相当于是属于slocate这个组了 而我们可以看到slocate这个组对这个文件是拥有读权限的。
对目录来说:
使用条件:用户得拥有对这个目录的r和x权限
举个例子 :
我新建了一个 test 目录 ,并且普通用户对这个目录拥有r x 权限
我给这个目录弄了一个SGID 权限
现在我们切换成一个普通用户:
可以看到,以linux用户创建的一个文件 ,它的所属组不是linux 而是 root 这就是SGID 权限对于目录的作用!当然前提是普通用户得拥有写权限 能够在这个目录下面创建文件!
设置 SGID的方法 :
chmod 2777 文件名
chmod g+s 文件名
取消SGID的方法:
chmod 777文件名
chmod g-s 文件名
Sticky BIT
如果没有设置这个,那么如果一个普通用户对目录拥有写权限,那么它就可以删除这个目录下的其他文件,这个其实是蛮危险的
设置 粘着位
chmod 1777 文件名
chmod o+t 文件名
取消 粘着位
chmod 777 文件名
chmod o-t 文件名
chattr命令
chattr [+ - =] [选项] 文件或目录名
+:增加权限
-:删除权限
=:等于某权限
-i:
如果对文件设置这个属性,那么文件不能被修改,也不能被删除,啥也做不了
如果对目录设置这个属性,那么只能修改目录下文件的数据,不能删除也不能建立
-a:
如果对文件设置这个属性,那么该文件只能往里面添加数据,不能修改原数据,也不能删除文件
如果是对目录 设置这个属性,那么可以在目录下修改和新建文件,但是不能删除文件
对被设置了chattr 权限的文件或者目录 直接通过 ls这个命令是查不出来的,可以通过
lsattr这个命令。
-a :显示所有文件和目录
-d: 列出目录本身的属性
在根目录下新建的一个文件 abc
直接看是看不出来东西的。。。
使用lsattr -l abc 命令 :
可以看到 被赋予了 chattr
sudo 命令
root把原本超级用户才能执行的命令 赋给普通用户
使用方法:
visudo 命令 来设置 //实际上修改的是 /etc/sudoers 文件
visudo命令之后是这样滴:
解释一下 :
被管理的主机的地址:通俗一点来讲就是 被授权的这个用户 只能在指定主机上(指定的IP地址或者网段) 才能获得root 给它的权限
第一个 sc用户可以在任何主机上登陆 都拥有 shutdown 命令的执行权限了
第二个 sc用户只能在192.168.10.1 这台主机上才能使用 vim
sudo -l 可以查看用户被授予的sudo权限