Linux之权限设置(默认权限、隐藏权限及特殊权限)

博文大纲:

  • 一、umask命令(默认权限)
  • 二、chattr及lsattr命令(隐藏权限)
  • 三、 SUID、SGID及SBIT的作用(特殊权限)

一、umask命令:

umask是chmod相关的东西,代表权限掩码,总共4位,以反掩码的形式表示,文件的原始权限是666,目录的原始权限是777,将相应的原始权限和umask值进行与运算,得出的结果就是默认新建的文件或目录的权限。具体如下:

[[email protected] ~]# umask     #执行umask命令
0022

可以查看出来四位数字,分别是“0022”,依次表示的是特殊权限、属主权限、属组权限以及其他人的权限,如上面查询出来的0022,那么现在新建一个文件,该文件的默认权限就是644,若新建一个目录,那么该目录的默认权限就是755,如下:

[[email protected] tmp]# touch test1.txt    #新建一个文件
[[email protected] tmp]# ll test1.txt     #可以看到默认的权限为644
-rw-r--r-- 1 root root 0 Aug 12 17:51 test1.txt
[[email protected] tmp]# mkdir test2  #新建一个目录
[[email protected] tmp]# ls -ld test2     #可以看到默认的权限为755
drwxr-xr-x 2 root root 6 Aug 12 17:51 test2

修改umask权限数字:

[[email protected] ~]# umask 0002        #直接在umask命令后输入权限数字即可
[[email protected] ~]# umask    #验证
0002

umask命令只能临时修改umask值,系统重启之后umask将还原成默认值。如果要永久修改umask值,需要修改/etc/profile文件或是修改/etc/bashrc文件,例如要将默认umask值设置为027,那么可以在文件中增加一行“umask 027”,并且使用source /etc/profile,使更改生效。

/etc/profile和/etc/bashrc都可以用于设置用户登录系统时自动执行某些操作,他们的区别是/etc/profile只在用户第一次登录时被执行,而/etc/bashrc则在用户每次登录加载Bash Shell时都会被执行。

因而,如果是修改/etc/profile文件,将只对新创建的用户生效;而如果是修改/etc/bashrc文件,则对所有用户都生效。

针对对某个特定用户,以上两种配置文件,.bashrc文件中的配置优先级更高。

二、chattr及lsattr命令

有时候我们会遇到这种情况,就是root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了。chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的linux系统都是2.6以上内核了。通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr命令不能保护/、/dev、/tmp、/var目录。lsattr命令是显示chattr命令设置的文件属性。

这两个命令是用来查看和改变文件、目录属性的,与chmod这个命令相比,chmod只是改变文件的读写、执行权限,更底层的属性控制(也就是特殊权限)是由chattr来改变的。

1、chattr命令用法:

[[email protected] ~]# chattr [+-=] [ASacdistu]   文件或目录名

各个选项含义如下:

  • + :在原有隐藏参数设定基础上,追加某一个或多个隐藏参数。
  • - :在原有隐藏参数设定基础上,移除某一个隐藏参数。
  • = :更新为指定隐藏参数。
  • A:当设置了A这个属性时,若你有重新存取此文件或目录时,该文件或目录本身的atime将不被修改,可避免I/O较慢的机器过度的存取磁盘(目前建议使用文件系统挂载参数处理这个项目)。
  • S:一般文件是非同步写入磁盘的,如果加上S这个属性,说明当你进行任何文件的修改,该更改会“同步”写入磁盘中。
  • a:即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。
  • c:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。
  • d:即no dump,设定文件不能成为dump程序的备份目标。
  • i:就是锁定某一个文件或目录,设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件系统的安全设置有很大帮助。
  • j:即journal,设定此参数使得当通过mount参数:data=ordered 或者 data=writeback 挂载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为 data=journal,则该参数自动失效。
  • s:当文件设置了s属性时,如果这个文件被删除,它将完全的移除这个硬盘空间。所以如果误删除了,也就完全无法救回来了。
  • u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以使用数据恢复技术恢复其数据。

