• 开发常识之Linux用户及其权限管理


    不论是开发人员或维护人员,还是项目管理者,都需要对Linux有基本的了解和掌握。

     Linux操作系统对多用户的管理,是非常繁琐的,所以用组的概念来管理用户就变得简单,每个用户可以在一个独立的组,每个组也可以有零个用户或者多个用户。

    Linux系统用户是根据用户ID来识别的,默认ID长度为32位,从默认ID编号从0开始,但是为了和老式系统兼容,用户ID限制在60000以下,Linux用户分总共分为三种,分别如下:

     root用户  (ID 0)

     系统用户  (ID 1-499)

    普通用户  (ID 500以上)

    Linux系统中的每个文件或者文件夹,都有一个所属用户及所属组,使用id命令可以显示当前用户的信息,使用passwd命令可以修改当前用户密码。Linux操作系统用户的特点如下:

    每个用户拥有一个UserID,操作系统实际读取的是UID,而非用户名;

    每个用户属于一个主组,属于一个或多个附属组,一个用户最多有31个附属组;

    每个组拥有一个GroupID;

    每个进程以一个用户身份运行,该用户可对进程拥有资源控制权限;

    每个可登陆用户拥有一个指定的Shell环境。

      Linux用户管理

    Linux用户在操作系统可以进行日常管理和维护,涉及到的相关配置文件如下:

    /etc/passwd     保存用户信息

     /etc/shdaow     保存用户密码(以加密形式保存)

     /etc/group      保存组信息

     /etc/login.defs   用户属性限制,密码过期时间,密码最大长度等限制

     /etc/default/useradd 显示或更改默认的useradd配置文件

    如需创建新用户,可以使用命令useradd,执行命令useradd test1即可创建test1用户,同时会创建一个同名的组test1,默认该用户属于test1主组。

    Useradd test1命令默认创建用户test1,会根据如下步骤进行操作:

     在/etc/passwd文件中添加用户信息;

    如使用passwd命令创建密码,密码会被加密保存在/etc/shdaow中;

     为test1创建家目录:/home/test1;

     将/etc/skel中的.bash开头的文件复制至/home/test1家目录;

     创建与用户名相同的test1组,test1用户默认属于test1同名组;

     test1组信息保存在/etc/group配置文件中。

    在使用useradd命令创建用户时,可以支持如下参数:

     

    用法:useradd [选项] 登录

    useradd -D

    useradd -D [选项]

     

    选项:

    -b, --base-dir BASE_DIR        指定新账户的家目录;

     

    -c, --comment COMMENT          新账户的 GECOS 字段;

     

    -d, --home-dir HOME_DIR        新账户的主目录;

     

    -D, --defaults                 显示或更改默认的 useradd 配置;

     

    -e, --expiredate EXPIRE_DATE   新账户的过期日期;

     

    -f, --inactive INACTIVE        新账户的密码不活动期;

     

    -g, --gid GROUP                新账户主组的名称或ID;

     

    -G, --groups GROUPS       新账户的附加组列表;

     

    -h, --help                     显示此帮助信息并推出;

     

    -k, --skel SKEL_DIR            使用此目录作为骨架目录;

     

    -K, --key KEY=VALUE            不使用 /etc/login.defs 中的默认值;

     

    -l, --no-log-init         不要将此用户添加到最近登录和登录失败数据库;

     

    -m, --create-home         创建用户的主目录;

     

    -M, --no-create-home      不创建用户的主目录;

     

    -N, --no-user-group       不创建同名的组;

     

    -o, --non-unique               允许使用重复的 UID 创建用户;

     

    -p, --password  PASSWORD        加密后的新账户密码;

     

    -r, --system                   创建一个系统账户;

     

    -R, --root CHROOT_DIR          chroot 到的目录;

     

    -s, --shell SHELL              新账户的登录 shell;

     

    -u, --uid UID                  新账户的用户 ID;

     

    -U, --user-group               创建与用户同名的组;

     

    -Z, --selinux-user SEUSER      为SELinux 用户映射使用指定 SEUSER。

    Linux组管理

      所有的Linux或者Windows系统都有组的概念,通过组可以更加方便的管理用户,组的概念应用于各行行业,例如企业会使用部门、职能或地理区域的分类方式来管理成员,映射在Linux系统,同样可以创建用户,并用组的概念对其管理。

    Linux组有如下特点:

     每个组有一个组ID;

     组信息保存在/etc/group中;

     每个用户至少拥有一个主组,同时还可以拥有31个附属组。

    通过命令groupadd、groupdel、groupmod来对组进行管理,详细参数使用如下:

    groupadd用法

    -f, --force            如果组已经存在则成功退出;

    并且如果 GID 已经存在则取消 –g;

    -g, --gid GID             为新组使用 GID;

    -h, --help                显示此帮助信息并推出;

    -K, --key KEY=VALUE       不使用 /etc/login.defs 中的默认值;

    -o, --non-unique          允许创建有重复 GID 的组;

    -p, --password PASSWORD   为新组使用此加密过的密码;

    -r, --system              创建一个系统账户;

    groupmod用法

    -g, --gid GID             将组 ID 改为 GID;

    -h, --help                显示此帮助信息并推出;

    -n, --new-name NEW_GROUP 改名为 NEW_GROUP;

    -o, --non-unique          允许使用重复的 GID;

    -p, --password PASSWORD   将密码更改为(加密过的) PASSWORD;

    groupdel用法

    groupdel admin                 删除admin组;

    二、 Linux权限管理

    Linux权限是操作系统用来限制对资源访问的机制,权限一般分为读、写、执行。系统中每个文件都拥有特定的权限、所属用户及所属组,通过这样的机制来限制哪些用户或用户组可以对特定文件进行相应的操作。

    Linux每个进程都是以某个用户身份运行,进程的权限与该用户的权限一样,用户的权限越大,则进程拥有的权限就越大。

    Lnux中有的文件及文件夹都有至少权限三种权限,常见的权限如表5-1所示:

    权限

    对文件的影响

    对目录的影响

    r(读取)

    可读取文件内容

    可列出目录内容

    w(写入)

    可修改文件内容

           可在目录中创建删除内容

    x(执行)

    可作为命令执行

    可访问目录内容

    目录必须拥有 x 权限,否则无法查看其内容

    Linux权限授权,默认是授权给三种角色,分别是user、group、other,Linux权限与用户之间的关联如下:

    U代表User,G代表Group,O代表Other;

     每个文件的权限基于UGO进行设置;

    权限三位一组(rwx),同时需授权给三种角色,UGO;

     每个文件拥有一个所属用户和所属组,对应UGO,不属于该文件所属用户或所属组使用O来表示;

    在Linux系统中,可以通过ls –l查看peter.net目录的详细属性,如图5-1所示:

    drwxrwxr-x   2 peter1 peter1 4096 Dec 10 01:36 peter.net

    peter.net目录属性参数详解如下:

     d 表示目录,同一位置如果为-则表示普通文件;

     rwxrwxr-x 表示三种角色的权限,每三位为一种角色,依次为u,g,o权限,如上则表示user的权限为rwx,group的权限为rwx,other的权限为r-x;

     2表示文件夹的链接数量,可理解为该目录下子目录的数量;

     从左到右,第一个peter1表示该用户名,第二个peter1则为组名,其他人角色默认不显示;

     4096表示该文件夹占据的字节数;

     Dec 10 01:36 表示文件创建或者修改的时间;

    peter.net 为目录的名,或者文件名。

    peter.net目录属性参数详解如下:

     d 表示目录,同一位置如果为-则表示普通文件;

     rwxrwxr-x 表示三种角色的权限,每三位为一种角色,依次为u,g,o权限,如上则表示user的权限为rwx,group的权限为rwx,other的权限为r-x;

     2表示文件夹的链接数量,可理解为该目录下子目录的数量;

     从左到右,第一个peter1表示该用户名,第二个peter1则为组名,其他人角色默认不显示;

     4096表示该文件夹占据的字节数;

     Dec 10 01:36 表示文件创建或者修改的时间;

    peter.net 为目录的名,或者文件名。

    Chmod用户及组权限

    修改某个用户、组对文件夹的权限,用命令chmod实现,其中以代指ugo,、-、=代表加入、删除和等于对应权限,具体案例如下:

    (1) 授予用户对peter.net目录拥有rwx权限

    chmod  –R  u+rwx  peter.net

    (2) 授予组对peter.net目录拥有rwx权限

    chmod  –R  g+rwx  peter.net

    (3) 授予用户、组、其他人对jpeter.net目录拥有rwx权限

    chmod  –R  u+rwx,g+rwx,o+rwx  peter.net

    (4) 撤销用户对peter.net目录拥有w权限

    chmod  –R  u-w  peter.net

    (5) 撤销用户、组、其他人对peter.net目录拥有x权限

    chmod  –R  u-x,g-x,o-x peter.net

    (6) 授予用户、组、其他人对jpeter.net目录只有rx权限

    chmod  –R  u=rx,g=rx,o=rx  peter.net

    Chmod二进制权限

    Linux权限默认使用rwx来表示,为了更简化在系统中对权限进行配置和修改,Linux权限引入二进制表示方法,如下代码:

    Linux权限可以将rwx用二进制来表示,其中有权限用1表示,没有权限用0表示;

    Linux权限用二进制显示如下:

    rwx=111

    r-x=101

    rw-=110

    r--=100

    依次类推,转化为十进制,对应十进制结果显示如下:

    rwx=111=4+2+1=7

    r-x=101=4+0+1=5

    rw-=110=4+4+0=6

    r--=100=4+0+0=4

    得出结论,用r=4,w=2,x=1来表示权限。

    使用二进制方式来修改权限案例演示如下,其中默认peter.nett目录权限为755:

    (1) 授予用户对peter.net目录拥有rwx权限

    chmod  –R  755 peter.net

    (2) 授予组对peter.net目录拥有rwx权限

    chmod  –R  775 peter.net

    (3) 授予用户、组、其他人对peter.net目录拥有rwx权限

    chmod  –R  777  peter.net

    Linux特殊权限及掩码

    Linux权限除了常见的rwx权限之外,还有很多特殊的权限,细心的读者会发现,为什么Linux目录默认权限755,而文件默认权限为644呢,这是因为Linux权限掩码umask导致。

    每个Linux终端都拥有一个umask属性,umask熟悉可以用来确定新建文件、目录的默认权限,默认系统权限掩码为022。在系统中每创建一个文件或者目录,文件默认权限是666,而目录权限则为777,权限对外开放比较大,所以设置了权限掩码之后,默认的文件和目录权限减去umask值才是真实的文件和目录的权限。

     对应目录权限为:777-022=755;

     对应文件权限为:666-022=644;

     执行umask命令可以查看当前默认的掩码,umask -S 023可以设置默认的权限掩码。

    在Linux权限中,除了普通权限外,还有如下表5-2所示,三个特殊权限:

    权限

    对文件的影响

    对目录的影响

    Suid

    以文件的所属用户身份执行,而非执行文件的用户

     

    sgid

     

    以文件所属组身份去执行

    在该目录中创建任意新文件的所属组与该目录的所属组相同

     

    sticky

     

    对目录拥有写入权限的用户仅可以删除其拥有的文件,无法删除其他用户所拥有的文件

    表5-2 Linux三种特殊权限

    Linux中设置特殊权限方法如下:

    q 设置suid: chmod u+s peter.net

    q 设置sgid: chmod g+s peter.net

    q 设置sticky: chmod o+t peter.net

    特殊权限与设置普通权限一样,可以使用数字方式表示:

     SUID    = 4

     SGID    = 2

     Sticky = 1

    可以通过chmod 4755 peter.net对该目录授予特殊权限为s的权限,Linux系统中s权限的应用常见包括:su、passwd、sudo,

    1、[xnlay@bogon ~]$含义:xnlay代表当前用户,bogon指的是主机名,~表示当前用户,$表示普通用户;[root@bogon ~]#root代表是超级用户,在#下输入命令。


    2、输入命令: su -,此时输入当前用户的密码(root用户没有修改过密码,那么就是当前用户的密码)。


    3、输入密码不正确,提示incorrect password ;密码输入正确,成功切换到root用户。


    4、输入命令sudo passwd root,修改root用户密码,此时提示密码设置太简单,需要重新设置。


    5、root用户切换成普通用户,输入命令:su - xnlay


    6、要重新切换回root用户,输入命令:exit,直接切换回root用户,不用再输入密码。

    本章小结

    通过对本章内容的介绍,读者可以了解Linux用户和组的系统知识,同时账号Linux用户和组在系统中各种案例操作。读者可以熟练新建用户、删除用户、修改用户属性、添加组、修改组以及删除组。

    原文链接:https://www.cnblogs.com/fengdejiyixx/p/10773731.html

    Keep moving forwards~
  • 相关阅读:
    Unity 自定义日志保存
    一万字详解 Redis Cluster Gossip 协议
    第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛非官方题解
    数组小游戏---火把萤石
    11个编程接单的网站,你有技术就有收入,有收入就有女朋友《男盆友》
    逆向工程,调试Hello World !程序(更新中)
    魔改一波合成大西瓜!代码已开源~
    如何使用C++做个简单推箱子游戏
    第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛非官方题解
    zookeeper应用
  • 原文地址:https://www.cnblogs.com/-X-peng/p/15025733.html
Copyright © 2020-2023  润新知