2.18 特殊权限set_uid
2.19 特殊权限set_gid
2.20 特殊权限stick_bit
2.21 软链接文件
2.22 硬连接文件
2.18 特殊权限set_uid
#which passwd
/usr/bin/passwd
# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd
-rws中的s是 set_uid的权限
passwd 支持让普通用户更改自己密码
改密码需要通过修改密码的文件/etc/shadow
/etc/shadow的权限是----------
*root是超级权限,可以更改任何权限,即
使文件是-------权限,也是如此。
*想让普通用户更改密码,又不想让普通用户更改密码文件,set_suid可以实现。
如果执行了set_uid,无论是所有者、所属组或其他用户,都会被临时赋予所有者的权限
*set_uid 的作用是保证普通用户临时拥有所有者身份的命令。
如果给文件设定set_uid文件的前提条件是,这个文件必须是二进制可执行文件。
给ls加set_uid权限
打开新的xhsell ssh连接,切换到其他用户登录,
$su -aming
$ls /root
权限不够
切换回最初原本的Xshell连接
#chmod u+s /usr/bin/ls
#ls -l /usr/bin/ls
-rwsr-xr-x. /usr/bin/ls
标红代表ls set_uid赋予成功。
切换其他用户窗口,
$ls -ld /root/
dr-xr-x--- 发现other user还是没有s权限,此处是因为otheruser只是被临时赋予权限,并不是永久,所以可以临时执行root的ls命令权限。
去掉s权限
#chmod u-s /usr/bin/ls
尝试利用#chmod u=rws /usr/bin/ls来修改权限,
#chmod u=rws /usr/bin/ls
#ls -l /usr/bin/ls
-rwSr-xr-x. /usr/bin/ls
之所以变成S,是因为缺少x权限,此时加上x权限即可,如下
#chmod u+x /usr/bin/ls
#ls -l /usr/bin/ls
-rwsr-xr-x. /usr/bin/ls
2.19 特殊权限set_gid
set_gid和set_uid区别的地方就是,set_gid是对所属组(g)权限修改,而set_uid是所有者(u)权限修改。
此处先还原u的权限,修改为rwx
#chmod u=rwx
#chmod g+s /usr/bin/ls
#ls -l /usr/bin/ls
-rwxr-sr-x. root root /usr/bin/ls
set_uid 跟set_gid文件功能都相似,只不过是换了角色而已。set_uid的角色是所有者,而set_gid的角色是所属组。
set_gid 可以用在目录上。
为234/创建gid权限
#chmod g+s 234
#ls -ld 234
drwxrwsr-x root root /234/目录
目录颜色没变, 不过g的x变成了s.
#chown :user1 234 所属组设为user1,(所有者root)
#ls -ld 234
drwxrwsr-x. root user1 234/
创建的目录的子文件所属组也是user1
#touch 234/aminglinux
#ls -l 234/
-rw-rw-r-- root user1 aminglinux
创建子目录am,结果所属组也是user1
#mkdir 234/am
ls -l 234/
drwxrwsr-- root user1 am/
-rw-rw-r-- root user1 aminglinux
g-s,创建文件,结果发现,取消s之后,所属组变回root.
#chmod g-s 234
#touch 234/aminglinux111
#!ls
drwxrwsr-- root user1 am
-rw-rw-r-- root user1 aminglinux
-rw-rw-r-- root root aminglinux111
*总结:
当作用在文件上,跟set_uid作用是类似的,让普通用户执行文件并使用set_gid的时候,临时拥有所属组的身份权限。当给一个目录设置set_gid,在这目录创建子目录和子文件的时候,这两者的所属组会跟着当前父级目录保持一致。
2.20 特殊权限stick_bit
stick bit权限,/tmp用得比较多。
drwxrwxrwt.中rwt.的t就是stick_bit,防删除位
#ls -ld /tmp/
drwxrwxrwt. /tmp/
stick_bit
可以理解为防删除位。文件是否可以被某用户删除,主要取决于该文件所在的目录是否对该用户具有写权限。如果没有写权限,则这个目录下所有的文件都不能删除,同时也不能添加新的文件。如果希望用户能够添加文件,但不能删除该目录下其他用户的文件,则可以对父目录增加该权限。设置该权限后,就算用户对目录具有写权限,也不能删除其他用户的文件。
test
新窗口切换到aming用户,
$cd /tmp/
$touch aming
$ls -l
-rw-rw-r-- aming aming aming
所有者,所属组都是aming
$ vi aming 随便写入数据,保存退出wq
$chmod 777 aming
$ls -l aming
-rwxrwxrwx. aming aming aming
$su - user1
1号窗口(2号窗口其他用户作用)切换到user1下
#su - user1
$cd /tmp/
$ls
aming
$vi aming 可以修改,wq。
$rm -f aming 尝试删除 ,提示报错。
此处证明user1不能删除aming创建的文件。
只有root和aming删除
test2
$mkdir user1
$chmod 777 user1
$ls -l
drwxrwxrwx user1 user1 user1
切换至aming用户,
$cd user1
$ls
$touch 1.txt
$mkdir 234
$ls -l
$cd user1
$ ls -l 文件和目录都没有w权限
-rw-rw-r-- aming aming 1.txt
drwxrwxr-x aming aming 234
测试能否删除,文件和目录均可删除。
*疑问:为什么普通用户没有w权限,都可以删除目录和文件。
因为 所删除的东西的父目录 /user1 写了w权限,而不是看删除文件和目录本身的权限。
总结:
stick bit的作用就是防止别的用户删除自己的文件(除了root)。
2.21 软链接文件
软链接类似于windows的快捷方式,
例如 /bin是一个软链接文件
#ls -l /bin
lrwxrwxrwx. root root /bin ->usr/bin
ls命令位于/bin/ls,
所以平时使用的ls命令,相当于使用/usr/bin/ls
举此例子为软链接格式,
/bin/ls --> /usr/bin/ls .
路径长度影响软链接文件大小
lib64/ 软链接集合
绝对路径用法
#ln -s 源文件路径 目的文件路径
相对路径用法
#ln -s yum.log aming.log
*这样做的弊端是:源的文件名称和路径发生改变的话,直接影响文件打开的效果。
用处
磁盘快满的时候,该磁盘某文件还在写入数据,导致容量越来越膨胀的时候,应该怎么做?
/boot/aming.log 不停大量写入数据进去/boot 此时/boot即将膨胀爆满,
此时应该这样做,
#cp /boot/aming.log /aming.log
#rm /boot/aming.log
同时,迅速
#ln -s /aming.log /boot/aming.log.
这样,服务还是会写入/boot/aming.log
因为写入是通过路径寻找文件。
2.22 硬链接文件
*硬链接核心的地方,就是两个文件使用了同一个inode。(同一indoe只占用一份空间)
硬连接不支持目录,不支持跨分区,只支持文件。
硬链接用法 ln 源 定义名称
#ln 1.txt 1_heard.txt
再做个软链接
#ln -s 1.txt 1_sorft.txt
#ls -l
-rw-rw-r--. 2 1_heart.txt
lrwxrwxrwx. 1 1_sorft.txt-> 1.txt
-rw-rw-r-- 2 1.txt
#ls -i
.....395 1.txt
.....395 1_heard.txt
.....394 1_sorft.txt
删除源1.txt查看属性
#rm -f 1.txt
#ls -l
-rw-rw-r-- 1 1_heard.txt
lrwxrwxrwx 1 1_sorft.txt>空 闪红
此时发现,源文件不在,硬链接还在,inode号从2变成1。软链接报错,指向路径失败。
原文地址:http://blog.51cto.com/13578154/2067885