• 文件属性、权限、用户、用户组


    文件目录属性

    Linux中的文件或目录,都有一个 所有者owner 和 所属组group;

    所有者是指文件的拥有者,所属组是指这个文件属于哪一个用户组(一个用户组下面会有若干个用户);

    假设:t0文件的所有者为owner0,t1的所有者为owner1,owner1有可能不能查看t0,owner0也有可能不能查看t1(之所以说可能,是因为owner0和owner1有可能属于同一个用户组,而恰好这个用户组对这两个文件都有查看权限)

    需求:使一个文件能同时被owner0和owner1查看时;“所属组”就派上用场了。

    先创建一个组owners,让owner0和owner1同属于这个组,然后建立一个文件test2,且其所属组为owners,这样owner0和owner1就都可以访问test2文件。

    上图中,一共9列(用空格划分列)

    第1列

      第1位:文件的类型,d 表示目录,- 表示普通文件,l 表示链接

      第2~位:每3位为一组,每组按顺序表示:所有者、所属组、其他非本用户组的权限,其中,r读、w写、x执行、-无权限;

      最后一位:“.”,老版本CentOS 5是没有这个点的,这主要是因为新版本的ls命令添加了SELinux或者acl的属性。如果文件或者目录使用了SELinux context的属性,这里会是一个点“.”;如果使用了acl的属性,这里会是一个加号“+”。

    第2列

      文件占用的节点(inode),如果是目录,这个数值与该目录下得子目录数量有关

    第3列

      文件所有者

    第4列

      文件所属组

     第5列

      文件的大小

    第6、7、8列

      文件最后修改事件(mtime),按月、日以及具体时间

    第9列

      文件名

    命令chgrp

    change group 的缩写,更改 文件或目录 的 所属组

    格式:

      chgrp [组名] [文件名]

    groupadd newgroup1    添加一个newgroup1用户组
    touch test1
    ls -l test1
    -rw-r--r-- 1 root root 0 12月 30 07:43 test1         新建的文件所属组为root
    chgrp newgroup1 test1        修改test1的所属组为 newgroup1
    ls -l test1
    -rw-r--r-- 1 root newgroup1 0 12月 30 07:43 test1

    更改目录本身且目录中的子级目录和文件:加 -R 即可;

    命令 chown

    change owner的简写,更改 文件或目录 的 所有者

    格式

      chown [-R] 账号名 文件名或目录

      chown [-R] 账户名:组名 文件名或目录

    -R 用于目录,作用是 联级更改;

    mkdir dir1
    useradd user1    // 创建用户user1
    touch dir1/test3   // 在dir1目录下创建test3文件
    chown user1 dir1
    ls -ld dir1    // dir1目录的所有者已经由root改为user1
    drwxr-xr-x 2 user1 root 19 12月 30 07:46 dir1
    ls -l dir1    // 但是dir1目录下的test3文件的所有者依旧是root
    -rw-r--r-- 1 root root 0 12月 30 07:46 test3
    chown -R user1:testgroup dir1      // 把dir1目录和里面的文件和目录的所有人user1所属组testgroup
    ls -l dir1
    -rw-r--r-- 1 user1 testgroup 0 12月 30 07:46 test1

    命令 chmod(重要)

    change mode的简写,改变用户对文件/目录的读、写和执行权限

    格式为

      chmod [-R] xyz 文件名(这里的xyz表示数字)

    -R选项,表示级联更改

    为了方便更改文件的权限,Linux使用数字代替rwx,具体规则为:用4表示r,用2表示w,用1表示x,用0表示-。

    例如,rwxrwx---用数字表示就是770,其具体算法为:rwx=4+2+1=7,rwx=4+2+1=7,---=0+0+0=0。

    在Linux系统中,一个目录的默认权限为755,而一个文件的默认权限为644。

    假设你创建了一个目录,但你不想让其他人看到该目录的内容,则只需将其权限设置成rwxr-----(即740)即可。

    chmod命令还支持使用rwx的方式来设置权限,即使用u、g和o来分别表示所有者、所属组和其他用户的属性,用a代表all(即全部):

    chmod u=rwx,og=rx dir3/test3
    ls -l dir3/test3
    -rwxr-xr-x 1 user1 testgroup 0 12月 30 07:46 dir3/test3

    还可以针对u、g、o和a,增加或者减少它们的某个权限(读、写或执行):

    chmod u-x dir3/test3
    ls -l dir3
    -rw-r-xr-x 1 user1 testgroup 0 12月 30 07:46 test3
    chmod a-x dir3/test3
    ls -l dir3/test3
    -rw-r--r-- 1 user1 testgroup 0 12月 30 07:46 dir3/test3
    chmod u+x dir3/test3
    ls -l dir3/test3
    -rwxr--r-- 1 user1 testgroup 0 12月 30 07:46 dir3/test3

    /etc/passwd 文件

    上图中head前面的符号|,我们称之为管道符,它的作用是把前面命令的输出结果再输入给后面的命令。

    /etc/passwd可以分割成7个字段:

    第1个字段

      用户名,用户账号的字符串。

    第2个字段

       账号的口令。这里为什么是x呢?早期的Unix系统口令确实存放在这里,但基于安全因素,后来就将其存放到/etc/shadow中了,这里只用一个x代替。

    第3个字段

      代表用户标识号,也称为uid。系统就是通过这个数字识别用户身份的。这里的0就是root,也就是说我们可以修改test用户的uid为0,那么系统会认为root和test为同一个账户。uid的取值范围是0~65 535(但实际上已经可以支持到4 294 967 294)。0是超级用户(root)的标识号,CentOS 7和CentOS 8的普通用户标识号从1000开始。如果我们自定义建立一个普通用户,那么会看到该账户的标识号是大于或等于1000的。

    第4个字段

      表示组标识号,也称为gid。这个字段对应着/etc/group中的一条记录,其实/etc/group和/etc/passwd基本类似。

    第5个字段

      注释说明,没有实际意义。通常记录该用户的一些属性,例如姓名、电话、地址等。我们可以使用chfn命令来更改这些信息。

    第6个字段

      用户的家目录,当用户登录时,就处在这个目录下。root的家目录是/root,普通用户的家目录则为/home/username,用户家目录是可以自定义的。比如,建立一个普通用户test1,要想让test1的家目录在/data目录下,只要将/etc/passwd文件中对应该用户那行中的本字段修改为/data即可。

    第7个字段

      用户的shell。用户登录后,要启动一个进程,用来将用户下达的指令传给内核,这就是shell。Linux的shell有sh、csh、ksh、tcsh、bash等多种,而Red Hat、CentOS的shell就是bash。查看/etc/passwd文件,该字段中除了/bin/bash,还有很多/sbin/nologin,这表示不允许该账号登录。如果想建立一个不允许登录的账号,可以把该字段改成/sbin/nologin,默认是 /bin/bash。

    /etc/shadow 文件

    # cat /etc/shadow |head -n 3
    root:$6$Wu/W4eryssf9B3xQ$jgNuM24oQ9boSTUPaeJ/79GFjLUX912bSDu3ak40qJIxNj4/SpaK.JXguDYowM00mt3/
      5tvNIoBJ7RNcpH2K.1:18257:0:99999:7::: bin:*:18078:0:99999:7::: daemon:*:18078:0:99999:7:::

    /etc/passwd 分割成9个字段

    第1个字段

      用户名,与/etc/passwd对应

    第2个字段

      用户密码,是该账号的真正密码。虽然这个密码已经加密,但是有些黑客还是能够解密的。所以将该文件属性设置为000,但root账户还是可以访问或更改的。

    第3个字段

      上次更改密码的日期,这个数字以1970年1月1日和上次更改密码的日期为基准计算而来。例如,上次更改密码的日期为2020年1月1日,则这个值就是365×(2020-1970)+(2020-1970)/4+1=18263。如果是闰年,则有366天。

    第4个字段

      要过多少天才可以更改密码,默认是0,即不受限制。

    第5个字段

      密码多少天后到期,即在多少天内必须更改密码。例如,这里设置成30,则30天内必须更改一次密码;否则,将不能登录系统。默认是99999,可以理解为永远不需要改。

    第6个字段

       密码到期前的警告期限。若这个值设置成7,则表示当7天后密码过期时,系统就发出警告,提醒用户他的密码将在7天后到期。

    第7个字段

       账号失效期限。如果这个值设置为3,则表示密码已经到期,然而用户并没有在到期前修改密码,那么再过3天,这个账号便失效,即锁定。

    第8个字段

      账号的生命周期。跟第3个字段一样,这个周期是按距离1970年1月1日多少天算的。它表示的含义是账号在这个日期前可以使用,到期后将作废。

    第9个字段

      保留用的,没有什么意义。

    命令 groupadd

    新增用户组

    格式

      groupadd [-g GID] groupname

    # groupadd grptest1
    # tail -n1 /etc/group
    grptest1:x:1002:

    如果不加-g选项,则按照系统默认的gid创建组。跟uid一样,gid也是从1000开始的,如下操作自定义gid:

    # groupadd -g 1008 grptest2
    # tail -n2 /etc/group
    grptest1:x:1002:
    grptest2:x:1008:

     删除组 groupdel

    # groupdel grptest2
    # tail -n2 /etc/group
    slocate:x:21:
    grptest1:x:1002:

    注意:当组里面有一个或以上账户,那么就无法删除该组;

    命令 useradd

    新增用户

    格式为

      useradd [-u UID] [-g GID] [-d HOME] [-M] [-s]

    • -u:表示自定义UID。
    • -g:表示使新增用户属于某个已经存在的组,后面可以跟组id,也可以跟组名。
    • -d:表示自定义用户的家目录。
    • -M:表示不建立家目录。
    • -s:表示自定义shell。

    新建一个用户 test10:

    # useradd test10
    # tail -n1 /etc/passwd
    test10:x:1001:1001::/home/test10:/bin/bash
    # tail -n1 /etc/group
    test10:x:1001:

    如果useradd不加任何选项,直接跟用户名,则会创建一个跟用户名同名的组。

    那么,如何自定义uid、gid或者所属的组呢?

    # useradd -u1005 -g 1006 -M -s /sbin/nologin user11

    删除用户 userdel

    格式

      userdel [-r] username

    -r选项:当删除用户时,一并删除该用户的家目录。

  • 相关阅读:
    浅谈c#中使用lock的是与非
    C#设计模式学习笔记单例模式
    ArrayList c.toArray might (incorrectly) not return Object[] (see 6260652)
    java.lang.Object 之 clone() 使用

    把以前的补齐 张
    String的方法 张
    随便写写 张
    集合框架 张
    java 张
  • 原文地址:https://www.cnblogs.com/abc1069/p/16131272.html
Copyright © 2020-2023  润新知