文件权限Ⅱ

本文详细介绍了Linux系统中的高级权限,包括Set UID、Set GID和Sticky Bit,以及如何设置这些特殊权限。同时,讲解了普通用户修改密码的机制,并探讨了通过sudo和suid给普通用户提权的方法。此外,还拓展了文件属性chattr的使用和进程掩码umask对新建文件权限的影响。

一. 高级权限

高级权限

suid 二进制文件(可执行文件 )提权,提权后,普通用户将拥有root权限

sgid 目录提权

sticky 目录

问题1: 为什么会失败!

[root@youngfit ~]# ll /root/file1.txt  
-rw-r--r-- 1 root root 4 7月  27 14:14 /root/file1.txt

[alice@youngfit ~]$ cat /root/file1.txt
cat: /root/file1.txt: 权限不够

分析: root /usr/bin/cat (root) /root/file1.txt OK

​ alice /usr/bin/cat (alice) /root/file1.txt

普通用户修改密码: alice /usr/bin/passwd (root) /etc/shadow

1.1.高级权限的类型

suid 4

sgid 2

sticky 1 粘滞位

1.2.设置特殊权限
a、字符
chmod u+s file   //suid

chmod g+s dir    //sgid

chmod o+t dir    //sticky
b、数字
chmod 4777 file   第一个数字为高级权限,剩下的为UID权限

chmod 7777 file 

chmod 2770 dir 

chmod 3770 dir

示例1:suid 普通用户通过suid提权 <针对文件>

在进程文件(二进制,可执行)上增加suid权限

[root@youngfit ~]# chmod u+s /usr/bin/cat

[root@youngfit ~]# chmod u+s /usr/bin/rm

[alice@youngfit ~]$ cat /root/file1.txt

首先创建一个用户组,两个用户进行这三个案例操作

Set UID

当s这个标志出现在文件所有者的x权限上时,如/usr/bin/passwd这个文件的权限状态:“-rwsr-xr-x.”,此时就被称为Set UID,简称为SUID。那么这个特殊权限的特殊性的作用是什么呢?
1、SUID权限仅对二进制程序(binary program)有效;
2、启动为进程之后,其进程的属主为原程序文件的属主;
3、执行者将具有该程序拥有者(owner)的权限。

案例:

[root@youngfit home]# ll /usr/bin/rm
-rwxr-xr-x. 1 root root 62864 Nov  6  2016 /usr/bin/rm
[root@youngfit home]# chmod u+s /usr/bin/rm
此时普通用户只能删除权限之内的文件
一旦给rm加上suid权限之后,普通用户相当于root用户。(即提权)
Set GID

把s放到文件的所属用户组x位置上的话,就是SGID。
那么SGID的功能是什么呢?和SUID一样,只是SGID是获得该程序所属用户组的权限。
这相SGID有几点需要我们注意:
*:SGID主要用在目录上
如果用户在此目录下具有w权限的话,若使用者在此目录下建立新文件,则新文件的群组与此目录的群组相同。

也就是继承原先目录的权限,所属用户为当前创建文件的用户。

案例:

[root@localhost ~]# mkdir /opt/dir1
[root@localhost ~]# groupadd hr
[root@localhost ~]# chmod 775 /opt/dir1/
[root@localhost ~]# ll -d /opt/dir1/
drwxrwxr-x. 2 root root 6 Jul 19 15:20 /opt/dir1/
[root@localhost ~]# chown .hr /opt/dir1/
[root@localhost ~]# chmod g+s /opt/dir1/
drwxr-sr-x. 2 cui hr 34 Dec 27 10:03 /opt/dir1/    //如果原先没有执行权限,则显示S
[root@localhost ~]# ll -d /opt/dir1/
drwxrwsr-x. 2 root root 6 Jul 19 15:20 /opt/dir1/
[root@localhost ~]# touch /opt/dir1/a.txt
-rw-rw-r--. 1 alice hr 0 Jul 19 15:23 /opt/dir1/a.txt
Sticky Bit

这个就是针对others来设置的了,和上面两个一样,只是功能不同而已。
SBIT(Sticky Bit)目前只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除。

[root@youngfit home]# cd /home/
[root@youngfit home]# mkdir dir2
[root@youngfit home]# chmod 777 dir2/				//确保其他人能操作目录
[root@youngfit home]# chmod o+t dir2/				//给予dir1目录Sticky 
[root@youngfit home]# ll -d dir1/
drwxrwxrwt 2 root root 4096 Jul 13 16:09 dir1/
[alice@youngfit dir2]$ touch  alice.txt				//用户alice在/home/dir2创建一个文件
[jack@youngfit dir2]$ touch jack.txt				//用户jack在/home/dir2创建一个文件
测试alice删除jack创建的文件,无法删除
1.3.普通用户可以修改密码:

