给linux下设置最高权限,Linux权限管理

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

这里只是在学习linux相关知识过程中,对常用命令做的一个总结笔记

更多linux相关知识可访问 http://linux.vbird.org/ 学习

文件基本权限

给linux下设置最高权限,Linux权限管理_第1张图片

给linux下设置最高权限,Linux权限管理_第2张图片

常见文件类型有7种,除了上面3种,还有套接字文件,管道符文件系统文件等

基本权限的作用

读r 写w 执行x关于目录和文件的权限之间的关系,联系文件在硬件中的分区,区块来思考;例如,我对一个文件没有任何权限,但是我对当前文件夹有读写权限,我可以看到这个没有权限的文件,因为我对这个文件所属的块没权限,但是这个权限是“放在”我的文件夹块中,我可以看到自己文件这一块的信息

把文件夹当做为文件,去理解权限

权限对文件的作用

r:读写文件的内容

w: 编辑新增修改,但是不能删除

x: 可以执行

权限对目录的作用

r: 可以查询目录下的文件名 (ls)

w: 可以修改目录的结构,比如新建文件和目录,删除文件或目录,重命名文件或文件夹(touch rm mv cp)

x: 可以进入目录(cd)

基本权限的修改

chmod [option] 模式 文件名

-R 递归 就是说文件夹下的所有文件都赋予

模式

写法1

例如 chmod u+x learning_temp_file

给文件的所有者u(所属组g,其他人o)添加上执行权限x(读r,写w)

例如 chmod u+x,g+x learning_temp_file

多个赋予可以用,分隔

例如 chmod u-x learning_temp_file

可以+权限,相应地也就可以-权限

写法2

例如 chmod u=rwx,g=rw learning_temp_file

写法3

使用数字来代表权限

r—4

w—2

x—1

例如 rwxr-xr-x 就可以表示为 755

chmod u=rwx,g=rx,o=rx learning_temp_file 相当于 chmod 755 learning_temp_file

一般对目录的权限赋予 0 5 7

用户组权限修改

在创建用户的时候如果不指定组就会创建一个和用户名相同的组

chown 用户名 文件名

chown donscoco:donscoco_group file_name 也可以直接添加组

修改所有组

chgrp 组名 文件名

小思考

任务

现在我需要为一个老师创建一个目录

老师是目录的所有者,拥有所有权限

老师的学生拥有查看这个目录的权限

其他人没有这个目录的权限

处理

groupadd teacher_group 创建一个老师的分组

useradd -G teacher_group teacher 为分组添加用户

useradd -G teacher_group student1

mkdir teacher_course_dir为创建一个老师的文件夹

chmod 750 teacher_course_dir 给文件赋予不同角色对应的权限

chown teacher:teacher_group teacher_course_dir 将文件的所有权交给老师,假设老师的分组为teacher_group

文件默认权限

umask

查看默认权限

0022

第一位0:文件特殊权限

022:文件默认权限

可以 在umask后面添加值 例如 umask 026,但是这是临时的

目录默认权限

目录默认权限为777

默认权限777-umask的022 为 755

文件默认权限

文件默认不能建立执行文件,必须手工赋予执行权限

所以文件默认权限最大为666

默认权限需要换算成字母在相减

建立后的默认权限,为666-umask的022

修改unmask

###临时修改1umask 026

###永久修改1vi /etc/profile

给linux下设置最高权限,Linux权限管理_第3张图片

文件特殊权限

ACL权限

文件都只有 一个所有者,一个用户组,还有其他三种角色,如果出现:

给linux下设置最高权限,Linux权限管理_第4张图片

这里ACL出现就是为了解决用户身份不够的情况的

查看分区的ACL权限是否开启

dumpe2fs -h 目标分区 –目标分区如/dev/sda5 等;可通过df或者mount查看文件系统(对应分区)的挂载点

-h 显示超级块的信息,而不显示磁盘块组的详细信息

在返回的信息中如果有这个

Default mount options: user_xattr acl

就表示分区可以使用acl权限

开启分区ACL权限

临时开启

重新挂载根分区并挂载加入ACL权限

mount -o remount,acl /

永久开启

修改配置文件

vi /etc/fstab

在配置文件中加入

UUID=1ae5f12f-79c1-47d4-bed7-941ab9385396 / ext4 defaults,acl 1 1

然后重启系统或者重新挂载文件系统

mount -o remount /

ps: /etc/fstab 在改动时要非常小心,这个文件会直接影响linux系统的启动

ACL权限查看

getfacl 文件名

ACL权限设定与删除

setfacl [option] 文件名

[option]

-m:设定ACL权限

-x:删除指定的ACL权限

-b:删除所有的ACL权限

-d:设定默认的ACL权限

-k:删除默认的ACL权限

-R:递归设定ACL权限

ACL权限设定

给用户dons设定对dir_name的读写权限

setfacl -m u:dons:rw dir_name

给用户组dons_group设定对dir_name的读写权限

