Linux中的setuid和setgid

1、什么是SetUID

     我们知道,在linux的命令行下执行“ps”命令时,就会列出当前系统中的所有进程,在其中可以看到每个进程都和用户的真实id关联,实际上,Linux中的每个进程还跟一个称为有效用户id(set User id)紧密关联。前者用于表示该进程由那个用户控制,后者用于为新建立的文件分配所有权,检查文件访问许可等操作,同时有效用户为该文件的所有者。linux系统内核允许一个进程以调用一个SetUID程序(或显示执行SetUID系统调用)的方式,来改变其自身的有效用户id。


2、如何配置SetUID权限

     在linux中,不管是Root用户还是普通用户,都可以使用“Password”命令来更改自身的密码。但是,Linux中的密码通常是保存在“/etc/paswd”和“/etc/shadow”文件中,这两个文件对系统安全至关重要,因此只有Root用户才能对其执行读写操作。以管理员的身份登陆系统,在Linxu提示符下执行“ls /etc/passwd /etc/shadow”命令,在返回信息中可以看到普通用户对上述这两个文件并没有写权限,因此从文件属性的角度看,普通用户在更改自身密码时,是无法将密码信息写入到上述文件中的,哪么用户是怎样成功的更改密码的呢?实际上,问题的关键不在于密码文件本身,而在于密码更改命令“passwd”。在提示符下执行命令“ls /usr/bin/passwd”,在返回信息中的文件所有者执行权限位上显示“S”字样,表示“passwd”命令具有SetUID权限,其所有者为Root,这样普通用户在执行“passwd”命令时,实际上以有效用户root的身份来执行的,并具有了相应的权限,从而将新的密码写入到“/etc/passwd”和“/etc/shadow”文件中,当命令执行完毕,该用户的身份立即消失。如何设置SetUID权限呢?使用“chmod”命令即可为指定文件设置SetUID权限,例如“chmod 4xxx   filename”命令,取消SetUID权限的命令为“chmod xxx   filename”。类似的,执行“chmod 2xxx filename”命令可以设置SetUID权限,使用“chmod xxx filename”命令即可取消SetGID权限,如果执行“chmod 6xxx filename”命令,即可同时为指定文件设置SetUID和SetGID,执行命令“chmod 0xxx filename”,即可同时取消指定文件的SetUID和SetGID权限。例如以Root用户登陆系统,执行“chmod 0511 /usr/bin/passwd”命令,就可以取消“passwd”命令的SetUID权限,这样普通用户就无法修改自己的密码了。


3、SetUID权限的安全性

     使用SetUID可以灵活的调整所有文件所有者权限,但是也为系统的安全性带来了隐患。如果Root用户为指定的程序文件配置过大的SetUID权限,那么就会为黑客或者非法用户打开了侵入系统的大门。例如在Linux中可以使用“vi”命令来编辑文件,但是,对于普通用户而言,当其试图使用命令“vi /etc/shadow”来修改密码文件时,系统就会弹出“/etc/shadow : Permission Denied”的警告提示,从而禁止其对密码文件的非法修改。但是,如果在Root用户环境中执行“which vi”命令,就可以看到“vi”命令实际上是“vim”命令的别名,其真实路径为“/usr/bin/vim”,这样执行命令"chmod 6755 /usr/bin/vim",就可以将“vi”命令的所有者更改为Root,这样在普通的用户环境中,就可以使用“vi”命令来编辑任何文件(例如“/etc/shadow”),这样,即使是普通用户也可以将密码文件清空,从而实现无密码登陆Linux,给系统的安全带来的威胁不言而喻。因此,对可能给系统安全带来危害的程序来说,应该尽量不要随意为其配置SetUID权限。