alice /usr/bin/passwd /etc/shadow

[alice@youngfit ~]$ ll /etc/shadow
 ---------- 1 root root 1487 6月   4 13:43 /etc/shadow  
 
[alice@youngfit ~]$ ll /usr/bin/passwd 
-rwsr-xr-x. 1 root root 30768 2月  17 2012 /usr/bin/passwd

[alice@youngfit ~]$ passwd

更改用户 alice 的密码 。

为 alice 更改 STRESS 密码。

(当前)UNIX 密码:

[root@youngfit ~]# ps aux |grep passwd root 3674 0.0 0.0 165764 1884 pts/1 S+ 14:34 0:00 passwd

=======================================================

1.4.目前两种给普通用户提权手段:

sudo: 了解,有针对性,例如针对某个用户以能够以root的身份执行某些命令。

vim /etc/sudoers

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YhbntNst-1584535330701)(C:\Users\崔成jie\AppData\Roaming\Typora\typora-user-images\image-20191227112202708.png)]

suid: 基本针对所有用户,任何用户在执行有suid权限的程序时(例如/usr/bin/rm),都是以root身份在执行。

提权,以root身份在执行

====================================================

小知识:注意以下目录的正确权限,否则会导致程序不能正常运行

[root@wangcy ~]# ll -d /tmp /var/tmp/

drwxrwxrwt 14 root root 4096 07-26 10:15 /tmp drwxrwxrwt 2 root root 4096 07-24 19:02 /var/tmp/HTML>

====================================================

二.文件属性 chattr【拓展】

文件权限管理之: 文件属性

2.1. 文件属性添加与查看

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

[root@youngfit ~]# touch file100 file200 

[root@youngfit ~]# lsattr file100 file200 

-------------e- file100

-------------e- file200

-------------e- file300

[root@youngfit ~]# man chattr

[root@youngfit ~]# chattr +a file100 		//不允许修改》,只允许追加》》
[root@youngfit ~]# chattr +i file200 		//不允许做任何操作


[root@youngfit ~]# lsattr file100 file200 

  -----a-------e- file100

 ----i--------e- file200



[root@youngfit ~]# echo 111 > file100			     //以覆盖的方式写入

bash: file100: Operation not permitted
[root@youngfit ~]# rm -rf file100 
rm: cannot remove `file100': Operation not permitted
[root@youngfit ~]# echo 111 >> file100			    //以追加的方式写入,例如日志文件

[root@youngfit ~]# echo 111 > file200
bash: file200: Permission denied
[root@instructor ~]# echo 111 >> file200
bash: file200: Permission denied
[root@youngfit ~]# rm -rf file200 
rm: cannot remove `file200': Operation not permitted

[root@youngfit ~]# chattr -a file100
[root@youngfit ~]# chattr -i file200


=====================================================

三.进程掩码umask[拓展]

文件权限管理之: 进程umask

进程 新建文件、目录的默认权限会受到umask的影响,umask表示要减掉的权限

shell (vim,touch) =umask> 新文件或目录权限 vsftpd =umask> 新文件或目录权限 samba =umask> 新文件或目录权限 useradd =umask> 用户HOME

用处:临时限制或者增加用户的权限

目录777-0022 文件666-0022

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

[root@youngfit ~]# umask 			                        //查看当前用户的umask权限
0022
[root@youngfit ~]# touch file800
[root@youngfit ~]# mkdir dir800
[root@youngfit ~]# ll -d dir800 file800 
drwxr-xr-x. 2 root root 4096 3月  11 19:40 dir800
-rw-r--r--. 1 root root    0 3月  11 19:40 file800

示例2:修改shell umask值(临时)

[root@youngfit ~]# umask 000					//将umask修改为000
[root@youngfit ~]# mkdir dir900
[root@youngfit ~]# touch file900
[root@youngfit ~]# ll -d dir900 file900 
drwxrwxrwx. 2 root root 4096 3月  11 19:44 dir900
-rw-rw-rw-. 1 root root    0 3月  11 19:44 file900

示例3:修改shell umask值(永久 建议不要)
[root@youngfit ~]# vim /etc/profile   				//vim打开/etc/profile文件,永久修改
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
    umask 002     
else
    umask 022
fi
[root@youngfit ~]# source /etc/profile       //立即在当前shell中生效

示例4:通过umask决定新建用户HOME目录的权限

