设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

玩Linux五年积累的技巧(1) -- 文件的属性

2013-3-26 14:18| 发布者: 红黑魂| 查看: 932| 评论: 0|原作者: gaopenghigh|来自: CSDN博客

摘要: 本文主要介绍了文件的隐藏属性和特殊权限,一个让脚本具有类似SUID位的技巧,还有一个解决mp3文件乱码的方法。作者 JH Gaogaopenghigh@gmail.com从最开始接触Linux到现在已经有5年了,和所有人一样,少不了折腾。折 ...
本文主要介绍了文件的隐藏属性和特殊权限,一个让脚本具有类似SUID位的技巧,还有一个解决mp3文件乱码的方法。
作者 JH Gao<gaopenghigh@gmail.com> 
从最开始接触Linux到现在已经有5年了,和所有人一样,少不了折腾。折腾后偶尔我会把方法记录下来,现在简单总结一下。
所以的命令功能通过man都能找到具体用法,我只把自己觉得常用的列举出来。
 

1. 文件的隐藏属性


lsattr : 列出文件的隐藏属性

chattr : 修改文件的隐藏属性

  1. [root@www ~]# chattr [+-=][ASacdistu] FileName   
  2. + : Add one attribute  
  3. - : Remove one attribute   
  4. = : Set to be the only attributes that the files have  
  5. 重要选项  
  6. "a":只能追加文件的内容,但不能修改或删除内容  
  7. "i":文件不能被删除、改名、不能创建指向它的链接,不能向文件写内容  

2. 文件的特殊权限 SUID/SGID/Sticky Bit


如果对一个可执行文件设置了SUID或者SGID位,则文件执行时,将会拥有文件所有者(设置了SUID)或者所在组(设置了SGID)的权限。

例子:普通用户不能开启httpd服务,因为httpd服务需要用到80端口,而1024以下的端口只有root用户才能使用。如果我们把httpd可执行文件的所有者设置为root,同时设置SUID位,则普通用户也可以开启httpd服务了。
对一个目录设置了Sticky位,则只有文件的所有者能删除这个文件。在Linux系统中,/tmp目录默认设置了这个位:
  1. drwxrwxrwt 12 root root 16384 Mar 6 09:04 tmp/  

主要使用方法如下:

  1. SUID  
  2. 对于文件:以文件所有者的权限运行  
  3. 对于目录:不能对目录设置SUID  
  4. 设置SUID:  
  5. chmod u+s FILE chmod 4755 FILE  
  6.   
  7. SGID  
  8. 对于文件:以文件所属组的权限运行  
  9. 对于目录:目录里面的文件会继承目录的属性  
  10. 设置SGID:  
  11. chmod g+s FILE/DIR chmod 2771 FILE/DIR  
  12.   
  13. Sticky  
  14. 对于文件:不能对文件设置Sticky位  
  15. 对于目录:对于该目录下的文件,只有它们的所有者才能删除它们。  
  16. 设置Sticky:  
  17. chmod o+t DIR chmod 1777 DIR  
  18.   
  19. 用字母设置特殊权限:  
  20. u+s g+s o+t  
  21. 用数字表示特殊权限,则是:  
  22. 4 for SUID  
  23. 2 for SGID  
  24. 1 for Sticky  

需要注意的是,shell、python、perl等脚本文件不能设置SUID位,因为它们事实上是由bash、python、perl解释器解释运行的。要让脚本文件也有类似于SUID这样的功能,需要做一点小花招。

简单地说,我们需要一层壳,这层壳可以设置SUID/SGID位,壳里面真正工作的还是脚本。
比如说我们有一个脚本/home/jh/bin/myscript.sh,所有者是普通用户,但脚本里面的操作需要root权限,现在我们用C语言来写这层壳,名称叫做transeuid.c:
  1. /* author: JH Gao <gaopenghigh@gmail.com> 
  2. # Create Date: 2012-06-05 
  3. # Function: transmit euid and egid to other scripts 
  4. #   since shell/python/... scripts can't get suid permission in Linux 
  5. # ******************************************************************** */  
  6.   
  7. #include <stdio.h>  
  8. #include <stdlib.h>  
  9. #include <unistd.h>  
  10. #define BUFFSIZE 1024  
  11.   
  12. /* 
  13.  * usually euid is the uid who run the program 
  14.  * but when stick is setted to the program 
  15.  * euid is the uid or the program's owner 
  16.  */  
  17. int main(int argc, char *argv[]) {  
  18.     char *cmd = "/home/jh/bin/myscript.sh";  
  19.     char *pars[] = {"/home/jh/bin/myscript.sh""par1""par2"};  
  20.     // set uid and gid to euid and egid  
  21.     setuid(geteuid());  
  22.     setgid(getegid());  
  23.     if (execvp(cmd, pars)) {  
  24.         printf("error");  
  25.         free(cmd);  
  26.         exit(1);  
  27.     }  
  28.     free(cmd);  
  29. }  

编译这个程序,在给这个程序设置希望取得的用户,再设置suid,然后就可以用这个用户的权限执行脚本或命令了: 

  1. $ gcc -t transeuid transeuid.c   
  2. $ sudo chown root transeuid   
  3. $ sudo chmod +s transeuid   
  4. $ ./transeuid  
  5. ......DO SOMETHING  

当然具体要执行的脚本和参数可以从外部获取,具体看我以前写的:《传递euid和egid给脚本,使脚本具有特殊用户的权限》

但是需要注意的是,这种花招有很大的安全隐患


3. 最后Linux中解决mp3文件乱码的命令是:


  1. <span style="font-family: Arial, Helvetica, sans-serif;">find . iname "*.mp3" -execdir mid3iconv -e gbk --remove-v1 {} \;</span>  

酷毙
1

雷人

鲜花
1

鸡蛋
1

漂亮

刚表态过的朋友 (3 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部