用户权限-Linux系统特殊权限

简介: 用户权限-Linux系统特殊权限
  • Linux系统特殊权限
  • set_uid
  • set_gid
  • sticky粘滞位
  • 权限属性chattr
  • 进程掩码umask
  • 特殊权限练习题

一、Linux系统特殊权限

1、suid以文件的所属用户身份执行命令, 而不是以当前用户的身份执行命令

-rwsr-xr-x. 1 root root 54080 Nov 5 2016 /usr/bin/cat

suid

root用户执行,最终运行的身份是root

bgx用户执行,最终运行的身份是root

2、目录设置为sgid后续如果在该目录下创建文件, 都将与该目录的所属组保持一致drwxr-srwx. 2 root devops 29 Jun 14 21:01 /opt/
  1. bgx用户登陆后, 在/opt/目录创建文件或者目录属主和属组是
  1. 最终属主和属组 bgx devops
  1. xlw用户登陆后, 在/opt/目录创建文件或者目录属主和属组是
    2. 最终属主和属组 xlw devops
  2. root用户登陆后, 在/opt/目录创建文件或者目录属主和属组是
    3. 最终属主和属组 root devops
3、sticky任何人都可以在该目录下创建文件以及目录, 但只能删除自己创建的文件和目录

drwxrwxrwt. 7 root root 93 Jun 14 21:47 /tmp/

4、如何设置特殊权限
  1. 用符号表示: setuid=u+s; setgid=g+s; sticky=o+t
  2. 用数值表示: setuid=4; setgid=2; sticky=1

1.set_uid

文件的执行有效身份为文件的拥有者,而不是执行者的身份

image.png

演示:
检查passwd文件权限,匿名用户没有权限查看
[root@liza ~]# chmod 640 /etc/passwd
[root@liza ~]# ll /etc/passwd
-rw-r-----. 1 root root 2059 Jan  3 22:59 /etc/passwd
使用普通用户无法查看
[root@liza ~]# su - liza
Last login: Tue Jan 12 13:40:43 CST 2021 on pts/1
/usr/bin/id: cannot find name for user ID 1000
/usr/bin/id: cannot find name for user ID 1000
[I have no name!@liza ~]$ cat /etc/passwd
cat: /etc/passwd: Permission denied
[I have no name!@liza ~]$ 
给cat命令赋予suid
[root@liza ~]# chmod 4755 /bin/cat
[root@liza ~]# ll /bin/cat
-rwsr-xr-x. 1 root root 54080 Jun 30  2016 /bin/cat
[I have no name!@liza ~]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
---此处省略
suid授权方法

suid 4000 权限字符s(S),用户位置上的x位上设置

授权方法:

chmod 4755 passwd

chmod u+s passwd

suid的作用
  1. 让普通用户拥有二进制文件的所属主权限,二进制文件需要有执行权限。
  2. 如果设置的二进制文件没有执行权限,那么suid的权限显示就是大S。
  3. 特殊权限suid仅对二进制可执行程序有效,其他文件或目录则无效。
  4. 如果普通用户需要操作没有权限的文件,为对应的命令赋予Suid权限。

注意: suid双刃剑, 是一个比较危险的功能, 对系统安全有一定的威胁。

2.set_gid

演示
[root@liza /]# chmod 777 /opt/
[root@liza /]# chmod g+s /opt/
[root@liza /]# su - liza
[liza@liza ~]$ mkdir /opt/sgid_test
[liza@liza ~]$ ll -d /opt/sgid_test/
drwxrwsr-x. 2 liza root 6 Jan 12 13:46 /opt/sgid_test/
sgid授权方法

suid 2000 权限字符s(S),取决于属组位置上的x

授权方法:

chmod 2755 directory

chmod g+s directory

sgid作用
  1. 针对用户组权限位修改,用户创建的目录或文件所属组和该目录的所属组一致。
  2. 当某个目录设置了sgid后,在该目录中新建的文件不在是创建该文件的默认所属组
  3. 使用sgid可以使得多个用户之间共享一个目录的所有文件变得简单。

3.sticky粘滞位

sticky对目录有写权限的用户仅仅可以删除目录里属于自己的文件,不能删除其他用户的文件系统中存在的/tmp目录是经典的粘滞位目录,谁都有写权限,因此安全成问题,常常是木马第一手跳板。

