• Linux下的用户和用户组,文件权限:chown和chmod


    如下图所示,root权限下新建一个用户MasterBai, /etc/passwd文件中新加入一些信息

    这个文件中,记录了该服务器的用户信息,如下图红色框起来的用户,就是我们自己创建的用户,而起来2-25的用户,属于系统用户(在Linux中,所有的服务都必须建立在有用户的情况下才能执行,所以这些用户叫做Linux系统用户)。

    再来看下这些是什么意思(密码已加密,保存在etc/shadow文件下,root权限可查看):

    用户帐号

    用户密码

    用户ID

    用户组ID

    用户名全称

    用户主目录

    用户所使用的shell

    MasterBai

    x

    1002

    1010

     

    /home/MasterBai

    /bin/bash

    这里可以看到,我们在新建一个用户的时候,自动帮我们创建了一个相同名字的用户组MasterBai,ID为1010

    若使用-g参数,则在创建用户的时候指定用户组,若不需要在创建的时候指定用户组,则使用-n参数。eg:

    我们可以使用groups查看当前用户所属的用户组:

    既然一个用户组下可以有多个用户,那么反过来,我想知道某一个用户组下的所有用户呢?在Linux中保存用户信息的是/etc/passwd文件,而保存用户组信息的是/etc/group文件中,列出了所有用户组,密码和gid(用户组ID)。

    通过相关的gid,在用户信息文件中查询:比如这里查询用户组baihuidong,gid=1002的所有用户:

    至此我们知道,gid=1002,名叫‘baihuidong’的用户组下,有两个用户:baihuidong,MasterBai2

    既然一个用户组下可以有多个用户,那一个用户是不是可以属于多个用户组呢?是可以的:

    目前MasterBai这个用户,只有一个用户组,gid=1010,名字就叫MasterBai,我们在MasterBai用户目录下创建一个测试文本

    可以看到它的用户权限为MasterBai,用户组权限为MasterBai

    好,此时我们如下命令更改用户MasterBai的gid,看一下这个文本的所有权限会发生什么变化,注意切换到root权限下:

    usermod -g group_name user_name     //更改一个用户的主用户组(更改gid)

    此时,我们发现,文件所属的用户组,已经变成了baihuidong了,而且用户MasterBai的gid和groupid,都变成了1002

    好,此时,MasterBai还只有一个用户组,就是baihuidong,我们使用如下命令,给MasterBai再添加一个用户组:

    usermod -G group1,group2,group3 user_name    //给用户增加用户组,但是主用户组不变。(文件的所属用户组也不变)

    我们发现,给用户多添加了一个用户组之后,文件的所属用户组,还是baihuidong(gid=1002),而和用户组MasterBai(gid=1010)无关。此时我们得出一个结论,一个用户可以有多个用户组,但只有一个gid主用户组(groups中的对应gid),该用户组所创建的文件所属权,只和该用户的gid所对应的用户组有关。

    OK,添加用户和用户组讲完了,接下来说下,怎样删除用户呢?

    userdel MasterBai3                  //删除用户MasterBai3,在/etc/passwd中已经没有相关信息,但是用户的目录文件还在。
    rm -rf /home/MasterBai3               //删除用户MasterBai3所在/home下的目录和文件
    rm -rf /var/spool/mail/MasterBai3       //删除用户的系统邮箱文件,linux下添加用户后,会在系统里自动加一个邮箱(系统邮箱),路径是/var/spool/mail,删除干净的话这个文件也需要删除掉

    OK,讲完一些用户的相关基础知识,接下来介绍一个比较常用的2个命令兄弟:chown和chmod,文件权限控制命令。相信都不陌生吧,这两个命令,经常用在线上补丁脚本中。接下来讲单独讲一下chown命令:(chmod后面再讲)

    这两个命令,chown是控制哪些人有权限,chmod是控制有什么权限。哈哈哈

    首先我们对Linux中的文件一些简单介绍,在MasterBai用户的home目录下新建一个TestFolder,在TestFolder下新建一个Test2.txt:

    d

    rwxr-xr-x

    2

    MasterBai

    baihuidong

    4096

    Jul

    18

    14:45

    TestFolder

    文件标识

    权限

    文件硬链接数

    文件所有者

    所属用户组

    字节大小

    时间

    文件名

    在文件标识中,d表示目录,-表示文件(其他的类型不常见不了解)

    那chown的作用,就是更改目录或文件的所属用户和所属用户组

    我现在把用户MasterBai的主用户组改成MasterBai(gid)

    接下来我们使用chown的如下命令,让TestFolder目录改成用户为MasterBai2,用户组为baihuidong

    chown user_name:group_name file_dir   //使该文件的所属人和用户组都改变

    OK,但是我想让TestFolder下的Test2.txt权限也一起改了呢?使用chown的如下命令,使该文件以及目录下的所有文件和目录的所属人和用户组都改变。

    chown -R user_name:group_name file_dir    //更变file_dir文件或者目录下的所有文件的所属用户和用户组

    如果我只想改变用户所属人,不想改变群组,也可以使用chown user_name file_dir 不要后面的“:group_name”来实现。

    chown user_name file_dir        //更变一个目录或者文件的所属人

    好了,chown就是这鸟用,哈哈,接下来将chmod,讲chmod之前,先讲下之前的文件属性的那一大串rwxr-xr-x是什么意思:

    应该不难发现,这些属性都是由9位字母组成,Linux将其三个一组,分成三组:

    这张图应该能解释清楚吧,好了现在开始使用chmod命令了:

    比如,当前TestFolder这个目录的权限为755,我现在要把它改成750,怎么操作呢?

    切换到root权限下执行:

    chmod 750 TestFolder/

    使用chmod的如下命令可以使TestFolder目录下的所有文件目录权限都改为755:

    chmod -R 755 TestFolder/

     文件加权限,减权限暂时没有用到,以后补充。。。

    最近我在有些环境下使用如下命令添加用户的时候,在/etc/passwd文件中看到已经添加成功,但是home文件夹下没有新添加用户的目录,而且命令行只有一个"$"符号,这是什么原因呢?我去查了一下useradd的参数,有些环境下,需要使用-s和-m命令,才能让新添加的用户有正常的命令行提示和新用户目录:

    useradd -m -s /bin/bash MasterBai2
    以梦为马,诗和远方
  • 相关阅读:
    MySQL的数据库,数据表,数据的操作
    数组函数
    字符串函数,时间函数,数学函数,数组
    PHP函数
    php类型的相关函数,运算符,条件判断,循环
    PHP数据类型
    vector中erase用法注意事项
    C++11 右值引用&&
    vector中find和find_if的用法 以后再遍历剁手!
    在cocos2d中添加自己的shader教程
  • 原文地址:https://www.cnblogs.com/MasterBai2018/p/9325144.html
Copyright © 2020-2023  润新知