Linux学习--No.6Linux用户与文件权限

之前摸索生信时,执行一个自己写的小脚本却失败了。后来经上网查找执行了chmod u+x lizi.sh就可以了。这里将学习文件权限的相关内容,就能理解那行代码是什么意思了。在学习Linux文件权限知识之前,还有必要了解下用户账户与组的概念。

要点一、Linux账户

Linux有三类用户。一是root用户账户,为Linux系统的管理员,UID为0;二是系统账户,为各种各样的功能而创建的不同的虚拟用户账户,UID为1~500;三是用户账户,为真正用户登录操作的账户,UID从500开始。

cat /etc/passwd
#该文件储存用户信息(之前学习shell类型时,了解过这个文件,这次系统学习一下)

举一用户账户例 ake:x:501:501:ake:/home/ake:/bin/bash ,以冒号为分隔,依次为

  • 登录用户名--用户登录用;
  • 密码--最长8位字母/数字;加密处理,保存在/etc/shadow里,只有root用户才能访问,详见p126;
  • 用户UID--每一个Linux用户有唯一的UID(User ID)值;
  • 用户组ID(GID);
  • 备注字段(一般同登录名);
  • 用户HOME目录;
  • 用户默认的shell;

关于Linux用户的账户增减、信息修改操作就不介绍了,详见p127。
这里介绍一个常用的命令 usermod,可以修改/etc/passwd中的大部分字段,参数大部分与useradd参数相同p128,此外还有以下的参数。

  • -l 修改用户账户的登录名
  • -p 修改账户密码
  • -L 锁定账户,使用户无法登陆
  • -U 解锁账户

要点二、组Group

(1)组的概念
组权限允许多个同组用户对系统中的对象(文件,目录等)共享一组共用的权限。一些Linux发行版(比如Ubuntu)会为每个用户创建一个单独的与用户账户同名的用户默认组,比如上面的ake的账户信息。
(2)/etc/group文件

  • 类似 /etc/passwd 存储用户信息文件,/etc/group为储存所有组的信息的文件。
cat /etc/group

举一例 ake:x:501: ,以冒号为分隔,依次为:

  • 组名(注意这里是组名。如上所述,每个用户都有一个同名的默认组)
  • 组密码
  • GID--组的GID仍500以上
  • 属于该组的用户列表 ,不要以为是没有哈!虽然为空,因为当一个用户在/etc/passwd 里已经指定该组为默认组时,这个用户账户不会作为该组成员再出现在/etc/group的组列表里了。

(3)组的操作

  • 创建新组 groupadd
/user/sbin/groupadd shared    #创建名为shared的新组
tail /etc/group    #查看组列表,可以看出shared没有组成员
  • 添加组成员
/user/sbin/usermod -G shared ake #将ake用户添加到shared组里
/user/sbin/usermod -G shared bei #将bei用户添加到shared组里
tail /etc/group    #ake、bei用户被添加到shared组里

如上, -G参数表示将该组(shared组)添加到用户(bei)的属组里(即同时在两个组里),不会影响原默认组(ake的501组);如果使用 -g参数 指定的组名会替换掉该账户的默认组,要小心。

  • 修改组名
/user/sbin/groupmod -n sharing shared  #将组名改为sharing

要点三、文件权限(划重点!)

1、文件权限符

ls -lh  #重点关注输出的第一段描述文件/目录权限的编码

例如 -rwxrw-r--
(1) 第一个字符表示对象类型

  • - 表文件
  • d 表目录
  • l 表链接
  • c 表字符型设备
  • b 表块设备
  • n 表网络设备

(2)剩下的九个字符:每三个按顺序分别对应属主、属组、其它用户的权限

  • r 表可读
  • w 表可写
  • x 表可执行

ls -lh 也会给出属主、属组信息;根据/etc/group 可知道该属组的其它成员。

2、文件的默认权限

umask  #通过该命令查看默认权限设置
#返回值为 0022  

(1)首先要理解返回的四位数的后三位数(022),分别对应属主、属组、其它用户权限;
(2)然后要明白每种权限要由三个字符才能完整表达。所以其实那三位数022,均为八进制值,分别由3个二进制转换而来。即每一位八进制与固定的三位二进制值详细对应关系见p137,比如常见的有

  • 7,代表111,为rwx权限
  • 6,代表110,为rw-权限
  • 4,代表100,为r--权限
  • 0,代表000,为---权限

(3)最后要知道umask为掩码计算的,并非直接是022权限。若为文件用全权限666-022=644;目录用全权限777-022=755,减掉后的值即为创建文件/目录的默认权限。

  • 所以022对应的是644,即为rw-r--r--
umask
touch test1
ls -lh test1
umask 026   #好像也可修改默认权限
touch test2
ls -lh test2
umask #观察有没有修改默认设置 (由于在家条案件限制,无法演练了)

3、修改对象属性

3.1修改权限

  • chmod 命令

方法一:直接修改八进制值

ls -lh test1
chmod 760 test1  #将760的权限赋给test1文件,不用考虑掩码了
ls -lh test1

方法二:符号模式
即导语所述的方法;举一例就清楚了,如下。

chmod u+x test1  #给属主添加执行命令

关键内容是中间的三个字符:
第一个为操作对象: u 表属主、g 表属组、o 表其它、a 表所有;
第二个为如何修改:+ 表增加、- 表移除、= 表设置成后面的值;
第三个为操作权限:r、w、x 还有其它权限,没怎么理解,详见p139。

3.2修改属主、属组

(1)修改属主 chown命令

  • 注意只有root用户才能改变文件属主
chown ake test1  #将test1的文件属主设置成ake
#注意格式,直接通过指定登录名/UID指定新属主

(2)修改属组 chgrp命令

  • 注意文件属主可以改变文件的属组(前提是该用户必须在那个组里,这个操作相当于把文件按组权限分享给组成员)
chgrp shared test1   #将test1的属组修改为shared

4、共享文件

  • 结合上述的学习,如果想共享文件(使其它用户有组权限)的方法就是创建一个新组,添加组成员,然后修改文件的属组即可。基于上述操作都可以完成了,就是比较麻烦,比如多文件的分享,还要一个一个的修改。
  • 有一种共享文件相对简单的方法---创建一个共享目录,使目录里的新文件都沿用目录的属组(不用麻烦得一一修改属组了),可能也没简便多少,哈哈~
mkdir testdir
ls -lh    #查看目录属组
chgrp shared testdir #修改目录属组
ls -lh 
chmod g+s testdir   #启用SGID(详见p141),使目录里的新建文件都沿用目录的属组shared
ls -lh
umask 002  #所有组成员都应该增加默认属组权限
cd testdir
touch test2
ls -lh
  • 综上,在该目录下创建的文件属组自动设置为shared,即shared组的所有用户都能访问这个文件了。(用户创建的文件的属组一般为创建用户的默认属组)

参考自《Linux命令行与shell脚本编程大全》

你可能感兴趣的:(Linux学习--No.6Linux用户与文件权限)