• 什么是SUID?在Linux/Unix中如何设置SUID


    文件中除了普通的读、写、执行权限外,还有一些特殊的权限,我们可以使用 chmod和chown命令来设置。 他们分别是SUID, SGID, Stricky Bit, ACL's, SUDO and SELinux 等,管理员可以使用这些命令管理文件/文件夹。

    1)什么是SUID?

    2) 如何设置SUID?

    3) 什么地方使用SUID?

    什么是SUID,Linux中如何设置?

    SUID (Set owner User ID up on execution) 是给予文件的一个特殊类型的文件权限。在 Linux/Unix中,当一个程序运行的时候, 程序将从登录用户处继承权限。SUID被定义为给予一个用户临时的(程序/文件)所有者的权限来运行一个程序/文件。简而言之用户在执行程序/文件/命令的时候,将获取文件所有者的权限以及所有者的UID和GID。

    上面的解释比较难理解,下面举例详细说明之。

    通过以下例子来学习SUID:

    例1: passwd 命令

    当要改变账户的密码的时候,我们使用passwd命令,此命令的所有者为root。在我们改变密码的时候, passwd命令将编辑一些配置文件, 如/etc/passwd, /etc/shadow,这些文档只能通过root账户拥有权限打开或者浏览。所以如果我们试着去除SUID并给予passwd全部权限,它无法打开其他文件,如/etc/shadow更新密码。在我们执行 passwd命令的时候,我们将会遇到权限拒绝的错误或者一些其他的错误。所以passwd命令设置SUID将root用户权限给予普通用户 ,使得后者可以更新/etc/shadow和其他文件。

    例2: ping 命令

    类似的如果我们执行 ping命令,当我们执行这个命令的时候,它会打开socket文件和端口发送和接受IP包。普通用户无此权限。所以这个命令设置SUID位,当普通用户在执行这个命令的时候,被授予所有者(Root)权限。当这个命令执行的时候,它将 Root用户的权限授予普通用户来打开socket文件和端口。

    例3: crontab 和 at 命令

    当我们使用crontab或者at命令计划一些工作的时候,我们需要编辑一些位于/etc/目录和crotab相关的配置文件,这些文件普通用户是没有修改权限的。所以crontab/at命令被设置SUID,可以写入数据。

    文件如何设置SUID?

    有两中方式设置SUID

    1) Symbolic way(s, Stands for Set) 符号方式
    2) Numerical/octal way(4)  数字方式

    使用 chmod 命令设置文件 SUID : file1.txt

    Symbolic way: 符号方式:

    chmod u+s file1.txt

    将所有者的执行权限位被设置成s。

    Numerical way:数字方式

    chmod 4750 file1.txt

    在 4750中, 4 说明 SUID 位被设置, 7 为所有者读写执行权限, 5 为所有组的读执行权限,其他无任何权限。

    如何检查一个文件是否设置了SUID位?

    使用 ls –l 命令检查是否所有者执行权限被s或者S所取代。

    比如: file1.txt 列出设置SUID前后的属性

    设置 SUID前:

    ls -l

    total 8
    
    -rwxr--r-- 1 xyz xyzgroup 148 Dec 22 03:46 file1.txt

    设置SUID后:

    ls -l

    total 8
    
    -rwsr--r-- 1 xyz xyzgroup 148 Dec 22 03:46 file1.txt

    和SUID有关的一些问答:

    A) SUID在哪来使用 ?

    1) 需要root账户来执行一个写命令/程序/脚本。

    2) 不想给特定用户以认证但是想作为使用者来执行一些程序。

    3) 不想使用SUDO命令但是想给予一个文件/脚本执行权。

    B) 我在文件权限看到  “S” 大写的 “s”,这是什么?

    给文件/文件夹设置 SUID后,如果在文件的权限部分看到 ‘S’ ,说明这个用户对这个文件/目录没有执行权。

    如下:

    chmod u+s file1.txt

    ls -l
    -rwSrwxr-x 1 surendra surendra 0 Dec 27 11:24 file1.txt

    如果你想将S转变成s,像下面一样增加这个文件的执行权。

    chmod u+x file1.txt
    ls -l
    -rwsrwxr-x 1 surendra surendra 0 Dec 5 11:24 file1.txt

    你将会看到小写的  's' 已经出现在执行属性的位置上了。

    SUID 带执行权限:

    SUID_Linux

    SUID 不带执行权:

    SUID_Linux_without_execute_permissions

    C) 如何在Linux/Unix中寻找设置了SUID的文件 .

    find / -perm +4000

    上面的find命令将会查找带有SUID位(4000)的文件。

    D) 可以为文件夹设置SUID吗?

    可以,如果有需要。(Linux将所有的东西都当文件对待)。

    E) SUID 的数字值?

    4.

    原文地址:http://www.linuxnix.com/2011/12/suid-set-suid-linuxunix.html

  • 相关阅读:
    shell 守护进程
    leetcode Find Minimum in Rotated Sorted Array II python
    find: missing argument to `-exec'
    php fpm start.sh
    mysql alter
    nginx log format
    leetcode Contains Duplicate II python
    webpack
    各种安装包打包发布工具
    VueJS 事件修饰符
  • 原文地址:https://www.cnblogs.com/shi-zheng/p/3222116.html
Copyright © 2020-2023  润新知