Linux - 用户权限-chattr-lsattr-suid-粘滞位-setfacl-getfacl

目录

1.1chattr命令(设置隐藏属性)

1.1.2  +i 选项 锁定文件

1.1.3  -i 去掉不可更改的属性(解除锁定)

1.1.4  +a 只能追加,不能修改

1.2 lsattr (显示隐藏属性)

2.1  特别权限:

2.2  suid 权限

2.2.3  例如:passwd命令

2.3  那么如何让一个普通用户也可以在/目录下面新建文件夹?

2.4  粘滞位权限(sticky)

2.4.1   设置 SET位,粘滞位权限

2.4.2  使用权限数字:

2.5  sudo授权

2.5.1  示例;

2.5.2  给组授权

2.5.3  为什么要使用sudo?

3.1  ACL 访问控制列表(access control list)

3.2  setfacl指令

3.3  常用选项

3.4  getfacl指令

3.5  示例:

1.授予wudang组对miji.txt有读写执行的权限

2.查看刚刚设置的访问控制列表:使用getfacl

3.不让gaibang访问 mijitxt

4.不让shaolin组里面的califeng用户访问miji.txt

3.6  拒绝权限高于一切

3.7  针对mask设置有效权限

3.8   -x 清除指定的ACL规则

3.9  -b 删除所有ACl规则

4.1  练习:


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.然后去验证

posted @   JackLovey3  阅读(15)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示