sticky授权方法

粘滞位 1000 权限字符t(T),其他用户位的x位上设置。

授权方法:

chmod 1755 /tmp

chmod o+t /tmp

sticky作用
  1. 让多个用户都具有写权限的目录,并让每个用户只能删自己的文件。
  2. 特殊sticky目录表现在others的x位,用小t表示,如果没有执行权限是T
  3. 一个目录即使它的权限为”777”如果是设置了粘滞位,除了目录的属主和”root”用户有权限删除,除此之外其他用户都不允许删除该目录。

二、权限属性chattr

设置文件属性(权限),针对所有用户,包括 root

a:让文件或目录仅可追加内容

i:不得任意更动文件或目录

演示:创建文件并设置属性
[root@liza ~]# touch file_a file_i
[root@liza ~]# lsattr file_a file_i
---------------- file_a
---------------- file_i
设置属性
[root@liza ~]# chattr +a file_a
[root@liza ~]# chattr +i file_i
[root@liza ~]# lsattr file_a file_i
-----a---------- file_a
----i----------- file_i
a权限, 无法覆盖写入和删除文件
[root@liza ~]# echo "aa" > file_a
-bash: file_a: Operation not permitted
[root@liza ~]# rm -f file_a
rm: cannot remove ‘file_a’: Operation not permitted
a权限, 只能追加, 适用于日志文件
[root@liza ~]# echo "aa" >> file_a
i权限, 无法写入, 无法删除
[root@liza ~]# echo "i" >> file_i
-bash: file_i: Permission denied
[root@liza ~]# echo "i" > file_i
-bash: file_i: Permission denied
[root@liza ~]# rm -f file_i
rm: cannot remove ‘file_i’: Operation not permitted
解除限制
[root@liza ~]# chattr -a file_a
[root@liza ~]# chattr -i file_i

三、进程掩码umask

umask用于控制系统权限, 默认系统权限较大, 需要靠Umask来变更权限

默认新建文件,系统默认最大权限为666

默认新建目录,系统默认最大权限是777我们在新建文件和目录的默认权限会受到umask的影响, umask表示要减掉的权限。

创建目录权限值为777-umask

创建普通文件权限值为644-umask

umask涉及到的相关文件/etc/bashrc

/etc/profile

~/.bashrc

~/.bash_profile

注意umask影响的范围

shell (vim,touch) –umask–> 新文件或目录权限

vsftpd –umask–> 新文件或目录权限

samba –umask–> 新文件或目录权限

useradd –umask–> 用户 HOME

1.假设umask值为:022(所有位为偶数)

//文件的起始权限值

6 6 6 - 0 2 2 = 6 4 4

2.假设umask值为:045(其他用户组位为奇数)

//计算出来的权限。由于umask的最后一位数字是5,所以,在其他用户组位再加1。

6 6 6 - 0 4 5 = 6 2 1

3.默认目录权限计算方法

7 7 7 - 0 2 2 = 7 5 5

示例1: 在shell进程中创建文件

查看当前用户的umask权限

[root@liza ~]# umask 
0022
[root@liza ~]# touch file001
[root@liza ~]# mkdir dir001
[root@liza ~]# ll -d file001 dir001/
drwxr-xr-x. 2 root root 6 Jan 12 14:04 dir001/
-rw-r--r--. 1 root root 0 Jan 12 14:04 file001
示例2: 修改shell umask值(临时生效)
[root@liza ~]# umask 000
[root@liza ~]# mkdir dir000
[root@liza ~]# touch file000
[root@liza ~]# ll -d dir000 file000 
drwxrwxrwx. 2 root root 6 Jan 12 14:05 dir000
-rw-rw-rw-. 1 root root 0 Jan 12 14:05 file000
示例3: 修改shell umask值(永久生效, 强烈不建议修改)
[root@liza ~]# vim /etc/profile
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then 
umask 002
else
umask 022
fi
//立即在当前 shell 中生效
[root@liyanzhao ~]# source /etc/profile
示例4: 通过umask决定新建用户HOME目录的权限
[root@liza ~]# vim /etc/login.defs 
UMASK 077
[root@liza ~]# useradd dba
[root@liza ~]# ll -d /home/dba/
drwx------. 3 dba dba 78 Jan 12 14:08 /home/dba/
[root@liza ~]# vim /etc/login.defs 
UMASK 000
[root@liza ~]# useradd sa
[root@liza ~]# ll -d /home/sa/
drwx------. 3 sa sa 78 Jan 12 14:09 /home/sa/
示例 5:例如vsftpd进程/etc/vsftpd/vsftpd.conf
[root@liza ~]# yum -y install vsftpd
[root@liza ~]# man vsftpd.conf