各参数选项中常用到的是a和i。a选项强制只可添加不可删除,多用于日志系统的安全设定。而i是更为严格的安全设定,只有superuser (root) 或具有CAP_LINUX_IMMUTABLE处理能力(标识)的进程能够施加该选项。

注:xfs文件系统仅支持AadiS参数。

2、lsattr命令语法:

[[email protected] ~]# lsattr [adR]  文件或目录

各个选项含义如下:
-a:将隐藏文件的属性也显示出来;
-d:如果查看的是目录,仅列出目录本身的属性而不是目录内的文件名;
-R:连同子目录的数据也一并列出来;

用法示例:

1、用chattr命令防止系统中某个关键文件被修改:

[[email protected] ~]# chattr +i /etc/resolv.conf

然后用mv /etc/resolv.conf等命令操作于该文件,都是得到Operation not permitted 的结果。vim编辑该文件时会提示W10: Warning: Changing a readonly file错误。要想修改此文件就要把i属性去掉: chattr -i /etc/resolv.conf

[[email protected] ~]# lsattr /etc/resolv.conf   #查看一下属性,会得到以下结果
----i-------- /etc/resolv.conf

2、让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:

[[email protected] ~]# chattr +a /var/log/messages

三、 SUID、SGID及SBIT的作用

1、SUID的作用

其实SUID和SGID的作用跟sudo是相似的。当用户A想执行一个原本属于用户B的可执行文件时,若B的文件设置了suid位,则A在执行时是以用户 B的身份来执行。

SUID是Set UID的简称,翻译过来是设置用户ID,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。例如,使用如下命令:

[[email protected] ~]# ls -ld /usr/bin/passwd     #查询passwd命令
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd

可以看到,在文件拥有者的执行位上出现为s而不是x,所以说passwd这个程序是具有SUID权限的。我们在修改用户密码的时候,用的就是passwd这个命令,这是系统默认给了passwd这个命令的SUID权限,因为总不能说用户改自己的密码还需要提权吧?

我们都知道密码是保存在/etc/shadow中的,但是这个文件,只有root可以写入,那么我们普通用户是怎么将新密码写入的呢?这就和SUID有关了,当我们使用passwd命令时,就获得了passwd的所有者也就是root的权限,进而可以对shadow文件进行写入操作。

SUID的特点:
1.SUID只对二进制文件有效;
2.调用者对该文件(如/usr/bin/passwd)有执行权,也就是“x”权限
3.在执行过程中,调用者会暂时获得该文件的所有者权限
4.该权限只在程序执行的过程中有效

下图可以生动的表示SUID的作用:

2、SGID的作用

SGID即Set GID的缩写,它出现在文件所属组权限的执行位上面,它对普通二进制文件和目录都有效。当它作用于普通文件时,和SUID类似,在执行该文件时,用户将获得该文件所属组的权限。当SGID作用于目录时,意义就非常重大了。当用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件,如果该目录有SGID的特殊权限,则该用户在这个目录下建立的文件都是属于这个目录所属的组。

SGID的特点:
1、SGID对二进制程序、文件或目录都有效;
2、程序执行者对于该程序来说,需具备“x”权限;
3、执行者在执行过程中将会获得该程序群组的支持;

3、SBIT

SBIT即Sticky Bit,它出现在其他用户权限的执行位上,它只能在一个目录上设置。当某一个目录拥有SBIT权限时,则任何一个能够在这个目录下建立文件的用户,该用户在这个目录下所建立的文件,只有该用户自己和root可以删除,其他用户均不可以。/tmp就是很好的例子,例如:

[[email protected] tmp]$ touch a.txt    #用户“lv”在tmp目录下创建一个文件
[[email protected] tmp]$ ls -ld /tmp
#确认/tmp目录的权限为777,并且有“t”权限
drwxrwxrwt. 16 root root 4096 8月  13 16:27 /tmp
[[email protected] tmp]$ chmod 777 a.txt    #将新建的文件改为777权限
[[email protected] tmp]$ ls -ld a.txt    #确认一下
-rwxrwxrwx 1 lv lv 0 8月  13 16:27 a.txt
#至此,在一般目录下,所有人都可以删除这个a.txt文件了
#但由于/tmp目录有“t”的特殊权限,所以并不可以,来验证一下
[[email protected] tmp]$ su lvjianzhao  #切换至另一个用户
密码:
[[email protected] tmp]$ rm -rf a.txt     #进行强制删除,会提示以下
rm: 无法删除"a.txt": 不允许的操作

这就是SBIT的作用。

修改SUID、SGID及SBIT有两种方法,都是使用chmod这个命令,chmod既可以修改普通权限,也可以修改这三个特殊权限,

这三个特殊权限分别对应的权限数字为:
suid=4
sgid=2
sbit=1

如,想要给/tmp目录一个sbit的权限,那么执行以下两种命令其中之一即可:

[[email protected] /]# chmod o+t /tmp
                                   或
[[email protected] /]# chmod 1777 /tmp   #其中权限数字中的第一位就是特殊权限位

注:u=用户;g=组;o=其他人,一般推荐使用权限数字方法修改权限,方便些!!!

使用举例:

[[email protected] /]# chmod o-t /tmp  #将/tmp目录去掉“t”的权限
[[email protected] /]# ls -ld /tmp    #查看,“t”的权限没有了,刚才的a.txt谁也可以删除了
drwxrwxrwx. 16 root root 4096 8月  13 16:30 /tmp
[[email protected] /]# chmod 1777 /tmp   #使用数字权限加上“t”的权限
[[email protected] /]# ls -ld /tmp
drwxrwxrwt. 16 root root 4096 8月  13 16:30 /tmp

———————— 本文至此结束,感谢阅读 ————————

原文地址:https://blog.51cto.com/14154700/2429203

时间: 2024-10-11 19:10:01

Linux之权限设置(默认权限、隐藏权限及特殊权限)的相关文章

Linux 服务器如何设置文件和文件夹的读写权限

修改文件可读写属性的方法 例如:把index.htm 文件修改为可写可读可执行: chmod 777 index.htm 要修改目录下所有文件属性可写可读可执行: chmod 777 *.* 该命令中可以使用 * 作为通配符. 比如:修改所有htm文件的属性: chmod 777 *.htm 修改文件夹属性的方法 把目录 /images/small 修改为可写可读可执行: chmod 777 /images/small 修改目录下所有的文件夹属性: chmod 777 * 把文件夹名称用 * 来

Linux中如何设置目录或文件的归属及权限

我们首先来查看一下目录的权限及归属,各个字段表示的含义: 权限字符在文件中的含义为: 读取.写入.执行权限也可以用数字来表示,具体如下: 命令chmod用来更改目录或文件的权限,基本的命令格式如下: chmod [ugoa] [+=-] [r w x] 文件或目录 或者 chmod nnn 文件或目录 其中ugoa表示该权限设置所针对的用户类别.u代表文件属主:g代表文件属组:o代表其他任何用户:a代表所有用户(u.g.o的总和). +=-表示设置权限的操作动作.+代表增加相应的权限:- 代表减

Linux平台中设置文件的执行、写权限

