linux file perission

创建文件和目录

创建文件

~$:touch file

创建目录mkdir

~$:mkdir -p /dir/my_dir
~$:mkdir -p /dir/{test,test1,test2}

递归创建

~$:sudo mkdir -p /test/test
选项-R 递归的将某目录下所有的文件以及目录全部修改
~$:sudo chown -R root:root test

输出文件

一次性输出

  • cat
    -n --打印行号(包含空白行)
    -b --打印行号(不含空白行)
    -a --将一些看不见的字符用特殊符号打出来 空格用"I" 回车用"$"
  • tac(反向列出) cat --> tac
  • nl(添加行号打印)

分屏输出

  • more
  • less
  • head [-n number]
  • tail
  • od
    非纯文本文件(二进制文件)
    -t c ASCII
    a 默认字符
    o octal 八进制
    d decimal 十进制
    f 浮点数
    x 十六进制

输出文件类型

file 命令
查看文件类型,data或者ASCII或者binary
~$:file /usr/bin/passwd

rwx权限

r-读权限查询文件名数据

w-写权限

  • 新建文件与目录
  • 删除文件或者目录
  • 重命名以及转移文件或者目录

x-可执行权限

  • 进入某目录
  • 切换到该目录(cd命令)
    !!!能不能进入某一目录只与该目录的x权限有关,如果不拥有某目录的x权限,即使拥有r权限,那么也无法执行该目录下的任何命令
    但是即使拥有了x权限,但是没有r权限,能进入该目录但是不能打开该目录,因为没有读取的权限。
    cd - 回到上一次工作的目录

改变文件或者目录的权限

~$:sudo chmod 777 test
~$:sudo chmod +x test
~$:sudo chmod u=rwx,g=r,o=r test
r. u–user g–group o–others a–all

改变文件或者目录的属主

~$:sudo chown root:root test
~$:sudo chown root test

改变属组

~$:sudo chgrp root test

umask

用户创建文件时一般不应有执行的权限,所以创建文件的默认权限为666也即-rw-rw-rw-,但是目录需要有执行的权限,应为777,即-rwxrwxrwx,使用如下命令查看当前的umask:
~$:umask

0002

~$:umask -S

u=rwx,g=rwx,o=rx

第一个与特殊权限有关,后三个与一般权限有关,在创建文件或者目录时,会将umask所对应的权限拿掉,即新建文件时:
(-rw-rw-rw-)-(--------w-) = (-rw-rw-r–)所以创建文件的一般权限为-rw-rw-r –
同理可得创建目录时的权限应该为drwxrwxr-x即775。要修改umask的值,可直接在输入umask后接所要减去的权限

~$:umask 002
一般情况下root用户的umask为022,这是为了安全考虑,一般用户的umask是022,即保留了同用户组的写入权利。如果同一个用户组的不同用户无法修改另一个用户的文件,那么就可能是同组成员的创建文件时的默认权限不同,可以用umask修改。

修改文件时间

stat filename

列出该文件的各种时间

touch

-a 仅修改访问时间
-t 后面接欲修改的时间而不用当前时间,格式为[YYMMNNhhmm]
-d 接欲修改的日趋而不用当前日期,也可以用–date=“时间或者日 期”
-c 仅修改文件的时间(文件状态改变的时间)
-m 仅修改mtime(文件内容被更改的时间)
-d和-t修改的是mtime和atime 但是不能修改 ctime
~$:touch -d “2 days ago” testtouch
~$:touch -t 150929 testtouch

ls -l 默认显示的是mtime,是内容修改的时间(modify)
touch --time=ctime  ctime 显示的是状态被改变的时间,指的是文件属性和权限发生改变。
touch --time=atime atime 访问时间显示的是最近文件被访问的时间(acess),cat and more可以,但是像ls和stat不会改变

ls -lc # chagne state
ls -lu # acess time访问时间
ls -l # modify time

chattr与lsattr 设置文件的隐藏属性。