四、特殊权限练习题

lab permissions setup

考试必考:

创建三个用户, 分别为curly、larry、moe这些用户都是stooges组的成员。这些用户帐号密码都为password

  1. 要求以上用户和组可以在/home/stooges目录里访问,创建,删除文件
  2. 其他用户一律不允许访问该目录
  3. 在该目录下新建的文件会自动属于stooges组拥有
//创建用户,组
groupadd stooges
useradd -G stooges curly
useradd -G stooges larry
useradd -G stooges moe
//创建密码
echo "password" | passwd --stdin moe
echo "password" | passwd --stdin larry
echo "password" | passwd --stdin curry
//创建目录并配置权限
mkdir /home/stooges
chmod 770 /home/stooges
chown .stooges /home/stooges
chmod g+s /home/stooges


相关文章
|
1天前
|
Unix Linux Shell
Linux系统使用超详细(一)
Linux系统是一种开源的、类Unix操作系统内核的实现,它基于Unix的设计原理和思想,并在全球范围内广泛应用。以下是对Linux系统的详细描述:
|
1天前
|
Ubuntu Linux 编译器
【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤
【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤
|
1天前
|
Linux Windows
虚拟机添加新硬盘之linux系统篇
虚拟机添加新硬盘之linux系统篇
|
2天前
|
算法 Linux 数据安全/隐私保护
Linux:权限
Linux:权限
9 0
|
2天前
|
监控 安全 Linux
Linux系统入侵排查(三)
本文介绍了Linux系统入侵排查的相关知识。首先解释了进行系统入侵排查的原因,即当企业遭受黑客攻击、系统崩溃或其他安全事件时,需要迅速恢复系统并找出入侵来源。接着,重点讲述了日志入侵排查的重要性,因为日志文件记录了系统的重要活动,可以提供入侵行为的线索。
|
2天前
|
安全 Linux Shell
Linux系统入侵排查(二)
本文介绍了Linux系统入侵排查的步骤,包括检查历史命令记录、可疑端口和进程、开机启动项以及定时任务。作者强调了了解这些技能对于攻防两端的重要性,并提供了相关命令示例,如查看`/root/.bash_history`记录、使用`netstat`分析网络连接、检查`/etc/rc.local`和`/etc/cron.*`目录下的可疑脚本等。此外,还提到了如何查看和管理服务的自启动设置,以判断是否被恶意篡改。文章旨在帮助读者掌握Linux服务器安全维护的基本技巧。
|
2天前
|
缓存 安全 Linux
Linux系统入侵排查(一)
本文探讨了在遭遇黑客入侵或系统异常时进行应急响应和排查的必要性,重点介绍了基于Kali Linux的入侵排查步骤。排查的目标是找出潜在的恶意活动,恢复系统的安全性,并防止未来攻击。总结来说,进行Linux系统入侵排查需要密切关注账号安全,跟踪历史命令,及时识别并消除安全隐患。同时,保持对最新攻击手段和技术的了解,以便更好地防御和应对潜在的网络安全威胁。
|
2天前
|
Linux C语言
【Linux】 拿下 系统 基础文件操作!!!
怎么样,我们的猜测没有问题!!!所以语言层的文件操作函数,本质底层是对系统调用的封装!通过不同标志位的封装来体现w r a+等不同打开类型! 我们在使用文件操作时,一般都要使用语言层的系统调用,来保证代码的可移植性。因为不同系统的系统调用可以会不一样!
13 2
|
1月前
|
缓存 Linux 测试技术
安装【银河麒麟V10】linux系统--并挂载镜像
安装【银河麒麟V10】linux系统--并挂载镜像
190 0
|
18天前
|
Linux 开发工具 Android开发
Docker系列(1)安装Linux系统编译Android源码
Docker系列(1)安装Linux系统编译Android源码
21 0