`
gaopenghigh
  • 浏览: 245753 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多
本文主要介绍了文件的隐藏属性和特殊权限,一个让脚本具有类似SUID位的技巧,还有一个解决mp3文件乱码的方法。

作者 JH Gao<gaopenghigh@gmail.com>

从最开始接触Linux到现在已经有5年了,和所有人一样,少不了折腾。折腾后偶尔我会把方法记录下来,现在简单总结一下。
所以的命令功能通过man都能找到具体用法,我只把自己觉得常用的列举出来。


1. 文件的隐藏属性
lsattr : 列出文件的隐藏属性
chattr : 修改文件的隐藏属性
使用方法:
chattr [+-=][ASacdistu] FileName 
+ : Add one attribute
- : Remove one attribute
= : Set to be the only attributes that the files have
重要选项:
"a":只能追加文件的内容,但不能修改或删除内容
"i":文件不能被删除、改名、不能创建指向它的链接,不能向文件写内容


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


主要使用方法如下:
SUID
对于文件:以文件所有者的权限运行
对于目录:不能对目录设置SUID
设置SUID:
chmod u+s FILE chmod 4755 FILE


SGID
对于文件:以文件所属组的权限运行
对于目录:目录里面的文件会继承目录的属性
设置SGID:
chmod g+s FILE/DIR chmod 2771 FILE/DIR


Sticky
对于文件:不能对文件设置Sticky位
对于目录:对于该目录下的文件,只有它们的所有者才能删除它们。
设置Sticky:
chmod o+t DIR chmod 1777 DIR


用字母设置特殊权限:
u+s g+s o+t

用数字表示特殊权限,则是:
4 for SUID
2 for SGID
1 for Sticky


需要注意的是,shell、python、perl等脚本文件不能设置SUID位,因为它们事实上是由bash、python、perl解释器解释运行的。要让脚本文件也有类似于SUID这样的功能,需要做一点小花招。
简单地说,我们需要一层壳,这层壳可以设置SUID/SGID位,壳里面真正工作的还是脚本。
比如说我们有一个脚本/home/jh/bin/myscript.sh,所有者是普通用户,但脚本里面的操作需要root权限,现在我们用C语言来写这层壳,名称叫做transeuid.c:

/* author: JH Gao <gaopenghigh@gmail.com>
# Create Date: 2012-06-05
# Function: transmit euid and egid to other scripts
#   since shell/python/... scripts can't get suid permission in Linux
# ******************************************************************** */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define BUFFSIZE 1024

/*
 * usually euid is the uid who run the program
 * but when stick is setted to the program
 * euid is the uid or the program's owner
 */
int main(int argc, char *argv[]) {
    char *cmd = "/home/jh/bin/myscript.sh";
    char *pars[] = {"/home/jh/bin/myscript.sh", "par1", "par2"};
    // set uid and gid to euid and egid
    setuid(geteuid());
    setgid(getegid());
    if (execvp(cmd, pars)) {
        printf("error");
        free(cmd);
        exit(1);
    }
    free(cmd);
}



编译这个程序,在给这个程序设置希望取得的用户,再设置suid,然后就可以用这个用户的权限执行脚本或命令了:
$ gcc -t transeuid transeuid.c 
$ sudo chown root transeuid 
$ sudo chmod +s transeuid 
$ ./transeuid 
......DO SOMETHING


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

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

3. 最后Linux中解决mp3文件乱码的命令是:
find . iname "*.mp3" -execdir mid3iconv -e gbk --remove-v1 {} \;
12
0
分享到:
评论

相关推荐

    玩Linux五年积累的技巧

    玩Linux五年积累的技巧

    libsigar-amd64-linux.so libsigar-x86-linux.so

    标题中的“libsigar-amd64-linux.so”和“libsigar-x86-linux.so”是两个重要的库文件,它们属于Sigar(System Information Gatherer and Reporter)库,一个跨平台的系统性能监控工具。在Java应用程序中,这些动态...

    linux的学习技巧--UbuntuSkills

    linux技巧----linux的学习技巧--UbuntuSkills

    qt-embedded-linux-opensource-src-4.5.3.tar.gz 移植

    1. **ARM-Linux-GCC**:这是一个交叉编译器,用于编译目标平台为 ARM 架构的代码。文中提到的版本为 4.0.1。 2. **Qt X11**:这是用于桌面系统的 Qt 版本,文中使用的版本是 `qt-x11-opensource-src-4.5.1.tar.gz`。...

    linux文件属性和更改文件权限详解

    1.文件属性 1.1 ls命令 1.2 linux文件系统介绍 2.更改目录/文件权限 2.1 用户和用户组的相关指令 2.2 chgrp命令 2.3 chown命令 2.4 chmod命令 2.5 umask命令  1.文件属性 1.1 ls命令 ls命令是我们最常用的命令之一,...

    qt-creator-linux-x86-opensource-1.3.0.bin

    qt-creator-linux-x86-opensource-1.3.0

    arm-linux-gcc-4.5.1-v6-vfp-20101103

    标题“arm-linux-gcc-4.5.1-v6-vfp-20101103”指的是一款特定版本的ARM交叉编译工具链,由友善之臂公司提供。这个工具链主要用于将源代码编译为适用于ARM架构处理器,特别是ARM11内核的二进制代码。日期“20101103”...

    Makefile文件arm-none-linux-gnueabi-gcc编译文件

    Makefile文件arm-none-linux-gnueabi-gcc编译文件,linux下多个.C文件统一使用make文件进行编译

    kali-linux-2019.4-vmware-amd64.zip.torrent

    kali-linux最新版vmware-X64镜像迅雷下载种子文件,用户名:root密码:toor kali-linux最新版vmware-X64镜像迅雷下载种子文件,用户名:root密码:toor kali-linux最新版vmware-X64镜像迅雷下载种子文件,用户名:...

    libsigar-amd64-linux.so和libsigar-x86-linux.so

    《Linux系统监控利器:libsigar库的amd64与x86版本》 在Linux系统管理和运维领域,有效的监控工具至关重要。libsigar(System Information Gatherer and Reporter)是这样一款库,它提供了一种统一的方式来获取各种...

    linux文件基本属性

    ### Linux 文件基本属性详解 #### 一、引言 Linux作为一种多用户操作系统,其核心设计理念之一就是通过严格的权限控制机制确保系统的安全性和稳定性。不同用户根据其地位和角色被赋予不同程度的权限,以确保敏感...

    Linux高级技巧集

    Linux高级技巧集,Linux 教程 -------------------------------------------------------------------------------- File Name 第一课 什么是Linux 第二课 为什么使用Linux 第三课 Linux纵览 第四课 ...

    Linux服务器日志文件查找技巧精粹-电脑资料.doc

    Linux服务器日志文件查找技巧精粹 Linux服务器日志文件查找技巧精粹是指在Linux服务器中查找和分析日志文件的技术和策略。日志文件是服务器中记录事件和活动的文件,对于服务器的安全和性能监控非常重要。以下是...

    最新版linux jdk-8u261-linux-x64.tar.gz

    【标题】"最新版Linux JDK 8u261 Linux-x64.tar.gz"是一款针对64位Linux操作系统的Java Development Kit(JDK)的更新版本。这个软件包以`.tar.gz`格式提供,这是一种在Linux和Unix系统中常见的归档和压缩方式,通过...

    linux jdk-6u27-linux-i586.bin

    linux jdk-6u27-linux-i586.bin

    Linux内核源代码导读-陈香兰-ext2文件系统

    Linux内核源代码导读-陈香兰-中国科学技术大学-ext2文件系统

    linux-smb-文件权限配置-超详细

    linux-smb-文件权限配置-超详细

    最新版linux jdk-8u241-linux-x64.tar.gz 64位

    1. **下载文件**:通过wget命令或者浏览器下载`jdk-8u241-linux-x64.tar.gz`到你的Linux系统。 2. **切换到目标目录**:通常,开发者会在`/opt`或`/usr/local`目录下创建一个名为`java`的文件夹,然后切换到该目录...

    util-linux-ng-2.17源码(含fdisk)

    util-linux-ng-2.17源码(含fdisk) Here is a list of all documented files with brief descriptions: util-linux-ng-2.17.2/disk-utils/blockdev.c [code] util-linux-ng-2.17.2/disk-utils/cramfs.h [code] ...

    arm-linux-gcc-4.3.2-2.tgz

    由于上传文件大小限制,将工具链分为2个压缩文件,arm-linux-gcc-4.3.2-1.tgz和arm-linux-gcc-4.3.2-2.tgz 请务必下载完整,分别进行安装。 安装方法: 1.ubuntu 终端输入 tar -zxvf arm-linux-gcc-4.3.2-1.tgz -C ...

Global site tag (gtag.js) - Google Analytics