特殊权限set_uid、set_gid 、stick_bit,软链接和硬链接

本文详细介绍了Linux系统中特殊权限set_uid、set_gid及sticky bit的用途与配置方法,并对比了软链接与硬链接的区别及其应用场景。
一、特殊权限set_uid
1. 可以看到passwd这个命令的文件名为红色,且所有者权限位为rws,这个就是set_uid
    passwd这个命令具有Set_uid,那么普通用户执行这个命令的时候临时拥有root的身份

设置Set_UID权限仅对二进制文件有效,且是一个可执行的文件
执行者需要对于该文件具有x的可执行权限
本权限仅在执行该命令的过程中有效
普通用户执行该命令时,临时拥有该命令所有者的身份

2.  chmod u+s  给文件加上s权限,
   下面进行一个演示,给ls这个命令加上s权限,让它临时拥有root的身份:
1.[root@localhost ~]# su - lx01                 #切换到普通用户lx01
2.[lx01@localhost ~]$ ls /root/                  #用lx01查看root目录
    ls: 无法打开目录/root/: 权限不够               #提示权限不够
3.[lx01@localhost ~]$ exit                          #回到root用户下
    登出
4.[root@localhost ~]# chmod u+s /usr/bin/ls    #给ls这个命令加上set_uid权限
5.[root@localhost ~]# ls -l /usr/bin/ls
   -rwsr-xr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls          #可以看到ls已经拥有s权限
6.[root@localhost ~]# su - lx01                      #再次切换到lx01这个普通用户下
7.[lx01@localhost ~]$ ls /root/                       #这时执行ls命令时,ls就临时拥有/root/的身份
    anaconda-ks.cfg  qw
3. chmod u-s   将文件的s权限去掉
1.[root@localhost ~]# ls -l /usr/bin/ls
   -rwsr-xr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls    #ls这个文件有s权限
2.[root@localhost ~]# chmod -s /usr/bin/ls    #执行chmod -s
3.[root@localhost ~]# ls -l /usr/bin/ls
   -rwxr-xr-x. 1 root root 117656 11月  6 2016 /usr/bin/ls    #可以看到文件的s权限已经没有
4. chmod u=rws  也可以加上s权限,但这时加的是大S,因为没有加上x的权限,
    但实际上使用的时候并没有影响,因为相对来说普通用户使用的是other权限,有x权限



二、特殊权限set_gid
1.   chmod g+s
     set_uid作用在文件时:普通用户执行文件时临时拥有所属组的权限,文件名背景变成黄色
     set_gid作用在文件时和set_uid类似,只不过set_gid是在文件所属组,set_uid是文件所有者

2.  set_uid作用在目录时:在该目录下创建子文件或者目录的时候,创建的子文件或者目录与该目录的所属组保持一致
1. [root@localhost ~]# ls -ld qw                           #可以看到qw的所属组为lx01
    drwxr-xr-x. 4 root lx01 54 12月 21 17:40 qw
2. [root@localhost ~]# touch qw/11.txt              #在/qw/目录下创建一个文件11.txt
3. [root@localhost ~]# mkdir qw/zx                   #在/qw/目录下创建一个子目录zx
4. [root@localhost ~]# ls -l qw
    -rw-r--r--. 1   root root  0 12月 21 17:37 11.txt    #可以看到11.txt和zx的所属组都是当前用户所属组
    drwxr-xr-x. 2  root root  6 12月 21 17:37 zx           
5. [root@localhost ~]# chmod g+s qw               #给qw加上sit_gid权限
6. [root@localhost ~]# mkdir qw/as                   #/qw/目录下创建一个子目录as
7. [root@localhost ~]# touch qw/22.txt             #/qw/目录下创建一个文件22.txt
8. [root@localhost ~]# ls -l qw
    -rw-r--r--. 1   root  root 0 12月 21 17:37 11.txt
    -rw-r--r--. 1   root  lx01 0 12月 21 17:40 22.txt        #可以看到22.txt和as的所属组和父级目录qw保持一致
    drwxr-sr-x. 2  root  lx01 6 12月 21 17:39 as
    drwxr-xr-x. 2  root  root 6 12月 21 17:37 zx

三、 特殊权限stick_bit
1.chmod o+t   防删除位,给一个目录或者文件加上,那么这个文件或目录就不能被其它的普通用户删除。


/tmp/这个目录的权限是:drwxrwxrwt ,在这样的权限下任何用户都可以在/tmp/内添加,修改文件。但是仅有该文件或目录所有者以及root才能删除自己的文件或目录