change attributes
chattr -i 设置文件不可以被删除(包括root用户)
-a 设置文件只能增加数据,而不能删除或者修改文件(如登陆文件)

chattr +i +a 可以增加文件的隐藏属性,其他属性不变
-i -a 可以除去文件的隐藏属性,其他属性不变
=i a 仅有=后面的属性

lsattr 查看文件的隐藏属性

文件特殊权限

在文件或者目录中除了rwx外,还会出现s,t,S,T权限

SUID

当s出现在文件所有者的x权限上时,


~$:ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root …
~$:ls -l /etc/shadow
-rw-r----- 1 root shadow

用户密码存在/etc/shadow内,当用户想要修改密码时,可以使用passwd进行修改
用户mxx对于/etc/shadow没有任何权限,但是对于/usr/bin/passwd拥有r-x权限, 所以可以执行passwd命令,由于在passwd命令中有SUID权限,所以mxx在执行pass- wd命令时,会暂时获得passwd拥有者即root的权限,所以接下来可以用passwd修改 /etc/shadow。

!!!此权限仅可用于二进制程序中,且仅在执行该程序的过程中有效,此外只对 于文件有效,对于目录也是无效的

SGID

当s权限出现在用户组的x权限时,如
~$:ls -l /usr/bin/mlocate /var/lib/mlocate/mlocate.db

-rwx–s--x 1 root mlocate

同SUID类似,程序执行者会获得该程序用户组的支持,还可以用在目录上,若该用户在此目录下具有w权限,用户创建的新文件的用户组与此目录组的用户组相同
~$:su root
~$:mkdir test
~$:ls -l test

drwxrwxr-x 2 root root …

~$:chmod 2777 test
~$:ls -l test

drwxrwsrwx 2 root root

~$:su mxx
~$:cd test
~$:touch test

-rw-rw-r-- 1 mxx root …

!!!此权限对于目录以及文件都有效

SBIT

当t出现在others的x权限上时
~$:ls -l /tmp

drwxrwxrwt 13 root root …

用户对于某个目录具有wx的权限,即可以写入的权限,相当于说目录的属主给了用 户属组或者其他人的身份,并拥有w的权限,那么也就是说这个用户具有删除属主
创建的文件或者目录的删除等权限。但是如果该目录拥有了SBIT的权限,那么该用 户就只能删除自己所创建的文件,而不能删除属主所创建的文件。
!!!此权限只针对目录有效

如何设置文件以及目录的特殊权限(SUID 4,SGID 2 ,SBIT 1)

最前面的一位为文件的特殊权限
直接用chmod 4755 filename就可以了
还可以通过加法来实现,如SUID为u+s,SGID为g+s,SBIT为o+t
此外还有大写的S和T,代表空,如
~$:chmod 7666 test
~$:ls -l test

-rwSrwSrwT 1 mxx mxx

因为s和t都是替代x的,而当文件所有者以及其他用户用户组都没有x的时候,所以 就不用说其他的操作了,所以也就为空了

常见配置文件

  • /bin:可以被单用户执行的命令。其下的命令可以被root用户和普通用户执行,如cat,cd,cp,date,chown,chmod,等等
  • /sbin/:开机过程所需要的,只能被root用户所执行,普通用户只能进行查询,包括与开机,还原系统所需要的命令
  • /usr/bin:绝大部分的用户可使用命令都在这里
  • /usr/sbin/:服务器所需要的某些软件程序
  • /usr/local/sbin:本机自行安装的软件产生的系统执行文件
  • / 根目录
  • /etc 系统的配置文件
  • /lib 执行文件所需要的函数库与内核所需要的模块
  • /bin 重要执行文件
  • /sbin 重要的系统执行文件
  • /dev 所需要的设备文件

这五个目录必须和根目录放在一块。

根目录最好小一些,将一些经常用到的文件目录(/home:/usr:/var:/tmp与根目录分到不同的分区。因为越大的分区,放入的数据也就越多,出错的几率也就越大,而如果根目录出现问题,系统就可能会出现问题。

参考文献

1.《鸟哥的LINUX私房菜》