Liunx 实现类似与对文件夹上锁限制的几种方法。

Liunx 实现类似与对文件夹上锁限制的几种方法。

简介:

最近突然有个想法,要对某个文件夹进行权限设置(类似于上锁的功能)限制部分人员对文件的修改权限。只有获取正确的密码,或者方式才可以对改文件夹下的数据进行增删改查操作等等。

1.利用encfs创建和管理加密文件夹

如果你想使你计算机上的某些信息免于被窥视的话,可以看看这篇文字。保护信息的一种方法就是加密你的home目录,但是一旦你登录系统后,你的home目录下的信息将暴露于外。encfs允许你创建一个加密的文件夹,然后通过FUSE来挂载作为用户文件系统。在这篇教程里,我会教你怎么在Linux系统上的命令行下面使用encfs工具来创建和管理一个加密的文件夹。

安装:(Ubuntu为例)

sudo apt-get install encfs 

用encfs创建加密文件夹:

一旦在系统中安装好了encfs后,你就能在你的home目录下创建一个加密的文件夹。在这个示例当中,我将会创建一个叫做tuxtweaks的加密文件夹,这通过终端窗口就可以完成。当创建一个新的文件夹的时候,你需要指定全路径名,当然也可以使用如下所示的标准快捷方式。

encfs ~/.tuxtweaks ~/tuxtweaks 

这会创建两个文件夹。第一个.tuxtweaks,它包含被加密的信息;第二个tuxtweaks,当你想要访问信息的时候,解密的版本信息将会挂载到下面。如果这些文件夹都不存在,系统将会提示询问是否创建它们。在提示下面键入‘y’以允许创建文件夹,然后你应该能看到如下所示的一些信息:

> encfs ~/.tuxtweaks ~/tuxtweaks 
目录"/home/westwell/.tuxtweaks/" 不存在。要创建吗?(y,N) y
目录"/home/westwell/tuxtweaks/" 不存在。要创建吗?(y,N) y
创建新的加密卷。
请选择下面的其中一项:
 输入"x"进入专家配置模式,
 输入"p"进入预设置的极端模式,
 其它或空行,进入标准模式。
?>    
如果你想要最高级别的加密文件夹的话,在提示符下输入p选项。否则只需敲击[Enter]键,就会以标准选项来创建新的加密文件夹。 
之后,你将会看到新加密卷的参数列表及一些警告信息,随之提示符会让输入一个密码。确保不要忘记使用的密码,因为没有密码找回机制。在输入密码并以第二次输入校验通过后,新的文件夹会被创建成功,并自动挂载进文件系统,可以开始使用了。

使用加密文件

一旦新加密文件夹被挂载上,它就跟你系统上的其它文件夹一样的使用,但如果你把它设置为paranoia模式的话,使用它的硬链接会出现不可用的异常。我想,这对大多数用户来说并不是问题。让我们继续吧,在新文件夹里创建一个简单的文本文件,然后用它来做测试。

echo "GNU/Linux is my favorite computer operating system." >~/tuxtweaks/test.txt 

在终端下或在文件系统管理器下,你都能看到在tuxtweaks目录里已经有一个叫做test.txt的新文件。打开此文件可看到这里一个完全可读的文本文件。现在切换到**~/.tuxtweaks**目录下,这是你文件夹的加密版本,可以看到这里的文件名不一样了,如里你查看此文件的内容话,会发现是乱糟糟的。

卸载encfs创建的加密文件夹

一旦你完成文件访问或者数据创建等操作,最好把加密文件夹卸载,以便里面的信息安全的隐藏掉。encfs自身不带有卸载的命令,一旦用它创建了用户文件系统,就可以利用FUSE来处理卸载任务。下面我们会使用fusermount命令来卸载我们的加密文件夹。

fusermount -u ~/tuxtweaks 

切换到home目录下,会看到tuxtweaks目录仍然存在,但进入文件夹,你会发现里面是空的。(译注:因为tuxtweaks目录只是一个挂载点,真实的数据是以加密的方式存储在.tuxtweaks目录下的,)

挂载用encfs创建的加密文件夹

