6.1.1 /etc/passwd文件

  • /etc/passwd:包含系统用户账户列表以及每个用户的基本配置信息

    • 每个条目有七个字段,每个字段用冒号隔开

      • 登录用户名
      • 用户密码
      • 用户账户的UID
      • 用户账户的GID
      • 用户账户的文本描述
      • 用户HOME目录的位置
1
rich:x:501:501:Rich Blum:/home/rich:/bin/bash
  • 默认情况下,bash shell启动时会自动处理用户主目录下.bashrc文件中的命令
  • linux系统将用户密码保存在另一个单独的文件中(称为shadow文件,位置在/etc/shadow),只有特定的程序才能访问,如root

6.1.2 /etc/shadow文件

  • /etc/shadow文件为系统上的每个用户账户保存了一条记录

    • 每条记录有9个段:

      • 与/etc/passwd文件中的登录名对应的登录名
      • 加密后的密码
      • 自1970年1月1日(上次修改密码的日期)到当天的天数
      • 多少天后才能更改密码
      • 多少天后必须修改密码
      • 密码过期前提前多少天提醒用户更改密码
      • 密码过期后多少天禁用用户账户
      • 用户账户被禁用的日期,用自1970年1月1日到当天的天数表示
      • 预留字段,给将来使用
1
rich:$1$.Ffck0ns$f1UgiyHQ25wrB/hykCn020:11627:0:99999:7:::

6.1.3 添加新用户

  • 命令:useradd

    • 该命令使用系统的默认值以及命令行参数来设置用户账户
    • 可以用useradd命令加-D参数来查看Linux系统上的系统默认参数
      • -D 参数显示了在创建新用户是如果你不在命令行指定的话useradd命令将使用的默认值

        • 新用户会被加到GID为100的公共组
        • 新用户的HOME目录将会位于/home/loginname
        • 新用户账户密码在过期后不会被禁用
        • 新用户账户未被设置为某个日期后就过期
        • 新用户账户将bash shell作为默认shell
        • 系统将/etc/skel目录下的内容复制到用户的HOME目录下
        • 系统为该用户账户在mail目录下创建一个用于接收邮件的文件
      • 倒数第二个意思:useradd命令允许管理员创建一份默认的HOME目录配置,然后把它作为创建用户的HOME目录的模板,这样就能自动在每个新用户的HOME目录里放置默认的系统文件
      • 系统会自动将/etc/skel目录下的这些默认文件复制到你创建的每个用户的HOME目录中
    • useradd命令不会创建HOME目录,加上-m命令行选项后就会创建了
 
1
2
3
4
5
6
7
8
9
# /usr/sbin/useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
#
  • 更改创建新用户时的系统默认的用户值:useradd + -D + 代表要修改值得参数

    • useradd更改默认值得参数:
参数 描述
-b 更改默认HOME目录
-e 更改默认新账户的过期日期
-f 更改默认从密码过期到账户被禁用的天数
-g 更改默认的组名称或GID
-s 更改默认的登录shell

6.1.4 删除用户

命令 userdel

  • 默认情况下,userdel只会删除/etc/passwd文件中的用户信息,而不会删除系统中属于该账户的任何文件
  • -r 参数:userdel会删除用户的HOME目录以及mail目录,然而,系统上仍可能存在有归已删除用户所有的其他文件
  • 注意:在有大量用户使用的环境中使用-r需要小心,因为你永远不知道用户是否在他的HOME目录下存放了其他用户或其他程序要用的重要文件

6.1.5 修改用户

  • 用户账户修改工具
命令 描述
usermod 修改用户账户的字段,并可以指定主要组以及附加组的所属关系
passwd 修改已有用户的密码
chpasswd 从文件中读取登录名密码对,并更新密码
chage 修改密码的过期日期
chfn 修改用户账户的备注信息
chsh 修改用户账户的默认登录shell

6.2 使用Linux组

6.2.1 /etc/group文件

  • /etc/group文件包含系统上用到的每个组的信息

    • 包含4个字段:

      • 组名
      • 组密码
      • GID
      • 属于改组的用户列表
1
2
root:x:0:root
...

6.2.2 创建新组

命令:groupadd +groupname

  • 默认情况下,没有用户属于该组成员
  • 添加用户到组:usermod -G groupname
  • 注意项:
    • 如果更改了已登录系统账户所属的用户组,该用户必须登出系统后再登录,组关系的更改才会生效
    • 将组添加到用户账户时要注意
      • 如果加了-g参数,指定的组名会替换掉该账户的默认组
      • -G则会将改组添加到用户的属组的列表里,而不会影响默认组

6.2.3 修改组

  • groupmod会修改已有组的GID(加-g参数)和组名(加-n参数)
  • 修改组名时GID和组成员不会变,只有组名会改变
    • 因为所有的安全权限都是基于GID的,所以可以任意改变组名而不会影响文件的安全性

