写点什么

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

作者:Albert Edison
  • 2022 年 8 月 21 日
    四川
  • 本文字数:3398 字

    阅读完需:约 11 分钟

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

  • set_uid

  • set_gid

  • sticky 粘滞位

  • 权限属性 chattr

  • 进程掩码 umask

  • 特殊权限练习题


一、Linux 系统特殊权限

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

-rwsr-xr-x. 1 root root 54080 Nov 5 2016 /usr/bin/catsuidroot 用户执行,最终运行的身份是 root


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

2、目录设置为 sgid 后续如果在该目录下创建文件, 都将与该目录的所属组保持一致

drwxr-srwx. 2 root devops 29 Jun 14 21:01 /opt/


  1. bgx 用户登陆后, 在/opt/目录创建文件或者目录属主和属组是

  2. 最终属主和属组 bgx devops

  3. xlw 用户登陆后, 在/opt/目录创建文件或者目录属主和属组是 2. 最终属主和属组 xlw devops

  4. 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

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


演示:
检查 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 - lizaLast 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/passwdcat: /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/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologin---此处省略
复制代码
suid 授权方法

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


授权方法:chmod 4755 passwdchmod 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 directorychmod g+s directory

sgid 作用
  1. 针对用户组权限位修改,用户创建的目录或文件所属组和该目录的所属组一致。

  2. 当某个目录设置了 sgid 后,在该目录中新建的文件不在是创建该文件的默认所属组

  3. 使用 sgid 可以使得多个用户之间共享一个目录的所有文件变得简单。

3.sticky 粘滞位

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

sticky 授权方法

粘滞位 1000 权限字符 t(T),其他用户位的 x 位上设置。授权方法:chmod 1755 /tmpchmod 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_arm: 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_irm: 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/profileif [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002elseumask 022fi//立即在当前 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 stoogesuseradd -G stooges curlyuseradd -G stooges larryuseradd -G stooges moe//创建密码echo "password" | passwd --stdin moeecho "password" | passwd --stdin larryecho "password" | passwd --stdin curry//创建目录并配置权限mkdir /home/stoogeschmod 770 /home/stoogeschown .stooges /home/stoogeschmod g+s /home/stooges
复制代码


发布于: 21 小时前阅读数: 58
用户头像

Albert Edison

关注

目前在某大厂担任后端开发,欢迎交流🤝 2022.03.08 加入

🏅️平台:InfoQ 签约作者、阿里云 专家博主、CSDN 优质创作者 🛫领域:专注于C语言、数据结构与算法、C++、Linux、MySQL、云原生的研究 ✨成就:2021年CSDN博客新星Top9,算法领域优质创作者,全网累计粉丝4W+

评论

发布
暂无评论
用户权限-Linux系统特殊权限_Linux_Albert Edison_InfoQ写作社区