setfacl -m g:dons_group:rw dir_name

给linux下设置最高权限,Linux权限管理_第5张图片

这个+代表就是ACL权限,具体什么样的权限就需要通过getfacl 文件名 来查看

ACL权限删除

给用户dons删除对dir_name的权限

setfacl -x u:dons dir_name

给用户组dons_group设定对dir_name的读写权限

setfacl -x g:dons_group dir_name

删除文件的所有ACL权限

setfacl -b dir_name

ACL权限递归

给 dir_name 下的 其他文件赋予acl权限

setfacl -m u:dons:rx -R dir_name

递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限

ACL默认权限

在对一个文件夹执行赋予递归ACL权限之后,默认在这个文件夹新建的文件是没有ACL权限的

ACL默认权限:默认权限的作用是如果给父目录设定了默认的ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限

setfacl -m d:u:dons:rx -R dir_name

最大有效权限mask

给linux下设置最高权限,Linux权限管理_第6张图片

mask是用来指定最大有效权限的。如果我给用户赋予ACL权限,是需要和mask的权限做与运算才能得到用户真正的权限的

修改最大有效权限

setfacl -m m:rx 文件名

设定mask权限为r-x 使用 m:权限 格式

给linux下设置最高权限,Linux权限管理_第7张图片

sudo权限

什么是sudo权限?

root 把本来只能超级用户执行的命令赋予普通用户执行

sudo 操作对象是系统命令;之前将的权限都是用户操作文件的权限;

visudo 命令打开/etc/sudoers文件 其中有一条

root ALL=(ALL) ALL中

root 表示给哪个用户赋予sudo权限

ALL=(ALL) 被管理者的主机地址 = (可使用的身份);表示 允许 root 在任何主机中使用任何身份

ALL 授权命令(绝对路径);比如说如果想给一个用户donscoco赋予重启权限可以在配置文件/etc/sudoers中加入

donscoco ALL=(ALL) /sbin/shutdown -r now

ps:可以通过

man 5 /etc/sudoers

来查看配置文件的帮助说明

sudo的安全问题

给其他用户赋予能创建新用户的权限

donscoco ALL=/usr/sbin/useradd

没有括号(ALL)默认就是按root身份;可以切换到donscoco使用sudo -l查看

这里在赋予设置密码权限的时候,千万不能直接使用/usr/bin/passwd

因为使用sudo系统是把用户donscoco当做root的身份来对待的,用户donscoco可以使用 sudo /usr/bin/passwd root 直接更改root 的 密码

使用密码赋予权限:

donscoco ALL=/usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root

!/usr/bin/passwd root 禁止 使用/usr/bin/passwd命令对root进行操作

给其他用户赋予vi命令

/etc/shadow 这个文件是保存密码的文件

任何用户对这个权限都是000,包括root

给linux下设置最高权限,Linux权限管理_第8张图片

但是root 可以查看和更改/etc/shadow的内容

如果我们在给一个用户赋予 /bin/vi 的权限

这个用户使用sudo /bin/vi /etc/shadow 去改变密码或者删除密码,那么也是一个很严重的问题

其他安全相关的权限

这里以下的权限尽量少修改

SetUID

SetUID功能

只有可执行的二进制程序才能设定SUID权限

命令执行者要对该程序有x可执行权限

命令执行者在执行该程序时获得该程序文件属主的身份

SetUID只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

/etc/shadow文件权限是000,那么普通用户在改自己密码的时候又是怎么对 /etc/shadow进行修改的呢?

这里 /usr/bin/passwd的信息如下

给linux下设置最高权限,Linux权限管理_第9张图片

passwd 命令被设置了SUID权限

只要执行/usr/bin/passwd命令,执行命令人的身份就会变成执行文件所有者的身份root,所以普通用户可以改自己的密码

设定SUID

chmod 4775 file_name

chmod u+s file_name

这里4 就是SUID的意思,也可以使用第二句

取消SUID

chmod 0775 file_name

chmod u-s file_name

定期检查危险的SUID1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18find / -perm -4000 -o -perm -2000 > /tmp/setuid.check

for i in $(cat /tmp/setuid.check)

#做循环,每次循环取出临时文件中的文件名

do

grep $i /root/suid.log > /dev/null

#对比这个文件名是否在模板文件中

if["$?"!="0"]

#检查上一个命令的返回值,如果不为0,证明上一个命令报错

then

ehco "$i is not in listfile!" >> /root/suid_log_$(date+%F)

#如果文件名不在模板中,则输出错误信息,报错到日志中

fi

done

rm -rf /tmp/setuid.check

#删除临时文件

SetGID

只有可执行的二进制程序才能设置SGID权限

命令执行者要对该程序有x执行权限

命令执行在执行程序的时候,组身份升级wei为该程序文件的属组

SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效

Sicky BIT

chattr权限

chattr [+-=] [选项] 文件或目录名

-+:增加权限

–:删除权限

-=:等于某权限

你可能感兴趣的:(给linux下设置最高权限)