四、软链接文件
1. 软链接以路径的形式存在。类似于Windows操作系统中的快捷方式

    软链接生成一个文件的镜像,不会占用磁盘空间,节省了磁盘空间

    软链接是可以跨分区的

    bin这个文件就是一个软链接文件,实际指向的地址为/usr/bin,链接文件的大小是和路径有关系的,路径越长,文件越大


2.ln -s [源文件] [软链接文件]   创建软链接文件

3. 软链接的路径分为相对路径和绝对路径,在当前目录下做的软链接就是相对路径,
    做软链接尽量使用绝对路径,因为一旦原文件的位置出现变更,那么软链接就会失效
   
  
4. 一个小例子
加入在boot分区下有一个服务在不停的写日志到/boot/fy.log,但是boot分区只有200M,很快就写满了
但是日志不能更改位置,只能写到/boot/fy.log里面,那么这时可以做一个软链接,指想/目录下的fy.log
cp /boot/fy.log /fy.log               将boot下的fy.log拷贝到/下
rm /boot/fy.log                           将/boot/下的fy.log删除
ln -s /fy.log /boot/fy.log            做一个软链接将/boot/fy.log指向到/fy.log,这样实际就写到/下的fy.log,解决磁盘空间不足的问题

五、硬链接文件
1. 创建了一个文件,这个文件和另外一个文件使用了相同的inode号,这两个文件相互为硬链接
    硬链接是可以删除的,因为删除其中任何一个文件,但是inode还是存在的,
    这两个文件只占一个文件的空间,因为inode是一样的
1. [root@localhost ~]# ln 11.txt 11_hard.txt                                               #给11.txt做了一个硬链接>>11_hard.txt
2. [root@localhost ~]# ls -li 11*
    16813925 -rw-r--r--. 2 root root 924 12月 22 09:27 11_hard.txt
    16813925 -rw-r--r--. 2 root root 924 12月 22 09:27 11.txt                       #这两个文件使用了相同的inode号,
2.硬链接不支持目录,只支持文件
[root@localhost ~]# ln qw er                    #给目录qw做一个硬链接,名字为er
ln: "qw": 不允许将硬链接指向目录               #出现报错,硬链接不支持目录
3. 硬链接不支持跨分区,因为inode号是在分区是就预先分配好,两个分区会存在相同的inode号
[root@localhost ~]# ln /boot/vmlinuz-3.10.0-693.el7.x86_64 /tmp/11.log
ln: 无法创建硬链接"/tmp/11.log" => "/boot/vmlinuz-3.10.0-693.el7.x86_64": 无效的跨设备连接                 




GDX_CORE_SET_POWER_MODE_CMD 是 NCI(Near Field Communication Controller Interface)协议中用于设置 NFC 控制器电源模式的命令。NCI 协议定义了 NFC 控制器(NFCC)与主机(Host)之间的通信接口,允许主机通过命令控制 NFCC 的行为,包括电源管理、协议配置、数据传输等。 在 NCI 协议中,GDX_CORE_SET_POWER_MODE_CMD 用于通知 NFCC 进入特定的电源模式,例如主动模式(Active)、低功耗监听模式(Low Power Listening)或睡眠模式(Sleep)等。该命令通常由主机发送给 NFCC,以优化功耗并适应不同的应用场景,例如在移动设备中根据用户是否接近来切换电源状态。 该命令的结构通常包括以下字段: - **GID(Group ID)**:标识命令所属的命令组,GDX_CORE_SET_POWER_MODE_CMD 属于 CORE 组。 - **OID(Operation ID)**:标识具体的命令操作,GDX_CORE_SET_POWER_MODE_CMD 对应特定的 OID。 - **Power Mode(电源模式)**:指定 NFCC 应进入的电源模式,通常为 1 字节长度,定义如下: - `0x00`:Active 模式,NFCC 处于完全运行状态,支持所有功能。 - `0x01`:Low Power Listening 模式,NFCC 保持监听状态,功耗较低,适用于等待外部 NFC 事件。 - `0x02`:Sleep 模式,NFCC 进入低功耗状态,仅保留基本功能,通常需要主机发送唤醒命令才能恢复[^1]。 ### 示例 NCI 命令格式 ```c typedef struct { uint8_t gid; // Group ID uint8_t oid; // Operation ID uint8_t power_mode; // Power mode value (0x00, 0x01, 0x02) } nci_core_set_power_mode_cmd_t; ``` NFCC 在接收到该命令后,会根据指定的电源模式调整其内部状态,并通过响应(Response)或通知(Notification)告知主机当前电源状态是否已更改成功[^1]。 电源模式的选择通常取决于设备的使用场景功耗需求。例如,在智能手机中,当 NFC 功能未被使用时,主机可能会将 NFCC 设置为 Low Power Listening 模式以节省电量;而在进行 NFC 交易时,则切换为 Active 模式以确保最大性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值