6.3 理解文件权限

默认文件权限

  • umask命令用来设置用户创建的文件和目录的默认权限
1
2
3
4
$ touch newfile
$ ls -al newfile
-rw-r--r-- 1 rich rich 0 Sep 20 19:16 newfile
$
 
1
2
3
$ umask
0022
$
  • umask命令的理解

    • 第1位:代表了一项特别的安全特性,叫作粘着位
    • 后面3个数组表示文件和目录的umask的八进制值
      • 对于rwx,每个位置代表一个二进制,有相关权限就置1,否则为0,如:r–转换为二进制位100,八进制为4
    • umask值是个掩码,它会屏蔽掉不想授予安全级别的权限
      • umask值会从对象的全权限值中减掉,所以在例子中,一开始的权限是666,然后umask值是022,剩下的文件权限就成了644了

        • 文件的全权限值是666(所有用户都有读和写权限),目录的全权限是777(所有用户都有读写和执行权限)
  • umask的值会在/etc/profile启动文件中设置,可以用umask命令为默认umask设置指定一个新值

6.4 改变安全性设置

6.4.1 改变权限

chmod命令

  • 该命令用来设置文件和目录的安全性设置
  • 用法:chmod options mode file
    • mode参数后可跟八进制模式或符号模式来设置安全性设置
    • options参数为chmod命令提供了另外一些功能
      • -R:可以让权限的改变递归地作用到文件和目录
  • 八进制模式略
  • chmod在指定符号模式下指定权限的格式:[ugoa…][+-=][rwxXstugo]
    • 第一组定义了权限的作用对象

      • u:用户
      • g:组
      • o:其他
      • a:上述所有
    • 第二组是想要在现有权限基础上增加权限(+),还是移除(-),还是将权限设置成后面的值(=)
    • 最后一组代表作用到设置上的权限,这个值比rwx多,额外的设置有一下几项
      • X:如果对象时目录或者它已有执行权限,赋予执行权限
      • s:运行时重新设置UID或GID
      • t:保留文件或目录
      • u:将权限设置为跟属主一样
      • g:将权限设置为跟属组一样
      • o:将权限设置为跟其他用户一样
1
2
3
4
$ chomd o+r newfile
$ ls -l newfile
-rwxrw-r-- 1 rich rich 0 Sep 20 19:16 newfile
$
  • 可以在指定文件名时用通配符将权限的更改通过一个命令作用到多个文件上

6.4.2 改变所属关系

有时会你会改变文件的属主,比如在有人离职或者开发人员创建了一个在产品环境中运行时需要归属在系统账户下的应用

chown命令

  • 用来改变文件的属主
  • 格式:chown options owner[.group] file
    • -R参数:递归地改变子目录和文件的所属关系
    • -h参数:改变文件的所有符号链文件的所属关系
  • 可用登录名和UID来指定文件的新属主
1
2
3
4
# chown dan newfile
# ls -l newfile
-rw-rw-r-- 1 dan rich 0 Sep 20 19:16 newfile
#

-chown命令也支持改变文件的属主和属组

1
2
3
4
# chown dan.shared newfile
# ls -l newfile
-rw-rw-r-- 1 dan shred 0 Sep 20:16 newfile
#
  • 改变一个目录的默认属组
1
2
3
4
# chown .rich newfile
# ls -l newfile
-rw-rw-r-- 1 dan rich 0 Sep 20:16 newfile
#
  • 如果Linux系统采用和用户登录名匹配的组名,则可以用一个条目改变二者
1
2
3
4
# chown test. newfile
# ls -l newfile
-rw-rw-r-- 1 test test 0 Sep 20:16 newfile
#
  • 注意:

    • 只有root用户才能改变文件的属主
    • 任何属主都可以改变文件的属组,但前提是属主必须是源和目标属组的成员

chgrp命令

  • 可以很方便的改变文件或目录的默认属组
1
2
3
4
$ chgrp shared newfile
$ ls -l newfile
-rw-rw-r-- 1 rich shared 0 Sep 20 19:16 newfile
$
  • 通过上面的修改,现在shared组的任意一个成员都可以写这个文件了,这是Linux系统共享文件的一个途径

6.5 共享文件

  • Linux为每个文件和目录存储了额外的信息

    • 设置用户ID(SUID):当文件被用户使用过时,程序会以文件属主的权限运行
    • 设置组ID(SGID):对文件来说,程序会以文件属组的权限运行;对目录来说,目录中创建的新文件会以目录默认属组作为默认属组
    • 粘着位:进程结束后文件还会在内存中
  • SGID对文件共享非常重要,是能了SGID位,就能让在一个共享目录下创建的新文件都属于该目录的属组,也就是每个用户的组
    • SGID通过chmod来设置,它会加到标准3位八进制值之前(组成4位八进制值),或者在符号模式下用符号s
  • 修改SGID位置位,使在共享目录中新创建的文件都能沿用目录的属组