[root@youngfit ~]# vim /etc/login.defs 	//vim打开此文件。修改用户家目录默认权限
UMASK           077
[root@youngfit ~]# useradd gougou
[root@youngfit ~]# ll -d /home/gougou/
drwx------. 4 gougou gougou 4096 3月  11 19:50 /home/gougou/

[root@youngfit ~]# vim /etc/login.defs
UMASK           000
[root@youngfit ~]# useradd yangyang
[root@youngfit ~]# ll -d /home/yangyang/
drwxrwxrwx. 4 yangyang yangyang 4096 3月  11 19:53 /home/yangyang/

<think>首先,用户的问题是关于解决IIS网站无法写入文件的问题。用户提供了几个引用,我需要参考它们,但记住,这些引用不是用户真正的需求,我应该基于上下文尽可能多地参考用户上一次的问题和我的回答。然而,用户没有提供上一次的问题历史,所以我只能基于当前输入。 用户引用的内容: - 引用[1]: 讨论文件操作在C语言中使用fopen和fclose,强调关闭文件的重要性。 - 引用[2]: 文件权限部分,但图片链接失败,有文件权限的讨论。 - 引用[3]: Linux系统使用open函数读取文件,涉及文件描述符和读取操作。 - 引用[4]: Cocos2d-lua中写入日志到文件和删除文件。 用户的问题是:“我想查找解决ⅡS网站无法写入文件问题的方法 请问解决ⅡS网站无法写入文件问题的方法” 注意:用户写了“ⅡS”,但应该是“IIS”,意思是Internet Information Services(互联网信息服务),是Microsoft的Web服务器。 所以,核心问题是:解决IIS网站无法写入文件的问题。 关键点需要覆盖: 1. **文件权限**:IIS运行的用户(通常是IUSR或应用程序池身份)需要有写入目标文件夹的权限。 2. **IIS配置**:可能需要检查应用程序池设置、身份验证等。 3. **路径和路径权限**:确保网站代码中指定的路径是正确的,并且该路径有写入权限。 4. **错误处理**:如何诊断问题,比如检查错误日志。 从引用中提取相关点: - 引用[1]强调了文件打开和关闭的重要性,但IIS中的写入失败可能是权限问题而不是代码问题。 - 引用[2]提到了文件权限,但图片不可用,所以可能涉及Windows文件系统的权限设置。 - 引用[3]是关于Linux的open函数,IIS是Windows-based,所以不太直接相关。 - 引用[4]是关于在应用程序中写入日志,展示了写入文件的代码,但IIS问题更系统和权限相关。 因此,我应该专注于Windows和IIS的特定解决方案。 结构我的回答: 1. **介绍问题**:解释IIS网站无法写入文件的常见原因。 2. **逐步解决方法**:提供清晰、结构化的步骤。 3. **参考引用**:在回答中自然地添加引用标识,例如[^1],但用户提供的引用可能不直接匹配。用户有引用[1]、[2]、[3]、[4],我需要将它们关联到我的回答中。 - 例如,文件权限部分可以参考引用[2]。 - 文件操作可以参考引用[1]和[4]。 但要确保引用相关。 4. **生成相关问题**:作为系统指令的一部分,我需要在回答末尾生成相关问题。 回答格式: - 使用中文回答。 - 行内数学表达式用$...$,但这里可能不涉及数学。 - 独立公式用$$...$$,但可能不需要。 - 回答结构化:清晰、逐步。 关键步骤: 1. **检查文件夹权限**:确保IIS用户(如IUSR或应用程序池标识)有文件夹的写入权限。 2. **验证路径**:确保代码中指定的路径存在且正确。 3. **检查应用程序池标识**:确认应用程序池运行的账户有必要的权限。 4. **查看日志**:检查IIS日志或应用程序日志以获取错误信息。 5. **其他考虑**:如防病毒软件、磁盘空间等。 参考引用: - 对于权限,参考引用[2]。 - 对于文件操作,参考引用[1]和[4]。 - 引用[3]是Linux-specific,可能不相关。 生成相关问题: - 基于主题生成2-3个相关问题。 最终回答结构: 1. 简要介绍问题。 2. 解决方法列表。 3. 详细步骤。 4. 引用标识。 5. §§相关问题§§。 </think>### 解决IIS网站无法写入文件问题的方法 当IIS(Internet Information Services)网站无法写入文件时,这通常是由权限配置错误或路径问题引起的。IIS运行时的用户账户(如`IUSR`或应用程序池标识)可能缺乏目标文件夹的写入权限,或者应用程序代码中的路径设置不当。以下我将逐步解释解决方法,确保您能系统地诊断和修复问题。解决思路基于常见实践,并结合了文件操作和权限管理的原理(参考您提供的引用内容)。 #### 逐步解决方法 1. **检查文件夹权限**(核心步骤) - IIS默认使用`IUSR`账户(匿名访问时)或应用程序池标识(如`ApplicationPoolIdentity`)运行网站。确保这些账户对目标文件夹有写入权限。 - 打开文件资源管理器,右键点击网站要写入的文件夹(例如`C:\inetpub\wwwroot\your-site\data`) → 选择“属性” → 切换到“安全”选项卡。 - 点击“编辑”添加权限: - 如果使用匿名访问,添加用户`IUSR`并勾选“修改”和“写入”权限。 - 如果使用应用程序池标识,添加用户`IIS AppPool\<您的应用程序池名称>`(如`IIS AppPool\DefaultAppPool`),同样勾选“修改”和“写入”。 - **为什么重要?** 文件权限是写入操作的基础,如果账户无权写入,IIS会抛出“访问被拒绝”错误。这与引用[2]中强调的文件权限控制一致,操作系统级别的权限设置直接影响文件操作的成功与否[^2]。 2. **验证应用程序池标识和设置** - 打开IIS管理器 → 在“连接”面板中选择“应用程序池” → 右键点击您的应用程序池 → 选择“高级设置”。 - 确认“标识”属性:默认为`ApplicationPoolIdentity`;如果自定义了账户(如域账户),请确保该账户有文件夹写入权限。 - 检查“.NET CLR 版本”和“管道模式”:确保与您的应用程序兼容(如ASP.NET应用可能需要集成模式)。 - **修复后测试:** 重启应用程序池(右键 → “回收”),然后重新运行网站写入操作。 - **提示:** 权限问题类似引用[1]中文件打开失败的情况——如果账户权限不足,相当于`fopen`返回`NULL`,导致写入失败[^1]。 3. **检查路径和文件存在性** - 在代码中,确认写入路径是否正确且存在。IIS中相对路径可能基于网站根目录(如`~/data/file.txt`),但实际磁盘路径需绝对或正确映射。 - 示例:如果代码使用相对路径(如`./data/file.txt`),请确保它在IIS环境下解析为绝对路径(如`C:\inetpub\wwwroot\your-site\data\file.txt`)。 - 手动创建目标文件夹,避免代码尝试写入不存在的目录(类似引用[4]中使用`io.writefile`时需路径存在)[^4]。 - **诊断工具:** 在应用程序中添加日志输出,记录路径信息(如ASP.NET中使用`Server.MapPath`转换路径),或查看Windows事件查看器(搜索“应用程序日志”)中的错误详情。 4. **检查其他系统级因素** - **磁盘空间和防病毒软件:** 确保服务器磁盘有足够空间,并临时禁用防病毒软件(如Windows Defender)测试是否干扰写入操作。 - **IIS配置:** - 验证网站“身份验证”设置:匿名身份验证应启用,且使用正确的账户(IIS管理器 → 网站 → “身份验证”)。 - 关闭“只读”属性:在文件夹属性 → “常规”选项卡中,确保“只读”未勾选。 - **错误日志:** 查看IIS日志(默认路径`C:\inetpub\logs\LogFiles`)或应用程序错误日志。常见错误代码如`0x80070005`(访问拒绝)可直接指向权限问题。 5. **代码层优化(可选)** - 在应用程序代码中,添加错误处理以确保文件操作安全。例如,在ASP.NET中: ```csharp try { using (StreamWriter writer = new StreamWriter(Server.MapPath("~/data/file.txt"), true)) // true表示追加模式,类似引用[4]的"a+"选项 { writer.WriteLine("测试写入"); } } catch (UnauthorizedAccessException ex) { // 记录错误到日志或事件查看器 EventLog.WriteEntry("Application", $"写入失败: {ex.Message}", EventLogEntryType.Error); } ``` - 这参考了引用[1]中文件打开失败时的错误处理逻辑(如检查`NULL`指针)[^1],也类似引用[4]的日志写入机制[^4]。 #### 总结 - **核心原因:** 90%的IIS写入失败源于权限问题(账户无写入权)或路径错误。 - **推荐顺序:** 先检查权限(步骤1-2),再验证路径和日志(步骤3-4),最后优化代码(步骤5)。 - **预防措施:** 定期审核文件夹权限,并在开发环境中使用模拟测试(如本地IIS调试)。 如果以上步骤无效,请提供具体错误消息,我会进一步协助诊断。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值