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. Jquery焦点图实例

    对于很多建站的朋友来讲,焦点图并不陌生,一般的企业站,门户站都会用到焦点图.我们平时在写html代码的时候,很多人为了省时省力,对于焦点图都是在网上下载一些人家写好的代码,直接套上去即可,很多时候我自 ...

  2. 记在thinkPHP中一个创建模型的小错误

    在创建好模型以后,访问说没有该方法,如图 看代码 class ManagerModel { //put your code here function checkDenglu($name,$pwd){ ...

  3. IT电子书网站下载

    https://www.gitbook.com/ http://www.it-ebooks.info/ http://www.fenby.com/courses/sections/kuai-su-ka ...

  4. Cdn加速

    http://www.bootcdn.cn/ http://cdn.code.baidu.com/ backbone <script src="https://cdn.bootcss. ...

  5. Lucene实战(第2版)》

    <Lucene实战(第2版)>基于Apache的Lucene 3.0,从Lucene核心.Lucene应用.案例分析3个方面详细系统地介绍了Lucene,包括认识Lucene.建立索引.为 ...

  6. 滴答数必须介于 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks 之

    一个莫名其妙的问题:错误 滴答数必须介于 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks 之间. 参数名:ticks.这 网上找了很多,都没有一个正 ...

  7. 安装Bind过程中提示丢失MSVCR110.dll的解决办法

    前几天在线安装Visual Studio 2012 Update 3,由于在线安装需要不断下载安装文件,时间很长,后来等不下去,就取消了,不幸的是VS启动不了了,弹出“devenv.exe – 系统错 ...

  8. AngularJS系列:表单全解(表单验证,radio必选,三级联动,check绑定,form提交验证)

    一.查看$scope -->寻找Form控制变量的位置 Form控制变量 格式:form的name属性.input的name属性.$... formName.inputField.$pristi ...

  9. 投芯片,现在要n+1模式

    给坚持理想的屌丝点个赞.投芯片,现在要n+1模式,n个小项目+一个大项目.团队是基础,屌丝创业要以营利为先导,先要短快,同时要有并行的大项目支撑.小项目赚的钱先解决面包问题,同时为大项目锻炼队伍积累经 ...

  10. PHP 错误与异常 笔记与总结(10)错误处理器测试

    关联文件:myErrorHandler.php (上一篇) 先测试通知级别的错误的自定义处理: testErrorHandler.php <?php require_once 'myErrorH ...