Linux中的文件特殊权限

本文深入讲解Linux中的特殊权限,包括SetUID、SetGID和Sticky Bit,详细介绍了它们的作用、应用场景以及设置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux中的文件特殊权限 
linux中除了常见的读(r)、写(w)、执行(x)权限以外,还有3个特殊的权限,分别是setuid、setgid和stick bit1、setuid、setgid先看个实例,查看你的/usr/bin/passwd 与/


etc/passwd文件的权限 [root@MyLinux ~]# ls -l /usr/bin/passwd /etc/passwd-rw-r--r-- 1 root root  1549 08-19 13:54 /etc/passwd-rwsr-xr-x 1 root root 22984 2007-01-07 /usr/bin/passwd复制代码众所周知,/etc/passwd文件存放的各个用户的账号与密码信息,/usr/bin/passwd是执行修改和查看此文件的程序,但从权限上看,/etc/passwd仅有root权限的写(w)权,可实际上每个用户都可以通过/usr/bin/passwd命令去修改这个文件,于是这里就涉及了linux里的特殊权限setuid,正如-rwsr-xr-x中的ssetuid就是:让普通用户拥有可以执行“只有root权限才能执行”的特殊权限,setgid同理指”组“作为普通用户是没有权限修改/etc/passwd文件的,但给/usr/bin/passwd以setuid权限后,普通用户就可以通过执行passwd命令,临时的拥有root权限,去修改/etc/passwd文件了2、stick bit (粘贴位)再看个实例,查看你的/tmp目录的权限[root@MyLinux ~]# ls -dl /tmpdrwxrwxrwt 6 root root 4096 08-22 11:37 /tmp复制代码 tmp目录是所有用户共有的临时文件夹,所有用户都拥有读写权限,这就必然出现一个问题,A用户在/tmp里创建了文件a.file,此时B用户看了不爽,在/tmp里把它给删了(因为拥有读写权限),那肯定是不行的。实际上是不会发生这种情况,因为有特殊权限stick bit(粘贴位)权限,正如drwxrwxrwt中的最后一个tstick bit (粘贴位)就是:除非目录的属主和root用户有权限删除它,除此之外其它用户不能删除和修改这个目录。也就是说,在/tmp目录中,只有文件的拥有者和root才能对其进行修改和删除,其他用户则不行,避免了上面所说的问题产生。用途一般是把一个文件夹的的权限都打开,然后来共享文件,象/tmp目录一样。3、如何设置以上特殊权限      setuid:chmod u+s xxxsetgid: chmod g+s xxxstick bit : chmod o+t xxx或者使用八进制方式,在原先的数字前加一个数字,三个权限所代表的进制数与一般权限的方式类似,如下:suid   guid    stick bit  1        1          1所以:suid的二进制串为:100,换算十进制为:4guid的二进制串为:010,换算:2stick bit 二进制串:001,换算:1于是也可以这样设:setuid:chmod 4755 xxxsetgid:chmod 2755 xxxstick bit:chmod 1755 xxx最后,在一些文件设置了特殊权限后,字母不是小写的s或者t,而是大写的S和T,那代表此文件的特殊权限没有生效,是因为你尚未给它对应用户的x权限  Linux下用户管理   Linux有3类用户   A.超级用户:root 具有操作系统的一切权限,UID为0  Linux下用户管理  Linux有3类用户  A.超级用户:root 具有操作系统的一切权限,UID为0  B.普通用户:即非管理员用户,具有有限权限,UID:500-6000  C.伪用户:方便系统管理,满足相应的系统进程文件属主的要求,伪用户不能登陆系统,UID:1-499  管理用户通过/etc/passwd文件进行,只定义帐号,不定义口令。  passwd:  每行一个帐号,每行7个部分,分号隔开  用户名:密码(x,表示有密码):UID:GID:用户相关信息:/home/(用户家目录):/bin/bash(用户登陆环境)  shadow:  用户名:口令:最后一次修改密码的时间:最大时间间隔:最小时间间隔:警告时间:不活动时间:失效时间  口令:第一个字符是“!”表示用户不能登陆  密码时间:以秒计算  最大时间间隔:更改密码频率,0表示可以随时改变  最小时间间隔:在最小时间内必须改密码,"99999"表示永不过期  警告时间:提示过期前修改密码  不活动时间:延期时间  失效时间:有效期限  创建帐号:  原理(手动添加而不是使用useradd命令):  1./etc/passwd中添加一条记录  2.创建用户主目录以及权限  3.在用户主目录中设置默认的配置文件  4.设置用户初始口令  使用命令:useradd或者adduser  useradd username [-u uid] [-g gruop] [-s /bin/sh | /sbin/nologin] [-d /home/username]  …  passwd username  userdel [-r] username    (删除用户,-r表示删除家目录)  usermod -l new_username old_username (不改变家目录)  usermod -L username  (锁定用户)  usermod -U username  (解锁用户)  停用帐号:注释/etc/passwd里用户所在行,即加“#”,类是删除,但是用户信息是没有删除的,这就是不同之处。  passwd -S username 锁定密码  passwd -U username 解锁密码  /etc/skel  如果该目录下有文件,则创建目录时用户家目录下就会有该文件夹的内容,相当于模版。  用户组管理  A.私有组:新建用户时若没有指定所属组会新建一个与用户名相同的组  B.标准租:可容纳多个用户,若使用标准组在创建新用户是就应该指定该用户所属于的组  配置文件:  /etc/group  group_name:x:GID:username_list(逗号隔开)  组口令(x)一般不用  groupadd group_name  groupmod -n new_name old_name  groupdel group_name  删除的组帐号必须存在且不能是私有组  gpasswd -a username group_name 添加已经存在的用户到组  gpasswd -d username group_name  groups username 查看某个用户所在组  id [opition] username  查看用户UID和GID信息  finger [opition] username 查看用户的相关信息,包括主目录、启动Shell和用户名等  Linux特殊权限  特殊权限   s  SetUID  当一个命令具有SetUID权限时,普通用户在执行此命令时,将以这个命令所有者的身份执行,  ll /etc/passwd /etc/shadow  -rw-r--rxx 1 root root 1795 Sep 25 10:12 /etc/passwd  -r-------- 1 root root 1239 Sep 25 1:12 /etc/shadow   (存储密码)  ll /usr/bin/passwd  -rwsr-xr-x 1 root root 11960 Jul 17 2006 /urs/bin/passwd  这就是普通用户可以修改自己的密码的原因!  特殊权限   :  粘着位t  粘着位定义:当权限为777的目录被授予粘着位,那么每个用户只能在此目录下删除自己是所有者的文件。  例如:  ll /tmp  drwxrwxrwt 8 root root 4096 Sep 25 09:55 /tmp  特殊权限 chattr  管理员也无法删除的文件  加权限:  chattr +i 文件名   (执行后文件权限看起来没有变化)  i 是不可修改和删除  a 是只可以追加(例如日志文件)  还有一些其他权限,总共11个!  查看该特殊权限: lsattr filename  用户权限指派  配置sudo  编辑:visudo  (不能用VI编辑)  用户名 主机名(IP)=命令1,命令2,命令3,……(绝对路径)  执行,则  sodu 被授权的密码  会提示密码,输入授权的密码,而不是root密码  查询   sudo -l  案例:授权用户zhangsan全权管理Apche  安装为源码版本,安装目录:/apache  visudo  zhangsan localhost.locadomain=/apche/bin/httpd,/bin/vi /apache/conf/httpd.conf  Linux复杂权限控制:ACL  负责权限分配管理  针对分区  mount -o remount,acl /home  或者修改配置文件  /etc/fstab  ,加在defaults,acl  设置:  setfacl -m u:username:rwx filename  getfcal /filename本文导读[隐藏]特殊权限的介绍Set UIDSet GIDSticky BitSUID/SGID/SBIT权限设置先看SUID的作用及设置再看SGID的作用及设置最后我们来看SBIT的作用及设置两个需要注意的问题问题1:用数字改变目录的特殊权限,不起作用。问题2:为什么会有大写的S和T。我们前面学习了Linux上最基本的权限rwx。如果细心的朋友,一定会发现,根目录下面的tmp这个目录的权限有点不同,他后面多了一个t,那么这个t是什么意思呢?这就是我们今天要讲的内容:特殊权限(SUID/SGID/SBIT)。先来看看两个特殊的文件与目录[root@yufei ~]# ls -l /usr/bin/passwd-rwsr-xr-x. 1 root root 26968 Jan 29  2010 /usr/bin/passwd[root@yufei ~]# ls -l /usr/bin/wall-r-xr-sr-x. 1 root tty 10932 Apr 27  2010 /usr/bin/wall[root@yufei ~]# ls -ld /tmp/drwxrwxrwt. 7 root root 4096 Jan 20 11:00 /tmp/ 这一个passwd命令在所有者的地方多了一个s,第二个wall命令在用户组的位置多了一个s,第三个tmp目录,多了一个t。这是为什么呢?下面我们就来具体看看,这些特殊的权限是什么意思?如何设置?特殊权限的介绍Set UID当s这个标志出现在文件所有者的x权限上时,如/usr/bin/passwd这个文件的权限状态:“-rwsr-xr-x.”,此时就被称为Set UID,简称为SUID。那么这个特殊权限的特殊性的作用是什么呢?1、SUID权限仅对二进制程序(binary program)有效;2、执行者对于该程序需要具有x的可执行权限;3、本权限仅在执行该程序的过程中有效(run-time);4、执行者将具有该程序拥有者(owner)的权限。SUID的目的就是:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。passwd就是一个很鲜明的例子,下面我们就来了解一下这相passwd执行的过程。我们知道,系统中的用户密码是保存在/etc/shadow中的,而这个文件的权限是----------. (这个权限和以前版本的RHEL也有差别,以前的是-r--------)。其实有没有r权限不重要,因为我们的root用户是拥有最高的权限,什么都能干了。关键是要把密码写入到/etc/shadow中。我们知道,除了root用户能修改密码外,用户自己同样也能修改密码,为什么没有写入权限,还能修改密码,就是因为这个SUID功能。下面就是passwd这个命令的执行过程1、因为/usr/bin/passwd的权限对任何的用户都是可以执行的,所以系统中每个用户都可以执行此命令。2、而/usr/bin/passwd这个文件的权限是属于root的。3、当某个用户执行/usr/bin/passwd命令的时候,就拥有了root的权限了。4、于是某个用户就可以借助root用户的权力,来修改了/etc/shadow文件了。5、最后,把密码修改成功。注:这个SUID只能运行在二进制的程序上(系统中的一些命令),不能用在脚本上(script),因为脚本还是把很多的程序集合到一起来执行,而不是脚本自身在执行。同样,这个SUID也不能放到目录上,放上也是无效的。Set GID我们前面讲过,当s这个标志出现在文件所有者的x权限上时,则就被称为Set UID。那么把这个s放到文件的所属用户组x位置上的话,就是SGID。如开头的/usr/bin/wall命令。那么SGID的功能是什么呢?和SUID一样,只是SGID是获得该程序所属用户组的权限。这相SGID有几点需要我们注意:1、SGID对二进制程序有用;2、程序执行者对于该程序来说,需具备x的权限;3、SGID主要用在目录上;理解了SUID,我想SGID也很容易理解。如果用户在此目录下具有w权限的话,若使用者在此目录下建立新文件,则新文件的群组与此目录的群组相同。Sticky Bit这个就是针对others来设置的了,和上面两个一样,只是功能不同而已。SBIT(Sticky Bit)目前只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除。最具有代表的就是/tmp目录,任何人都可以在/tmp内增加、修改文件(因为权限全是rwx),但仅有该文件/目录建立者与 root能够删除自己的目录或文件。注:这个SBIT对文件不起作用。SUID/SGID/SBIT权限设置和我们前面说的rwx差不多,也有两种方式,一种是以字符,一种是以数字。4 为 SUID = u+s2 为 SGID = g+s1 为 SBIT = o+t下面我们就来看看如何设置,并看看达到的效果。先看SUID的作用及设置[root@yufei ~]# cd /tmp/[root@yufei tmp]# cp /usr/bin/passwd ./[root@yufei tmp]# mkdir testdir上面两步是在/tmp目录下创建passwd文件和testdir目录下面看看这两个的权限[root@yufei tmp]# ls -l passwd ; ls -ld testdir/-rwxr-xr-x. 1 root root 26968 Jan 20 23:27 passwddrwxr-xr-x. 2 root root 4096 Jan 20 19:25 testdir/我们切换到yufei用户,然后修改自己的密码[root@yufei tmp]# su yufei[yufei@yufei tmp]$ ./passwdChanging password for user yufei.Changing password for yufei.(current) UNIX password:New password:            Retype new password:passwd: Authentication token manipulation error发现上面的yufei改不了自己的密码,为什么呢?就是因为没有权限把密码写入到/etc/shadow中。想让普通用户能修改/etc/shadow的话,那就需要用到SUID了。[yufei@yufei tmp]$ su rootPassword:[root@yufei tmp]# chmod u+s passwd[root@yufei tmp]# ls -l passwd-rwsr-xr-x. 1 root root 26968 Jan 20 23:27 passwd看到有SUID权限了,下面再来修改yufei自己的密码[yufei@yufei tmp]$ ./passwdChanging password for user yufei.Changing password for yufei.(current) UNIX password:New password:Retype new password:passwd: all authentication tokens updated successfully.我们发现已经成功了。我想这一下,你对SUID的作用已经了解了吧。如果想把这个改回来(就是把SUID的权限去掉),我们用数字方式来设置[root@yufei tmp]# chmod 0755 passwd[root@yufei tmp]# ls -l passwd-rwxr-xr-x. 1 root root 26968 Jan 20 23:27 passwdOK这样就改过来了,这个数字的原理和我们前面讲的rwx是一样的,只是在最前面设置相应的数字而已。注:在普通用户修改自己的密码是,密码要设置的复杂点,否则的话,通过不了认证,普通用户和root用户的权限是不同的。再看SGID的作用及设置我们以前面建立的/tmp/testdir为例子[root@yufei tmp]# ls -ld testdir/[root@yufei tmp]# chmod 757 testdir/[root@yufei tmp]# ls -ld testdir/drwxr-xrwx. 2 root root 4096 Jan 20 19:25 testdir/这时候,任何用户对此目录都有写入权限,那么我们就在这个目录里面创建文件与目录,并看看他们的权限如何[root@yufei tmp]# su yufei[yufei@yufei tmp]$ touch testdir/file1[yufei@yufei tmp]$ mkdir testdir/dir1[yufei@yufei tmp]$ ls -l testdirtotal 0drw-rw-r--. 1 yufei yufei 0 Jan 21 10:33 dir1-rw-rw-r--. 1 yufei yufei 0 Jan 21 10:33 file1这时候的文件与目录权限都是创建者的本身下面我们就来看看,把这个目录加上SGID权限后,再创建文件与目录,会是什么样的效果[yufei@yufei tmp]$ su rootPassword:[root@yufei tmp]# chmod g+s testdir/[root@yufei tmp]# ls -ld testdir/drwxr-srwx. 2 root root 4096 Jan 21 10:33 testdir/[root@yufei tmp]# su yufei[yufei@yufei tmp]$ touch testdir/file2[yufei@yufei tmp]$ mkdir testdir/dir2[yufei@yufei tmp]$ ls -l testdir/total 0drw-rw-r--. 1 yufei yufei 0 Jan 21 10:33 dir1drw-rw-r--. 1 yufei root  0 Jan 21 10:36 dir2-rw-rw-r--. 1 yufei yufei 0 Jan 21 10:33 file1-rw-rw-r--. 1 yufei root  0 Jan 21 10:35 file2[yufei@yufei tmp]$ ls -ld testdir/drwxr-srwx. 2 root root 4096 Jan 21 10:36 testdir/这时候我们就发现,file2和dir2的用户组变成了root了,也就是他们上层目录testdir这个目录的所属用户组。这个应用,应用在一个项目的共同开发上,是很方便的。[yufei@yufei tmp]$ su rootPassword:[root@yufei tmp]# chmod g-s testdir/[yufei@yufei tmp]$ ls -ld testdir/drwxr-xrwx. 2 root root 4096 Jan 21 10:36 testdir/这样就还原了最后我们来看SBIT的作用及设置[root@yufei tmp]# rm -fr testdir/*[root@yufei tmp]# ls -ld testdir/drwxr-xrwx. 2 root root 4096 Jan 21 11:42 testdir/清空/tmp/testdir/目录里面的全部内容。我们切换成普通用户,然后再里面创建文件,至少需要两个普通用户来测试这个,如果没有的话,就自己建立。[root@yufei tmp]# su yufei[yufei@yufei tmp]$ touch testdir/yufei_file[yufei@yufei tmp]$ ls -l testdir/total 0-rw-rw-r-- 1 yufei yufei 0 Jan 21 11:45 yufei_file这时候我们建立了一个文件,我们换成另外一个用户[yufei@yufei tmp]$ su opsersPassword:[opsers@yufei tmp]$ ls -ld testdir/drwxr-xrwx. 2 root root 4096 Jan 21 11:45 testdir/我们看到,虽然其他用户对yufei_file只有只读权限,但由于yufei_file所在的目录,对其他人是全部的权限,所以,我们换其他用户还是可以删除这个文件的,看操作[opsers@yufei tmp]$ rm -f testdir/yufei_file[opsers@yufei tmp]$ ls testdir/发现我们已经删除了这个不属于我们的权限。下面我们就给这个目录加上SBIT权限,再来看看效果[opsers@yufei tmp]$ su rootPassword:[root@yufei tmp]# chmod o+t testdir[root@yufei tmp]# ls -ld testdir/drwxr-xrwt. 2 root root 4096 Jan 21 11:49 testdir/再一次切换普通用户,创建文件[root@yufei tmp]# su yufei[yufei@yufei tmp]$ touch testdir/yufei_file[yufei@yufei tmp]$ ls -l testdir/yufei_file-rw-rw-r-- 1 yufei yufei 0 Jan 21 11:51 testdir/yufei_file这个文件的权限还是和第一次创建的时候是一样的,我们再换成其他的用户,看看能不能再次删除这个文件[yufei@yufei tmp]$ su opsersPassword:[opsers@yufei tmp]$ rm -f testdir/yufei_filerm: cannot remove `testdir/yufei_file': Operation not permitted看到提示,说权限不够了,只能由这个文件的创建者或root用户才能删除。这个我们就不演示了。如果要还原权限的话,[opsers@yufei tmp]$ su rootPassword:[root@yufei tmp]# chmod o-t testdir[root@yufei tmp]# ls -ld testdir/drwxr-xrwx. 2 root root 4096 Jan 21 11:51 testdir/两个需要注意的问题OK,关于SUID/SGID/SBIT这些特殊权限的应用和作用我们已经讲完了。但如果你仔细一点的话,会发现,我并没有用数字方式来更改这个特殊的权限,为什么呢?且看下面的分析。问题1:用数字改变目录的特殊权限,不起作用。我们把/tmp/下面,我们自己建立的实验文件删除[root@yufei tmp]# rm -fr testdir/[root@yufei tmp]# rm -fr passwd 然后再重新创建一个文件和目录,[root@yufei tmp]# cp /usr/bin/passwd ./[root@yufei tmp]# mkdir testdir[root@yufei tmp]# ls -l passwd ;ls -ld testdir/-rwxr-xr-x 1 root root 26968 Jan 21 12:00 passwddrwxr-xr-x 2 root root 4096 Jan 21 12:00 testdir/下面我们就来用数字方式来更改这三个特殊的权限,看看会有什么样的结果[root@yufei tmp]# chmod 4755 passwd[root@yufei tmp]# chmod 3755 testdir/[root@yufei tmp]# ls -l passwd ;ls -ld testdir/-rwsr-xr-x 1 root root 26968 Jan 21 12:00 passwddrwxr-sr-x 2 root root 4096 Jan 21 12:00 testdir/发现用这种方式增加这三个特殊权限没有问题,那么我们再把权限改回去看看[root@yufei tmp]# chmod 0755 passwd[root@yufei tmp]# chmod 0755 testdir/[root@yufei tmp]# ls -l passwd ;ls -ld testdir/-rwxr-xr-x 1 root root 26968 Jan 21 12:00 passwddrwxr-sr-x 2 root root 4096 Jan 21 12:00 testdir/我们发现,对文件,权限是改回去了,而对于目录,只改回去了SBIT的权限,对SUID和SGID改不回去。这是RHEL6上的实验结果,可能是出于安全性的考虑吗?这个我就不清楚了,也找不到相关的资料。如果各位网友,有知道什么原因的,欢迎与我联系。在此先谢过了。所以说,建议大家还是用最明了的方式,直接用+-来更改,无论方法如何,最终能得到结果就OK了。哈哈……问题2:为什么会有大写的S和T。还是用上面的文件和目录[root@yufei tmp]# ls -l passwd ;ls -ld testdir/-rwxr-xr-x 1 root root 26968 Jan 21 12:00 passwddrwxr-sr-x 2 root root 4096 Jan 21 12:00 testdir/我们把passwd和testdir的x权限去掉[root@yufei tmp]# chmod u-x passwd[root@yufei tmp]# chmod o-x testdir/[root@yufei tmp]# ls -l passwd ;ls -ld testdir/-rw-r-xr-x 1 root root 26968 Jan 21 12:00 passwddrwxr-sr-- 2 root root 4096 Jan 21 12:00 testdir/再给他们加上SUID和SBIT权限[root@yufei tmp]# chmod u+s passwd[root@yufei tmp]# chmod o+t testdir/[root@yufei tmp]# ls -l passwd ;ls -ld testdir/-rwSr-xr-x 1 root root 26968 Jan 21 12:00 passwddrwxr-sr-T 2 root root 4096 Jan 21 12:00 testdir/我们看到,这时候的小s和小t已经变成了大S和大T了,为什么呢?因为他们这个位置没有了x权限,如果没有了x权限,根据我们上面讲的内容,其实,这个特殊的权限就相当于一个空的权限,没有意义。也就是说,如果你看到特殊权限位置上变成了大写的了,那么,就说明,这里有问题,需要排除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值