最近在开发过程中遇到一个问题,进行文件拷贝的时候,某些可执行文件在linux平台中会出现权限丢失的现象,例如:一个exe文件在windows平台上不涉及权限,通过Java代码拷贝到Linux中就会出现权限丢失的问题.最后只能通过文件复制之后,再通过代码进行权限设置例如文件的读写与执行权限等. /** * 功能描述:设置文件的执行.写权限,linux用<br> * @param fileName * @param able * @param ownerOnly * @return boolean

windows server网络共享权限设置

文件共享权限有两种权限设置,只要理解这两种权限设置就可以在域控灵活运用. 第一种是网络共享权限 共享权限是控制用户通过网络访问共享文件夹的手段,共享权限仅当用户通过网络访问时才有效,本地用户不受此权限制约. 相比NTFS权限(安全权限),共享权限的设置要简单得多,共享权限只有三种:完全控制.更改.读取. 当用户通过网络直接访问文件夹时,不受NTFS权限(安全权限)的约束,只受共享权限的约束. 第二种是NTFS权限 NTFS权限(安全权限)是限制本地用户文件夹的手段,NTFS权限(安全权限)仅当用

MIUI应用权限设置

随着miui越来越封闭,小米对非自由渠道的应用限制越来越苛刻,我们公司的产品一半以上的用户都是来自小米,而且像我们这样的靠短信支付维持收入的游戏,短信权限默认禁止真是要了我们的命.被加入miui黑名单的游戏默认重要的权限都是禁止状态,譬如发送短信权限默认设置为禁止就直接断了我们收入来源.因此花了几个小时在网上搜索相关资料,我们不能帮助用户打开应用的权限至少我们能够引导用户去打开应用权限,并且将引导尽可能做的很简单. 资料一:跳转miui应用权限设置页面(之兼容V5/V6老版本只跳转上一级界面即可

SQL Server 数据库权限设置

一.登录权限:SQL server的身份验证模式有以下两种: 1. Windows身份验证模式: 当使用Windows身份验证时,SQL server会使用操作系统中的Windows用户和密码.也就是说,当用户身份由Windows进行验证,SQL server不要求提供密码,也不执行身份验证.Windows身份验证是比SQL server身份验证更为安全的,可以保护SQL server免受大部分来自Internet的 攻 击.Windows身份验证适合用于在局域网内部(如AD域)访问数据库的情况

MongoDB学习之权限设置详解

MongoDB数据库是一个基于分布式文件存储的数据库,为目前主流的NoSQL数据库,已被应用到许多高性能的大型系统中.如果之前从未接触MongoDB,可以访问 MongoDB官网 快速了解其主要特性及应用场景. MongoDB的安装 此文示例的环境基于CentOS 7.3 64位,MongoDB版本为3.2.4. 1. 在服务器上,以超级用户权限执行yum安装,命令如下: [[email protected]]# su [username] -- username 为你登陆服务器的用户名[[em

xcode7.3 升级 xcode8.0 后权限设置问题(升级xcode 8.0 后构建版本不显示问题)

前两天为了适配 iOS10 的系统 我将xcode 7.3 升级到了 xcode 8.0 但是在给项目升级的时候用xcode8.0打包并且上传构建的版本后,在新建版本里看不到新上传的 构建版本 并且在"活动"里也找不到新版本的信息,上传多次还是不行如下图 经查阅资料是 iOS10的权限兼容问题,现有如下解决办法 打开 info.plist 文件添加一下 权限设置(原则上只添加在你的项目中需要的权限设置就可以了) 1.访问麦克风权限:Privacy - Microphone Usage

通用权限管理系统数据权限设置功能解析

在权限管理系统中,数据权限是比较难的,在我们通用权限系统中,数据权限指的是用户基于某个权限域对某些基础数据的操作权限,如上图,公司管理这个菜单被定义是数据权限,表示某些人在公司管理是可指定访问哪些基础数据,这个要与应用结合.如下图,可以限制该9999xudeng003用户在公司管理页面只能管理其中的几个公司. 目前基于用户的数据权限BS的管理功能已完成,这个是权限系统最难开发的一部分. 下面是MVC控制器调的通用权限管理系统底层的方法: //---------------------------

LFCS 系列第八讲:管理用户和用户组、文件权限和属性以及启用账户 sudo 访问权限

由于 Linux 是一个多用户的操作系统(允许多个用户通过不同主机或者终端访问一个独立系统),因此你需要知道如何才能有效地管理用户:如何添加.编辑.禁用和删除用户账户,并赋予他们足以完成自身任务的必要权限. (LCTT 译注:本篇原文章节顺序有误,根据理解做了调整.) 添加用户账户 添加新用户账户,你需要以 root 运行以下两条命令中的任意一条: # adduser [new_account] # useradd [new_account] 当新用户账户添加到系统时,会自动执行以下操作: 自动