1
2
3
4
5
6
7
8
$ mkdir testdir
$ chgrp shared testdir
$ chmod g+s testdir
$ unask 002
$ cd testdir
$ touch testfile
$ ls -l
-rw-rw-r-- 1 rich shared 0 Sep 20 23:13 testfile

Linux命令行–理解Linux文件权限(转)的更多相关文章

  1. Linux命令行–初识Linux shell

    shell及脚本简介  GNU/Linux shell 是个交互工具,它为用户提供了启动程序.管理文件系统上的文件以及管理运行在Linux系统上的进程的途径 . shell的核心是命令行提示符 它是s ...

  2. Linux命令(四)——文件权限管理

    文件权限是指对文件的访问控制,即哪些用户或群组可以访问文件以及执行什么样的操作. 一.文件的权限 1.Linux文件类型 (1)普通文件:文本文件+数据文件+可执行的二进制文件. (2)目录文件:即文 ...

  3. Linux命令行--使用linux环境变量(转)

    5.1 什么时环境变量 bash shell用一个成为环境变量的特性来存储有关的shell回话和工作环境的信息,这是它们成为环境变量的原因.它允许你在内存中存储数据,以便运行在账户.系统.shell的 ...

  4. [E2E_L9]Linux命令行上传文件到百度网盘

    百度有2TB 存储空间,在有第三方服务器的情况下,很多东西不需要下载到本地,可以直接使用服务转存,这非常好. 系统环境: Linux 系统 + Python 2.7 安装软件工具:[可能会要重复装] ...

  5. Linux命令行上传文件到百度网盘

    利用bpcs_uploader你可以自动将VPS主机上的文件上传到百度网盘中,同时也可以从百度网盘中下载文件到VPS主机上,让你的文件安全地"住"在百度云中.[font=Tahom ...

  6. linux命令行快速统计文件(压缩文件)的行数

    统计(文件|压缩文件)的行数 zcat file.gz | sed -n '$='                                         #迅速.直接打印出多少行.-n 取消 ...

  7. [转]Linux命令行上传文件到 百度网盘 bypy

    安装软件工具: apt-get install python-pip pip install requests pip install bypy 授权登陆: 执行 bypy info,显示下边信息,根 ...

  8. Linux命令行批量删除文件(目录)

    快速-批量删除文件或目录 1-1.快速删除大文件夹(注意目录后的结束符'/')(对于含有海量文件的目录,不能直接rm -rf删除,这样效率很慢:) rsync -a --delete blank/ t ...

  9. 如何使用Linux命令行查看Linux服务器内存使用情况?

    一个服务器,最重要的资源之一就是内存,内存够不够用,是直接关系到系统性能的关键所在. 本文介绍如何查看Linux服务器内存使用情况, 1.free命令 free -m [root@localhost ...

随机推荐

  1. state配置语言实战

    修改配置文件:(base用来放初始化环境.prod用来放生产配置环境) [root@super65 ~]# vim /etc/salt/master [root@super65 ~]# mkdir - ...

  2. Layui - 示例

    示例地址 http://www.layui.com/demo/ 下载地址 http://www.layui.com/ 示例代码 <!doctype html> <html> & ...

  3. HTML&CSS----练习隐藏导航栏(三级导航)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. Leetcode | Minimum/Maximum Depth of Binary Tree

    Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum depth is the n ...

  5. 6月辞职->帝都生活

    ---恢复内容开始--- 5月初送走了静,有点伤心,但还是忍住没哭. 纠结了一下上哪个班,上不上基础班,不能再拖了,果断交钱报6月份的ios基础班.之前还有个电话面试,怕怕的,考了很多函数的知识,好多 ...

  6. Python For Data Analysis -- Pandas

    首先pandas的作者就是这本书的作者 对于Numpy,我们处理的对象是矩阵 pandas是基于numpy进行封装的,pandas的处理对象是二维表(tabular, spreadsheet-like ...

  7. 迷宫bfs POJ3984

    #include<stdio.h> int map[5][5]={0,1,0,0,0,       0,1,0,1,0,       0,0,0,0,0,       0,1,1,1,0, ...

  8. Delphi dbf文件如何定位记录(即设置Table的RecNum属性来移动到该记录号)

    Delphi的table的RecNum属性,可以用来定位记录,如:self.Table1.RecNum:=23;即可以让数据库记录移动到23号记录上,但这种作用仅限于Paradox数据库,而不是dBA ...

  9. mysql ERROR 1045 (28000): Access denied for user解决方法 (转)

    问题重现(以下讨论范围仅限Windows环境): C:\AppServ\MySQL> mysql -u root -pEnter password:ERROR 1045 (28000): Acc ...

  10. Squid 操作实践

    Squid简介 Squid可以做什么 性能要素 Squid安装 Squid快速体验 Squid配置 Squid简介 Squid is a caching proxy for the Web suppo ...