什么是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

 

posted @ 2013-07-29 00:59  Cymbidium  阅读(3611)  评论(1编辑  收藏  举报