4、如何禁用SetUID权限

      对于存放在敏感数据的分区而言,有时可能希望禁用SetUID权限设置功能。例如对"/home" 分区禁用SetUID权限,可以找到修改其配置文件“/etc/fstab”, 执行命令“vi /rtc/fstab”,可以看到“LABEL=/home /home ext3 defaults 1 2”等数据,我们只需在上述“default”关键字的后面添加“nosuid” 关键字即可,例如使用“vi”命令将其修改为“LANBEL=/home /home ext3 default , nosuid 1 2”,之后执行命令“mountoremount /home”,这样即使对“/home”分区上的任何可执行文件配置了SetUID权限,也是无效的。这样就在很大程度上保护了系统的安全。


文章出处:http://hi.baidu.com/jbmibzpdmobckmd/item/f2910293df9222b983d295be


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: setuidsetgidLinux文件/目录的权限设置,用于控制文件/目录的访问权限。 setuid是指当一个文件被执行时,该文件的所有者权限将被提升为执行者的权限,即使执行者的权限低于文件所有者的权限。这样可以使得一些需要高权限才能执行的程序在低权限用户下也能够执行。 setgid是指当一个目录被创建时,该目录的所有者权限将被设置为创建者的组权限,即使创建者的权限低于目录所有者的权限。这样可以使得在该目录下创建的文件都属于同一组,方便组内成员共享文件。 总之,setuidsetgidLinux系统非常重要的权限设置,可以提高系统的安全性和灵活性。 ### 回答2: 在Linux系统,每一个文件和目录都有其所属的用户和用户组。setuidsetgid是可以应用于文件和目录的特殊权限,它们可以极大地影响一个文件或目录的访问权限和执行权限。 首先,setuid权限使得在执行文件时,运行该执行文件的进程会暂时拥有该文件所有者的权限,即使是普通用户也可以执行一些仅有管理用户才能运行的程序,如passwd命令等。这样做可以让普通用户执行一些操作,提高了系统的可维护性和可操作性。 其次,setgid权限则允许指定一个文件或目录的用户组,从而提供更精细的权限控制。在设置了setgid权限的目录里的新文件和目录,其所属用户组会被自动设置为目录的用户组,从而实现了成员共享文件的精细控制。同时,如果一个具有setgid权限的可执行文件被运行,那么它会以其所属的用户组的身份运行,在这个用户组里所具有的权限也会拥有。 实际上,在不恰当的使用setuidsetgid权限时,也可能会带来系统的风险和不安全性。因此,在设置文件和目录的权限时,我们需要慎重考虑应用setuidsetgid权限的必要性,尽量减少不必要的风险。对于一些敏感的系统操作或者权限限制较大的文件和目录,我们也要加强对其权限的管理和控制,从而最大限度地保证系统安全和运行稳定。 ### 回答3: 在Linux文件系统,每个文件/目录都有一个所有者和一个所属组,由于这个特性,一些特殊权限被引入,其包括setuidsetgidsetuidsetgidLinux文件系统的一个非常重要的安全特性,可以在执行该文件时,临时将当前用户的权限更改为文件所有者或文件所属组的权限,从而使得用户可以利用文件所有者或文件所属组的权限来执行一些对于当前用户本身需要特殊授权的操作,而无需为此特别授权。 setuidsetgid分别是set user ID 和set group ID的缩写。当文件所有者或文件所属组有一个特殊权限被设置为“s”时,就表示这个文件有setuidsetgid权限。具体来说,setuid使得一个文件在执行时将有效用户ID更改为文件所有者的ID,setgid则将有效组ID更改为文件所属组的ID。 对于一个拥有setuid权限的可执行文件,当一个普通用户执行它时,其所拥有的权限就可以被限制在执行该文件的组或者用户的权限内,从而保证了系统对文件的操作安全性。在实际效果setuidsetgid的应用范围很广,可以应用于各种场合,比如sudo程序、passwd等。 总而言之,setuidsetgidLinux文件系统的一种特殊权限,可以为普通用户提供执行高特权操作的托管服务,从而提高系统的安全性和可用性。同时,根据需要设置setuidsetgid的权限具有升级或降级普通用户权限的功能,对于Linux服务器的管理和运维也有很大的帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值