下一次你想要访问加密数据的话,你需要重新加载并解密它,仅仅只需要使用跟我们在第一步创建此文件夹相同的命令就可以。

encfs ~/.tuxtweaks ~/tuxtweaks 

我发现使用encfs加密文件夹来安全地存储财务信息非常便捷,比如纳税申报表以及用于存储日志列表凭据。这样我只需要记住我加密文件夹的密码,然后就可以进入访问记录有其他登录ID和密码的名单文件。

2.利用gzexe加密

这种加密方式不是非常保险的方法,但是能够满足一般的加密用途,可以隐蔽脚本中的密码等信息。它是使用系统自带的gzexe程序,它不但加密,同时压缩文件。示例如下:

> echo "this is test string" > test.txt
> cat test.txt
this is test string
>  ls test.txt 
test.txt
> gzexe test.txt
test.txt:	  0.0%
> ls 
test.txt test.txt~        # gzexe方法会把原来没有加密的文件test.txt备份为test.txt~ ,同时test.txt文件变成了加密文件(即变成了密文)
> cat test.txt
#!/bin/sh
skip=49
tab='	'
nl='
'
IFS=" $tab$nl"
umask=`umask`
umask 77
gztmpdir=
trap 'res=$?
  test -n "$gztmpdir" && rm -fr "$gztmpdir"
  (exit $res); exit $res
