Linux - 用户权限-chattr-lsattr-suid-粘滞位-setfacl-getfacl
目录
2.3 那么如何让一个普通用户也可以在/目录下面新建文件夹?
3.1 ACL 访问控制列表(access control list)
4.不让shaolin组里面的califeng用户访问miji.txt
1.1chattr命令(设置隐藏属性)
格式:chattr [+-=] [ai] 文件或者目录
作用:设置文件或者文件夹的隐藏属性
黑客或者病毒喜欢用的命令
a 只能追加,append
i 不能修改,锁定文件
+i 锁定
-i解除锁定
i 选项,锁定文件不能修改
ls -l 是查看的基本权限
#################################
1.1.2 +i 选项 锁定文件
锁住文件:文件不能修改
[root@localhost perm]# chattr +i /etc/passwd
锁住文件夹:不能再文件夹里面新建,删除,复制,移动文件到此
注意:可以把文件夹里面内容复制到别的地方,但是不能复制内容到此文件夹里面
[root@localhost perm]# chattr +i sanchuang/
[root@localhost perm]# ll -d sanchuang/
drwxr-xr-x. 2 root root 6 3月 17 21:23 sanchuang/
[root@localhost perm]# cd sanchuang/
[root@localhost sanchuang]# touch 1.txt
touch: 无法创建1.txt: 权限不够
[root@localhost perm]# rm -rf sanchuang/
rm: 无法删除sanchuang/: 不允许的操作
#################################
1.1.3 -i 去掉不可更改的属性(解除锁定)
[root@localhost perm]# chattr -i sanchuang/
[root@localhost perm]# lsattr -d sanchuang/
---------------- sanchuang/
#################################
1.1.4 +a 只能追加,不能修改
可以往添加了a选项的文件里面追加内容
[root@localhost sanchuang]# echo 123>>abc.txt
[root@localhost sanchuang]# cat abc.txt
wang
studing
linux
`
123
但是不能删除,修改文件内容
[root@localhost sanchuang]# rm -rf *
rm: 无法删除abc.txt: 不允许的操作
#################################
1.2 lsattr (显示隐藏属性)
lsattr 可以查看文件的隐藏属性
[root@localhost food]# chattr +a test.txt
[root@localhost food]# lsattr test.txt
-----a---------- test.txt
[root@localhost food]# chattr -a test.txt
[root@localhost food]# lsattr test.txt
---------------- test.txt
#################################
2.1 特别权限:
suid sgid sticky
都是与可执行权限相关联的,
#################################
2.2 suid 权限
:当某个用户执行某个具有suid权限的命令时候,会以这个命令文件的拥有者身份去执行这个命令
2.2.3 例如:passwd命令
[root@localhost lianxi]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd
passwd命令有s权限位,所以普通用户也可以使用passwd命令为自己改密码
例如:mkdir命令没有s权限位。
[root@localhost lianxi]# ll /usr/bin/mkdir
-rwxr-xr-x. 1 root root 79768 8月 20 2019 /usr/bin/mkdir
root用户可以在/目录下面新建文件夹,但是普通用户不可以
普通用户默认只可以在自己家目录和/tmp目录下面新建文件和文件夹
如果mkdir命令有suid权限位的话,那么普通用户也可在/目录下面新建文件和目录
#################################
2.3 那么如何让一个普通用户也可以在/目录下面新建文件夹?
1.可以让mkdir具有suid权限位。
2.也可以设置/目录权限位777
使用chmod命令给mkdir命令授予suid权限位
[root@localhost lianxi]# chmod u+s /usr/bin/mkdir
[root@localhost lianxi]# ll /usr/bin/mkdir
-rwsr-xr-x. 1 root root 79768 8月 20 2019 /usr/bin/mkdir
这个时候普通用户就可以在/目录下面新建文件夹了
[liming@localhost /]$ mkdir changsha
[liming@localhost /]$ ll -d changsha
drwxrwxr-x. 2 root liming 6 3月 18 09:49 changsha
但是这个时候新建的changsha文件夹,属主是root用户,但是属组还是liming
这是因为在使用mkdir命令的时候,普通用户拥有root用户权限位,即euid变为0了
但是他的egid还是用户本身的gid号,所以属组还是用户自己的组
但是不要轻易给命令授予suid权限位,因为普通用户在使用命令的时候会拥有root用户权限
#################################
2.4 粘滞位权限(sticky)
1.需要设置目录权限位777
2.添加 +t 特别权限
主要用途:
为公共目录(例如权限为777的)设置,权限字符为 ‘t’
用户不能删除还目录中其他用户的文件
用户可以查看别的用户创建的文件或文件夹,但是不能删除别人的
例如 /tmp目录
/tmp目录是临时存放文件或者文件夹的目录,任何一个用户都可以操作
[root@localhost lianxi]# ll -d /tmp
drwxrwxrwt. 39 root root 4096 3月 18 09:21 /tmp
在/tmp目录下的文件或者文件夹只有root用户和文件属主才能删除
设置粘滞位:
[root@localhost lianxi]# ll -d tlbb
drwxrwxrwx. 2 root root 39 5月 20 20:11 tlbb
[root@localhost lianxi]# chmod o+t tlbb
[root@localhost lianxi]# ll -d tlbb
drwxrwxrwt. 2 root root 39 5月 20 20:11 tlbb
#################################
2.4.1 设置 SET位,粘滞位权限
使用权限字符:
chmod ug [+-]s可执行文件
chmod o [+-] 目录名
#################################
给mkdir设置suid权限位:
[root@localhost lianxi]# chmod u+s /usr/bin/mkdir
[root@localhost lianxi]# ll /usr/bin/mkdir
-rwsr-xr-x. 1 root root 79768 8月 20 2019 /usr/bin/mkdir
给mkdir去除suid权限位:
[root@localhost lianxi]# chmod u-s /usr/bin/mkdir
[root@localhost lianxi]# ll /usr/bin/mkdir
-rwxr-xr-x. 1 root root 79768 8月 20 2019 /usr/bin/mkdir
#################################
2.4.2 使用权限数字:
chmod mnnn可执行文件
m为4对应suid
2对应sgid
1对应粘滞位,可叠加
suid --》 4
sgid --》2
sticky --》1
例如:
给mkdir设置suid权限位:
[root@localhost lianxi]# ll /usr/bin/mkdir
-rwxr-xr-x. 1 root root 79768 8月 20 2019 /usr/bin/mkdir
mkdir 基本权限位 755 ,添加suid权限位为4
[root@localhost lianxi]# chmod 4755 /usr/bin/mkdir
[root@localhost lianxi]# ll /usr/bin/mkdir
-rwsr-xr-x. 1 root root 79768 8月 20 2019 /usr/bin/mkdir
给mkdir去除suid权限位:
[root@localhost lianxi]# chmod 0755 /usr/bin/mkdir
[root@localhost lianxi]# ll /usr/bin/mkdir
-rwxr-xr-x. 1 root root 79768 8月 20 2019 /usr/bin/mkdir
#################################
2.5 sudo授权
linux里面root用户权限最大
sudo, sudoedit — execute a command as another user
sudo 授权给普通用户去执行命令,linux系统会记录普通用户使用sudo执行过的所有命令
日志文件:/var/log/secure
日志文件是系统里面的机密,普通用户是不可以查看的
sudo切换过去第一次执行命令的时候,需要输入密码,而且第二次使用
sudo命令,如果时间间隔比较短,可以不需要输入密码,如果时间间隔比较长,需要输入密码,如果不想让sudo在第一次使用的时候输入密码,可以在定义sudo用户的后面,加上,NOPASSWD:ALL
例:cali ALL=(ALL) NOPASSWD:ALL
[root@localhost lianxi]# ll /var/log/secure
-rw-------. 1 root root 12109 3月 18 10:01 /var/log/secure
授权:
root用户授权给普通用户执行命令
哪些普通用户?
vim /etc/sudoers 进行授权
user Machine=commands
root ALL=(ALL) ALL
root用户可以在任何机器上执行任何命令
第一个all代表当前所在命令
第二个all代表所有的命令
第三个命令代表前面命令的所有选项
feng ALL=(ALL) ALL
feng用户可以在任何机器上执行任何命令
deng ALL=/usr/sbin/useradd,/usr/sbin/userdel
只是允许deng这个用户可以执行/usr/sbin/useradd,/usr/sbin/userdel
命令需要写绝对路径,多个命令使用逗号隔开
命令的别名 --》工具箱
Installation and management of software
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
定义命令别名 software里面包括 /bin/rpm,/usr/bin/up
date,/usr/yum
Cnmd_Alias 是固定的语法
#################################
2.5.1 示例;
练习:
1.授予liangluyao能够新建用户,安装软件,配置ip地址
1.新建用户liangluyao,并且设置密码
[root@localhost lianxi]# useradd liangluyao
[root@localhost lianxi]# echo 123|passwd liangluyao --stdin
更改用户 liangluyao 的密码 。
passwd:所有的身份验证令牌已经成功更新。
2.授权
[root@localhost lianxi]# vim /etc/sudoers
定义别名, --》不是必须的
Cmnd_Alias LIANGSOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum,/usr/sbi
n/useradd,/usr/sbin/userdel,/usr/sbin/ip
授予liangluyao用户可以使用LIANGSOFTWORE这个命令别名里面所有的命令
liangluyao ALL=LIANGSOFTWARE
然后liangluyao用户就有了root用户授予的这几项权利
新建用户:
[liangluyao@localhost lianxi]$ sudo useradd liang1
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
1) 尊重别人的隐私。2) 输入前要先考虑(后果和风险)。3) 权力越大,责任越大。
[sudo] liangluyao 的密码:
[liangluyao@localhost lianxi]$ id liang1
uid=9925(liang1) gid=9926(liang1) 组=9926(liang1)
删除用户:
[liangluyao@localhost lianxi]$ sudo userdel -r liang1
[liangluyao@localhost lianxi]$ id liang1
id: liang1: no such user
#################################
2.5.2 给组授权
组里面所有用户都会继承这个权限
组不管是主要组还是次要组都会继承组里面的权限
授予wudang组可以使用了LIANGSOFTWARE别名的权限
1.新建用户和组
新建wudang组,新建2个用户都加入wudang
groupadd wudang
useradd -g wudang wuji
useadd -g wudang songqingshu
2.授权
Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
%wudang ALL=LIANGSOFTWARE
#################################
2.5.3 为什么要使用sudo?
1.其实就是为了让普通用户可以享有root用户的权限去执行命令
2.不需要使用root用户登录了,因为root权利比较大,尽量不要使用root操作,容易出现误操作
3.为了避免root用户的密码
4.使用过的命令都可以在日志文件里面查询
#################################
3.1 ACL 访问控制列表(access control list)
一个文件/目录的访问控制列表,可以针对任意指定的用户/组使用权限字符分配rwx权限
3.2 setfacl指令
作用:设置ACL
格式:
setfacl 选项 规则 文件
常用规则:
#################################
3.3 常用选项
-m 新增或修改ACL中的规则
-b:删除所有ACL规则
-x:删除指定的ACL规则
#################################
3.4 getfacl指令
查看ACl:
格式:getfacl 文件
#################################
3.5 示例:
1.授予wudang组对miji.txt有读写执行的权限
[root@localhost lianxi]# setfacl -m g:wudang:rwx miji.txt
[root@localhost lianxi]# ll miji.txt
-rw-rwxr--+ 1 root root 0 3月 18 16:35 miji.txt
此时miji.txt基本权限后面多了一个+号,+代表扩展权限位
#################################
2.查看刚刚设置的访问控制列表:使用getfacl
[root@localhost lianxi]# getfacl miji.txt
file: miji.txt
owner: root
group: root
user::rw-
group::r--
group:wudang:rwx
mask::rwx
other::r--
#################################
3.不让gaibang访问 mijitxt
[root@localhost lianxi]# setfacl -m g:gaibang:--- miji.txt
[root@localhost lianxi]# getfacl miji.txt
file: miji.txt
owner: root
group: root
user::rw-
group::r--
group:wudang:rwx
group:gaibang:---
mask::rwx
other::r--
#################################
4.不让shaolin组里面的califeng用户访问miji.txt
[root@localhost lianxi]# setfacl -m u:califeng:--- miji.txt
[root@localhost lianxi]# getfacl miji.txt
file: miji.txt
owner: root
group: root
user::rw-
user:califeng:---
group::r--
group:wudang:rwx
group:gaibang:---
mask::rwx
other::r--
#################################
3.6 拒绝权限高于一切
因为我们刚刚设置了califeng用户不能访问miji.txt
所以califeng是不能查看miji.txt里面的内容的
[root@localhost lianxi]# su califeng
[califeng@localhost lianxi]$ cat miji.txt
cat: miji.txt: 权限不够
但是我们又设置了wudang组里面的成员可以访问miji.txt的
如果让califeng加入wudang组的话,可不可以访问miji.txt?
用gpasswd命令将califeng加入到wudang组里面
[root@localhost lianxi]# gpasswd -a califeng wudang
正在将用户“califeng”加入到“wudang”组中
[root@localhost lianxi]# id califeng
uid=1007(califeng) gid=1007(califeng) 组=1007(califeng),1030(wudang)
[root@localhost lianxi]# su califeng
[califeng@localhost lianxi]$ cat miji.txt
cat: miji.txt: 权限不够
可以看到即便将califeng用户加入到了wudang组里面,califeng还是不能访问miji.txt文件
这体现了拒绝权限高于一切的概念
#################################
3.7 针对mask设置有效权限
[root@localhost lianxi]# setfacl -m m::r miji.txt
[root@localhost lianxi]# getfacl miji.txt
file: miji.txt
owner: root
group: root
user::rw-
user:califeng:---
group::r--
group:wudang:rwx #effective:r--
group:gaibang:---
mask::r--
other::r--
#################################
3.8 -x 清除指定的ACL规则
[root@localhost lianxi]# setfacl -x g:gaibang miji.txt
[root@localhost lianxi]# getfacl miji.txt
file: miji.txt
owner: root
group: root
user::rw-
user:califeng:---
group::r--
group:wudang:rwx
mask::rwx
other::r--
#################################
3.9 -b 删除所有ACl规则
[root@localhost lianxi]# setfacl -b miji.txt
[root@localhost lianxi]# getfacl miji.txt
file: miji.txt
owner: root
group: root
user::rw-
group::r--
other::r--
#################################
4.1 练习:
1.新建3个组,shuiguo,mifen,shaokao
[root@localhost lianxi]# groupadd shuiguo
[root@localhost lianxi]# groupadd mifen
[root@localhost lianxi]# groupadd shaokao
2.新建3个用户,pingguo属于shuiguo组,jingshi属于mifen组,yueyang属于shaokao组
[root@localhost lianxi]# useradd -g shuiguo pingguo
[root@localhost lianxi]# useradd -g mifen jingshi
[root@localhost lianxi]# useradd -g shaokao yueyang
3.在根目录下面新建目录food,再将/etc/passwd复制到food目录下
[root@localhost food]# cp /etc/passwd .
4.设置权限,passwd文件能被shuiguo组读写,jingshi这个用户能读写执行,yueyang这个用户不能进行任何操作
[root@localhost food]# setfacl -m g:shuiguo:rw passwd
[root@localhost food]# setfacl -m u:jingshi:rwx passwd
[root@localhost food]# setfacl -m u:yueyang:--- passwd
[root@localhost food]# getfacl passwd
file: passwd
owner: root
group: root
user::rw-
user:jingshi:rwx
user:yueyang:---
group::r--
group:shuiguo:rw-
mask::rwx
other::r--
5.然后去验证
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通