zoukankan      html  css  js  c++  java
  • Linux账号管理

    一、用户标识符:UID与GID

    每个登录用户至少都会取得两个ID,一个是用户ID(UserID,UID),一个是用户组ID(GroupID,GID)。

    每个文件都会有所有者ID与用户组ID,当显示文件属性时,系统会依据/etc/passwd与/etc/group的内容,找到UID和GID对应的账号与组名显示出来。UID与账号是一一对应的。

     

    二、用户账号

    跟用户账号有关的两个文件包括/etc/passwd和/etc/shadow,具体如下:

    1./etc/passwd文件结构:此文件每一行代表一个账号

    查看/etc/passwd文件的属性,文件的权限为root用户可以读写,其它用户为只读:

    [root@hs-uf21 ~]# ll /etc/passwd

    -rw-r--r--  1 root root 2767 Apr 21 21:00 /etc/passwd

    查看/etc/passwd文件内容,共有7个字段,每个字段使用分号“:”隔开,分别是:

    [root@hs-uf21 ~]# head /etc/passwd

    root : x : 0 : 0 : root : /root : /bin/bash

    [ 1 ] [2] [3] [4] [  5 ] [ 6  ] [    7   ]

    ......

    [1]:账号名称

    [2]:密码

    [3]:UID

    [4]:GID

    [5]:用户信息说明

    [6]:主文件夹

    [7]:Shell

     

    2./etc/shadow文件结构:

    查看/etc/shadow文件的属性,文件的权限为root使用只读:

    [root@hs-uf21 ~]# ll /etc/shadow

    -r--------  1 root root 1684 Apr 10 21:28 /etc/shadow

    查看/etc/shadow文件的内容,共有9个字段,每个字段使用分号“:”隔开,分别是:

    [root@hs-uf21 ~]# head /etc/shadow

    root:$1$yI2Xb6os$9C5hnN3POy6sdl0TY8FZv.:15805:0:99999:7:::

    ......

    [1]:账号名称

    [2]:密码

    [3]:最近更新密码的日期

    [4]:密码不可以被更改的天数

    [5]:密码需要重新更改的天数

    [6]:密码需要更改期限前的警告天数

    [7]:密码过期后的账号宽限时间(密码失效日)

    [8]:账号失效日期

    [9]:系统保留

     

    三、用户组

    跟用户组相关的两文件包括/etc/group和/etc/gshadow,具体如下:

    1./etc/group的文件结构:

    查看/etc/group文件的内容:共4个字段,每个字段使用分号“:”隔开,分别是:

    [root@hs-uf21 etc]# head -n 2 group

    root:x:0:root

    bin:x:1:root,bin,daemon

    [1]:用户组名

    [2]:用户组密码

    [3]:GID

    [4]:此用户组支持的账号,可以有多个账号同属于一个组

     

    查看oracle用户信息与用户组信息

    [root@hs-uf21 ~]# grep oracle /etc/passwd /etc/group/etc/gshadow

    /etc/passwd:oracle:x:501:502::/home/oracle:/bin/bash

    /etc/group:dba:x:501:oracle

     

    有效用户组与初始用户组

    使用groups命令查看oracle用户支持的用户组,第一个显示的用户组为有效用户组:

    [oracle@hs-uf21 ~]$ groups

    oinstall dba

    改变oracle用户的有效用户组,使用newgrp命令:

    [oracle@hs-uf21 ~]$ newgrpdba

    [oracle@hs-uf21 ~]$ groups

    dba oinstall

     

    用户新创建文件的所属组名为当前有效用户组:

    [oracle@hs-uf21 ~]$ touch test.txt

    [oracle@hs-uf21 ~]$ ll

    -rw-r--r--  1oracle dba              0 Apr 21 21:40 test.txt

     

    2./etc/gshadow的文件结构:

    查看/etc/gshadow的内容:共4个字段,每个字段使用分号“:”隔开,分别是:

    [root@hs-uf21 etc]# head -n 2 gshadow

    root:::root

    bin:::root,bin,daemon

    [1]:用户组名

    [2]:用户组密码

    [3]:用户组管理员有账号

    [4]:该用户组的所属账号(与/etc/group相同)

     

     

    四、账号管理

    1.新增用户useradd:

    语法:useradd [-u UID] [-g 初始用户组] [-G 次要用户组] [-mM][-c 用户说明] [-d 用户主文件夹(绝对路径)] [-s shell] 用户账号

    参数:

        [-u]:后面接UID,是一组数字,直接指定一个待定的UID给这个账号

        [-g]:后面接用户初始用户组名initialgroup

        [-G]:后面接次要组名,即此账号还可以加入的组名

        [-m]:强制!要创建用户主文件夹(普通账号默认)

        [-M]:强制!不要创建用户主文件夹(系统账号默认)

        [-c]:

        [-d]:指定某个目录为用户的主文件夹,而不使用默认值,必需使用绝对路径

        [-r]:创建一个系统账号,这个账号的UID会有限制(参考/etc/login.defs)

        [-s]:后面接shell,若没有指定刚默认是/bin/bash

        [-e]:后面接一个日期,设置此账号的失效日,格式为“YYYY-MM-DD”此项会写入shadow的第八个字段

        [-f]:后面接shadow的第七个字段,指定密码是否会失效,0为立刻失效,-1为永远不失效

        [-D]:查看useradd命令的默认值

       

    查看useradd命令的默认值:

    [root@hs-uf21 etc]# useradd -D

    GROUP=100

    HOME=/home

    INACTIVE=-1

    EXPIRE=

    SHELL=/bin/bash

    SKEL=/etc/skel

     

    新用户user1(使用系统默认参数):

    [root@hs-uf21 etc]# useradd user1

    [root@hs-uf21 etc]# grep user1 passwd shadow groupgshadow

    passwd:user1:x:502:503::/home/user1:/bin/bash

    shadow:user1:!!:15817:0:99999:7:::

    group:user1:x:503:

    gshadow:user1:!::

    给用户user1设置密码:

    [root@hs-uf21 etc]# passwd user1

    Changing password for user user1.

    New UNIX password:

    BAD PASSWORD: it is too short

    Retype new UNIX password:

    passwd: all authentication tokens updatedsuccessfully.

    查看user1用户的主文件夹:默认权限是700

    [root@hs-uf21 etc]# ll -d /home/user1

    drwx------  4user1 user1 4096 Apr 22 21:27 /home/user1

     

    注意:使用root用户设置其它用户的密码

    说明:创建普通用户时,UID默认是大于500的,并且会新建一个跟用户名相同的用户组做为此用户的初始用户组

     

     

    新用户user2,并指定UID为114,指定初始用户组为users,强制不创建主文件夹:

    [root@hs-uf21 etc]# useradd -u 114 -g users -M user2

    [root@hs-uf21 etc]# ll -d /home/user2

    ls: /home/user2: No such file or directory

    [root@hs-uf21 etc]# grep user2 passwd shadow group

    passwd:user2:x:114:100::/home/user2:/bin/bash

    shadow:user2:!!:15817:0:99999:7:::

     

    注意:指定初始用户组后,group文件中没有user2的相关信息

     

    使用-r参数创建一个系统账号:

    [root@hs-uf21 etc]# useradd -r user3

    [root@hs-uf21 etc]# ll -d /home/user3

    ls: /home/user3: No such file or directory

    [root@hs-uf21 etc]# grep user3 passwd shadow group

    passwd:user3:x:115:115::/home/user3:/bin/bash

    shadow:user3:!!:15817::::::

    group:user3:x:115:

     

    注意:默认创建系统账号的UID是小于500的,并且没有创建用户主文件夹,同时新创建跟用户同名的用户组做为此用户的初始用户组

     

    创建新用户涉及的文件:

    用户账号与密码参数方面的文件:/etc/passwd、/etc/shadow

    用户组相关方面的文件:/etc/group 、/etc/gshadow

    用户主文件夹:/home/账号名称

     

    useradd参考文件:/etc/default/useradd(也可以使用命令useradd -D查看)

    [root@hs-uf21 etc]# cat /etc/default/useradd

    # useradd defaults file

    GROUP=100                   <<==默认用户组

    HOME=/home           <<==默认主文件夹所有目录

    INACTIVE=-1          <<==密码失效日

    EXPIRE=              <<==账号失效日

    SHELL=/bin/bash          <<==默认shell

    SKEL=/etc/skel           <<==指定用户主文件夹的参考基准目录

     

    UID/GID及密码参数的参考文件:/etc/login.defs

    [root@hs-uf21 etc]# cat /etc/login.defs

    MAIL_DIR       /var/spool/mail   <<==用户默认邮件信箱放置目录

    PASS_MAX_DAYS   99999       <<==/etc/shadow内的第5列,设置多久需要更改密码的天数

    PASS_MIN_DAYS   0       <<==/etc/shadow内的第4列,设置多久不可重新设置密码的天数

    PASS_MIN_LEN    5       <<==密码最短的字符长度,已经被pam模式替代失去效用

    PASS_WARN_AGE   7       <<==/etc/shadow内的第6列,设置密码过期前的警告天数

    UID_MIN        500     <<==用户最小的UID,小于500的UID为系统保留

    UID_MAX        60000       <<==用户最大的UID

    GID_MIN        500     <<==用户自定义组的最小GID,小于500的为系统保留

    GID_MAX        60000       <<==用户自定义组的最大GID

    CREATE_HOME    yes     <<==在不加-M及-m时,是否主动创建用户主文件夹

     

    2.用户设置密码:passwd/chage

    passwd:

    语法:passwd[--stdin][-l][-u][-S][-n 日数][-x 日数][-w日数][-i 日期] 账号

    参数:

        [--stdin]:

        [-l]:Lock的意思,会将/etc/shadow第二列最前面加上“!”使用密码失效

        [-u]:与-l是相对的,Unlock的意思

        [-S]:列出密码的相关参数,即shadow文件内的大部分信息

        [-n]:后面接天数,修改shadow文件的第4列,多久不可以修改密码的天数

        [-x]:后面接天数,修改shadow文件的第5列,多久必需要改动密码的天数

        [-w]:后面接天数,修改shadow文件的第6列,密码过期前的警告天数

        [-i]:后面接日期,修改shadow文件的第7列,密码失效日期

     

    修改oracle用户的密码:

    [root@hs-uf21 ~]# passwdoracle

    Changing password for user oracle.

    New UNIX password:

    BAD PASSWORD: it is based on a dictionary word

    Retype new UNIX password:

    passwd: all authentication tokens updatedsuccessfully.

     

    注意:要修改其它用户的密码,需要使用passwd 账号的格式,passwd后面不接用户表示修改自己的密码。但一般用户修改自己的密码时,需要先输入自己的原密码,而root用户不用。Linux使用pam模式来管理密码,这个管理的机制写在/etc/pam.d/passwd当中。

     

    使用标准输入修改用户的密码:

    [root@hs-uf21 ~]# echo "oracle" | passwd --stdin oracle

    Changing password for user oracle.

    passwd: all authentication tokens updated successfully.

     

    注意:使用--stdin修改用户密码时,不需要再次输入密码。但是修改信息会被记录到history中。

     

    chage:change user password expiry information

    语法:chage [-ldEImMW] 账号

    参数:

        [-l]:列出该账号的详细密码参数。

        [-d]:后面接日期,修改shadow文件的第3列(最近一次更改密码的日期),格式“YYYY-MM-DD”。

        [-E]:后面接日期,修改shadow文件的第8列(账号失效日期),格式“YYYY-MM-DD”。

        [-I]:后面接天数,修改shadow文件的第7列,密码失效日期

        [-m]:后面接天数,修改shadow文件的第4列,多久不可以修改密码的天数

        [-M]:后面接天数,修改shadow文件的第5列,多久必需要改动密码的天数

        [-W]:后面接天数,修改shadow文件的第6列,密码过期前的警告天数

     

    查看oracle用户的密码信息:

    [root@hs-uf21 ~]# chage -l oracle

    Minimum:       0

    Maximum:       99999

    Warning:       7

    Inactive:      -1

    Last Change:           Apr 24, 2013

    Password Expires:      Never

    Password Inactive:     Never

    Account Expires:       Never

     

    3.usermod:

    语法:usermod[-cdegGlsuLu] username

    说明:usermod的参数基本要useradd相同。

     

    4.userdel:

    语法:userdel[-r] username

    参数:

        [-r]:连同用户的主文件夹也删除

     

    删除user3用户及其主文件夹:

    [root@hs-uf21 ~]# userdel -r user3

    userdel: error removing directory /home/user3

    [root@hs-uf21 ~]# ll -a /home/user3

    ls: /home/user3: No such file or directory

     

    5.id命令:查看用户的或者自己相关的UID/GID等信息

    语法:id[username]

     

    查看oracle用户的UID/GID等信息:

    [root@hs-uf21 ~]# id oracle

    uid=501(oracle) gid=502(oinstall)groups=502(oinstall),501(dba)

     

    查看当前用户的UID/GID等信息:

    [root@hs-uf21 ~]# id

    uid=0(root) gid=0(root)groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

    You have new mail in /var/spool/mail/root

     

     

    五、用户身份切换

     

    1.su命令

    语法:su [-lm] [-c 命令] [username]

    参数:

        [- ]:单纯使用- 表示使用login-shell的变量文件读取式来登录系统,如果没有用户名,则表示切换为root身份。

        [-l]:与 - 类似,但后面需要接欲切换的用户账号,也是login-shell的方式

        [-m]:表示使用目前的环境设置,而不读取新用户的配置文件

        [-c]:仅进行一次命令,后面接需要执行的命令

     

    注意:若要完整地切换到新用户的变量,必须使用“us - username”或者“su -l username”的方式,并且使用root切换成为任何用户时,并不需要输入新用户名。

     

    2.sudo命令

    sudo可以以其它用户的身份执行命令(通常是使用root的身份来执行命令),但并非所有人都能够执行sudo,仅有/etc/sudoers内的用户才能执行sudo命令。

    语法:sudo [-b] [-u 新用户账号]

    参数:

        [-b]:将后面的命令让系统自行执行,而不与目前的shell产生影响

        [-u]:后面可以接欲切换的用户,若无此项则代表切换身份为root

     

    root用户使用sudo命令以user1的身份在/home/user1/下面创建的test.txt文件所属用户为user1:

    [root@hs-uf21 ~]# sudo -u user1 touch/home/user1/test.txt

    [root@hs-uf21 ~]# ll -a /home/user1/test.txt

    -rw-r--r--  1 user1 user1 0 Apr 23 22:29 /home/user1/test.txt

     

    3.visudo/etc/sudoers

    若想要除了root之外的其他账号使用sudo命令执行属于root的权限命令,则root需要先使用visudo去修改/etc/sudoers文件,让该账号能够使用全部或部分的root的命令功能。也可以直接使用vi或者vim编辑,但sudoers文件有自己的语法结构,如果设置错误会导致sudo命令无法使用。

     

    系统默认只有root用户才可以执行sudo命令:

    [oracle@hs-uf21 ~]$ sudo -u user1 touch/home/user1/test.txt

    Password:

    oracle is not in the sudoers file.  This incident will be reported.

     

    使用visudo命令修改/etc/sudoers文件,使oracle使用可以使用sudo执行root用户的全部命令:

    [root@hs-uf21 ~]# visudo

    # sudoers file.

    root   ALL=(ALL) ALL

    oracle ALL=(ALL) ALL   <<==增加此行

    [root@hs-uf21 ~]# su - oracle

    [oracle@hs-uf21 ~]$ sudo -u user1 touch/home/user1/test2.txt

    [oracle@hs-uf21 ~]$ sudo ls -al /home/user1/test2.txt

    -rw-r--r--  1 user1 user1 0 Apr 23 22:43 /home/user1/test2.txt

     

    说明:

        root                       ALL=(ALL)           ALL

        [用户账号][登录者的来源主机名][(可切换的身份)][可执行的命令]

        [用户账号]:系统的那个账号可以使用sudo命令,默认账号只有root。

        [登录者的来源主机名]:这个账号由那台主机连接到本Linux主机,默认root可以来自任何一台网络主机。

        [(可切换的身份)]:这个账号可以切换成什么身份来执行后续的命令,默认root可以切换成使用用户。

        [可执行的命令]:这个命令必须使用绝对路径,默认root可以切换任何身份,且执行任何命令。

     

    用oracle用户查看/etc/shadow文件会提示没有权限,但使用sudo可以查看:

    [oracle@hs-uf21 ~]$ head -n 10 /etc/shadow

    head: cannot open `/etc/shadow' for reading:Permission denied

    [oracle@hs-uf21 ~]$ sudo head -n 10 /etc/shadow

    Password:

    root:$1$yI2Xb6os$9C5hnN3POy6sdl0TY8FZv.:15805:0:99999:7:::

    .........

     

    利用用户组以及免密码的功能处理visudo:

    [root@hs-uf21 ~]# visudo

    # sudoers file.

    # %wheel       ALL=(ALL)       ALL

    %user1       ALL=(ALL)       ALL   <<==增加此行,使用用户组可以使用用户组user1下面的用户可以使用sudo命令

     

    [user1@hs-uf21 ~]$ head /etc/shadow

    head: cannot open `/etc/shadow' for reading:Permission denied

    [user1@hs-uf21 ~]$ sudo head /etc/shadow

    Password:

    root:$1$yI2Xb6os$9C5hnN3POy6sdl0TY8FZv.:15805:0:99999:7:::

    bin:*:15805:0:99999:7:::

     

    使用visudo编辑/etc/sudoers文件,可以让用户免输出密码执行sudo命令:

    [root@hs-uf21 ~]# visudo

    # sudoers file.

    # %wheel       ALL=(ALL)       NOPASSWD: ALL

    %user1       ALL=(ALL)       NOPASSWD: ALL

    [root@hs-uf21 ~]# su user1

    [user1@hs-uf21 root]$ sudo head /etc/shadow

    root:$1$yI2Xb6os$9C5hnN3POy6sdl0TY8FZv.:15805:0:99999:7:::

    注意:本次使用sudo执行命令没有输入密码。

     

    有限制的操作命令:

     

    [root@hs-uf21 ~]# visudo

    # User privilege specification

    root   ALL=(ALL) ALL

    oracle ALL=(ALL) ALL

    adminpwd ALL=(root) /usr/bin/passwd

    [adminpwd@hs-uf21 ~]$ sudo passwd user1

    Changing password for user user1.

    New UNIX password:

    BAD PASSWORD: it is based on a dictionary word

    Retype new UNIX password:

    passwd: all authentication tokens updatedsuccessfully.

    只执行sudopasswd时提示更改root用户的密码:

    [adminpwd@hs-uf21 ~]$ sudo passwd

    Changing password for user root.

    New UNIX password:

     

    使用visudo命令修改/etc/sudoers文件,全adminpwd用户只能使用除了root的之外的其它用户的密码:

    [root@hs-uf21 ~]# visudo

    # User privilege specification

    root   ALL=(ALL) ALL

    oracle ALL=(ALL) ALL

    #adminpwd ALL=(root) /usr/bin/passwd <<==此行更改为下面的写法

    adminpwd ALL=(root) !/usr/bin/passwd,!/usr/bin/passwdroot,/usr/bin/passwd [A-Za-z]*

    [root@hs-uf21 ~]# su - adminpwd

    [adminpwd@hs-uf21 ~]$ sudo passwd

    Sorry, user adminpwd is not allowed to execute'/usr/bin/passwd' as root on hs-uf21.

     

    通过别名设置visudo:

    [root@hs-uf21 ~]# visudo

    # sudoers file.

    # User alias specification

    User_Alias ADMINPWD = oracle, adminpwd,user1

    # Cmnd alias specification

    Cmnd_Alias ADMINCMD =!/usr/bin/passwd,!/usr/bin/passwd root,/usr/bin/passwd [A-Za-z]*

    # User privilege specification

    root   ALL=(ALL) ALL

    #oracle ALL=(ALL) ALL

    #adminpwd ALL=(root) !/usr/bin/passwd,!/usr/bin/passwdroot,/usr/bin/passwd [A-Za-z]*

    ADMINPWD ALL=(root) ADMINCMD

     

     

    [root@hs-uf21 ~]# su oracle

    [oracle@hs-uf21 root]$ sudo head /etc/shadow

    Password:

    Sorry, user oracle is not allowed to execute'/usr/bin/head /etc/shadow' as root on hs-uf21.

    [oracle@hs-uf21 root]$ sudo passwd

    Sorry, user oracle is not allowed to execute'/usr/bin/passwd' as root on hs-uf21.

    [oracle@hs-uf21 root]$ sudo passwd user3

    Changing password for user user3.

    New UNIX password:

    BAD PASSWORD: it is based on a dictionary word

    Retype new UNIX password:

    passwd: all authentication tokens updatedsuccessfully.

     

    注意:User_Alias,Cmnd_Alias,Host_Alias的名称一定要使用大写。


  • 相关阅读:
    CSS3 3D的总结(初学者易懂)
    BAT面试算法精品课直通BAT面试算法精品课购买优惠码-牛客网
    深度学习UFLDL老教程笔记1 稀疏自编码器Ⅱ
    深度学习UFLDL老教程笔记1 稀疏自编码器Ⅰ
    算法分析之函数渐近分析
    调用WebServices报错,请求“System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”类型的权限已失败。
    很久之前写的 ,突然想放上去
    ASP.NET Core – Web API 冷知识
    ASP.NET Core C# 反射 & 表达式树 (第三篇)
    ASP.NET Core C# 反射 & 表达式树 (第二篇)
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3041080.html
Copyright © 2011-2022 走看看