' 0 1 2 3 5 10 13 15
case $TMPDIR in
  / | /*/) ;;
  /*) TMPDIR=$TMPDIR/;;
  *) TMPDIR=/tmp/;;
esac
if type mktemp >/dev/null 2>&1; then
  gztmpdir=`mktemp -d "${TMPDIR}gztmpXXXXXXXXX"`
else
  gztmpdir=${TMPDIR}gztmp$$; mkdir $gztmpdir
fi || { (exit 127); exit 127; }
gztmp=$gztmpdir/$0
.......
> cat test.txt~
this is test string                 #通常使用gzexe加密后,会将备份文件(这里指test.txt~)删除   
> ls 
test.txt test.txt~
> rm -f test.txt~ 
> ls 
test.txt
> gzexe --help                      #查看gzexe的一些参数
Usage: /usr/bin/gzexe [OPTION] FILE...
Replace each executable FILE with a compressed version of itself.
Make a backup FILE~ of the old version of FILE.

  -d             Decompress each FILE instead of compressing it.
      --help     display this help and exit
      --version  output version information and exit

Report bugs to <bug-gzip@gnu.org>.   
> gzexe -d test.txt 
> ls 
test.txt test.txt~ 
> cat test.txt
this is test string   
> cat test.txt~ 
#!/bin/sh
skip=49
tab='	'
nl='
'
IFS=" $tab$nl"
umask=`umask`
umask 77
gztmpdir=
trap 'res=$?
  test -n "$gztmpdir" && rm -fr "$gztmpdir"
  (exit $res); exit $res
' 0 1 2 3 5 10 13 15
case $TMPDIR in
  / | /*/) ;;
  /*) TMPDIR=$TMPDIR/;;
  *) TMPDIR=/tmp/;;
esac
if type mktemp >/dev/null 2>&1; then
  gztmpdir=`mktemp -d "${TMPDIR}gztmpXXXXXXXXX"`
else
  gztmpdir=${TMPDIR}gztmp$$; mkdir $gztmpdir
fi || { (exit 127); exit 127; }
gztmp=$gztmpdir/$0
.......

3.tar命令对文件解压缩

> cat a.txt
1234
123
如下命令是对filename文件(a.txt)进行加密压缩,生成filename.des3加密压缩文件,123@123为加密的密码
> tar -zcf - a.txt |openssl des3 -salt -k 123@123 | dd of=a.txt.des3
0+1 records in
0+1 records out
152 bytes (152 B) copied, 0.00333366 s, 45.6 kB/s
对/mnt的所有文件进行加密压缩
> tar -zcf - /mnt/* |openssl des3 -salt -k 123@123 | dd of=a.des3
或者根据匹配规则进行加密压缩
> tar -zcf - /mnt/pass_* |openssl des3 -salt -k 123@123 | dd of=a.des3
==========>  通常加密后,会将源文件删除 <==========
> ls
a.txt  a.txt.des3
解压操作:
> dd if=a.txt.des3 |openssl des3 -d -k 123@123 | tar zxf -
> cat a.txt
1234
123
# 注意命令最后面的"-",它将释放所有文件,
# -k 123@123可以没有,没有时在解压时会提示输入密码

4.shc加密(仅仅对shell脚本加密)

shc是一个专业的加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件,这个办法很好的解决了脚本中含有IP、
密码等不希望公开的问题。
  
如果你的shell脚本包含了敏感的口令或者其它重要信息, 而且你不希望用户通过ps -ef(查看系统每个进程的状态)捕获敏感信息. 你可以
使用shc工具来给shell脚本增加一层额外的安全保护. shc是一个脚本编译工具, 使用RC4加密算法, 它能够把shell程序转换成二进制可执
行文件(支持静态链接和动态链接). 该工具能够很好的支持: 需要加密, 解密, 或者通过命令参数传递口令的环境.
  
shc的官网下载地址: 
http://www.datsi.fi.upm.es/~frosal/sources/
  
安装方法:
[root@ipsan-node03 ~]# cd /usr/local/src/
[root@ipsan-node03 src]# wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9.tgz
[root@ipsan-node03 src]# tar -zvxf shc-3.8.9.tgz
[root@ipsan-node03 src]# cd shc-3.8.9
[root@ipsan-node03 shc-3.8.9]# mkdir -p /usr/local/man/man1
这步是必须的,不然安装过程中会报错,shc将安装命令到/usr/local/bin/目录下;
将帮助文档存放在/usr/local/man/man1/目录下,如果系统中无此目录,安装时会报错,可创建此目录后再执行安装
  
[root@ipsan-node03 shc-3.8.9]# make install
这是要回答yes或者y,不能直接回车,否则会报错
  
需要注意的是,sch只能能shell脚本文件进行加密,其他文件都不可以!
  
sch加密使用方法:
"-f"选项指定需要加密的程序
[root@ipsan-node03 ~]# ls
text.sh
[root@ipsan-node03 ~]# cat text.sh
#!/bin/bash
echo "hahaha"
[root@ipsan-node03 ~]# shc -r -f text.sh
[root@ipsan-node03 ~]# ls
text.sh  text.sh.x  text.sh.x.c
  
注意:要有-r选项, -f 后跟要加密的脚本名。
运行后会生成两个文件,script-name.x 和 script-name.x.c
script-name.x是加密后的可执行的二进制文件.
./script-name.x 即可运行.
script-name.x.c是生成script-name.x的原文件(c语言)
[root@ipsan-node03 ~]# ./text.sh
hahaha
[root@ipsan-node03 ~]# ./text.sh.x
hahaha
  
通常从安全角度考虑:
使用sch命令对shell脚本文件进行加密后,只需保留.x的二进制文件即可,其他两个文件均可以删除!
[root@ipsan-node03 ~]# ls
text.sh  text.sh.x  text.sh.x.c
[root@ipsan-node03 ~]# rm -rf text.sh
[root@ipsan-node03 ~]# rm -rf text.sh.x.c
[root@ipsan-node03 ~]# ls
text.sh.x
[root@ipsan-node03 ~]# ./text.sh.x
hahaha
  
另外:
shc还提供了一种设定有效执行期限的方法,可以首先使用shc将shell程序转化为二进制,并加上过期时间,如:
[root@ipsan-node03 ~]# shc -e 28/02/2018 -m "this script file is about to expire" -v -r -f text.sh
shc shll=bash
shc [-i]=-c
shc [-x]=exec '%s' "$@"
shc [-l]=
shc opts=
shc: cc  text.sh.x.c -o text.sh.x
shc: strip text.sh.x
shc: chmod go-r text.sh.x
[root@ipsan-node03 ~]# ls
text.sh  text.sh.x  text.sh.x.c
  
解释:
-e:指定过期时间为2018年2月28日
-m:过期后打印出的信息;
-v: verbose
-r: 可在相同操作系统的不同主机上执行
-f: 指定源shell
  
如果在过期后执行,则会有如下提示:
[root@ipsan-node03 ~]# ./text.sh.x
./text.sh.x: this script file is about to expire
使用以上方法要注意,需防止用户更改系统时间,可以通过在程序中加入自动更新系统时间的命令来解决此问题!!
  
sch的帮助命令:
[root@ipsan-node03 ~]# shc -help
shc Version 3.8.9, Generic Script Compiler
shc Copyright (c) 1994-2012 Francisco Rosales <frosal@fi.upm.es>
shc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-rvDTCAh] -f script
  
    -e %s  Expiration date in dd/mm/yyyy format [none]   (指定过期日期)
    -m %s  Message to display upon expiration ["Please contact your provider"]  (指定过期提示的信息)
    -f %s  File name of the script to compile   (指定要编译的shell的路径及文件名)
    -i %s  Inline option for the shell interpreter i.e: -e
    -x %s  eXec command, as a printf format i.e: exec('%s',@ARGV);
    -l %s  Last shell option i.e: --
    -r     Relax security. Make a redistributable binary   (可以相同操作系统的不同系统中执行)
    -v     Verbose compilation    (编译的详细情况)
    -D     Switch ON debug exec calls [OFF]
    -T     Allow binary to be traceable [no]
    -C     Display license and exit
    -A     Display abstract and exit
    -h     Display help and exit
  
    Environment variables used:
    Name    Default  Usage
    CC      cc       C compiler command
    CFLAGS  <none>   C compiler flags
  
    Please consult the shc(1) man page.
  
说明:
经测试,相同在操作系统,shc后的可执行二进制文件直接可以移植运行,但不同操作系统可能会出现问题,
比如将上面的test.sh.x的二进制文件在CentOS6.9上加密后移到redhat as5u4上不能运行,出现"Floating point exception"错误提示,
但移到另一台CentOS6.9上直接运行没问题。

5.GnuPG加密

GnuPG的全称是GNU隐私保护(GNU Privacy Guard),常常被称为GPG,它结合了一组加密软件。它是由GNU项目用C编程语言编写的。最新的稳定版本是2.0.27。在如今的大多数Linux发行版中,gnupg程序包都是默认随带的,所以万一它没有安装,你可以使用apt或yum从软件库来安装它(yum install gnupg)。注意:gpg只能对文件进行加密,对目录则无法完成加密!

下面开始使用GnuPG方式对test.txt文件进行加密
[root@centos6-vm02 ~]# cat test.txt
this is a test!!!
[root@centos6-vm02 ~]# gpg -c test.txt   
can't connect to `/root/.gnupg/S.gpg-agent': No such file or directory         //这个信息可以忽略
 
注意:如上加密的时候,会弹出来一个对话框,要求Paraphrase输入两次密码,对这个特定的文件进行加密。
 
一旦运行带-c选项(完全使用对称密码算法加密)的gpc命令,它会生成一个文件.gpg文件。
[root@centos6-vm02 ~]# ll test.txt*
-rw-r--r--. 1 root root 18 Jan  4 10:08 test.txt
-rw-r--r--. 1 root root 61 Jan  4 10:04 test.txt.gpg
 
对文件进行加密后,最好将源文件删除!不要再保留源文件了!
[root@centos6-vm02 ~]# rm -f test.txt
 
文件解密操作。
注意出现Paraphrase提示时,需要提供加密时输入的同一个密码才能解密
[root@centos6-vm02 ~]# gpg test.txt.gpg  
gpg: 3DES encrypted data
can't connect to `/root/.gnupg/S.gpg-agent': No such file or directory
gpg: encrypted with 1 passphrase
gpg: WARNING: message was not integrity protected
[root@centos6-vm02 ~]# ll test.txt*
-rw-r--r--. 1 root root 18 Jan  4 10:08 test.txt
-rw-r--r--. 1 root root 61 Jan  4 10:04 test.txt.gpg
[root@centos6-vm02 ~]# cat test.txt
this is a test!!!

部分参考文献:

https://www.cnblogs.com/kevingrace/p/8194784.html
> 当你发现自己的才华撑不起野心时,就请安静下来学习吧!<

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值