zoukankan      html  css  js  c++  java
  • Linux 用户管理命令

    1.新建用户
     
    • useradd
    [root@www ~]# useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM]
    >  [-c 说明栏] [-d 家目录绝对路径] [-s shell]  用户账号名
    选项与参数:
    -u  :后面接的是 UID ,是一组数字。直接指定一个特定的 UID 给这个账号;
    -g  :后面接的那个组名就是我们上面提到的 initial group 啦~
          该群组的 GID 会被放置到 /etc/passwd 的第四个字段内。
    -G  :后面接的组名则是这个账号还可以加入的群组。
          这个选项与参数会修改 /etc/group 内的相关数据喔!
    -M  :强制!不要创建用户家目录!(系统账号默认值)
    -m  :强制!要创建用户家目录!(一般账号默认值)
    -c  :这个就是 /etc/passwd 的第五栏的说明内容啦~可以随便我们配置的啦~
    -d  :指定某个目录成为家目录,而不要使用默认值。务必使用绝对路径!
    -r  :创建一个系统的账号,这个账号的 UID 会有限制 (参考 /etc/login.defs)
    -s  :后面接一个 shell ,若没有指定则默认是 /bin/bash 的啦~
    -e  :后面接一个日期,格式为『YYYY-MM-DD』此项目可写入 shadow 第八字段,
          亦即账号失效日的配置项目啰;
    -f  :后面接 shadow 的第七字段项目,指定口令是否会失效。0为立刻失效,
          -1 为永远不失效(口令只会过期而强制于登陆时重新配置而已。)
    
    范例一:完全参考默认值创建一个用户,名称为 vbird1
    [root@www ~]# useradd vbird1
    [root@www ~]# ll -d /home/vbird1
    drwx------ 4 vbird1 vbird1 4096 Feb 25 09:38 /home/vbird1
    # 默认会创建用户家目录,且权限为 700 !这是重点!
    
    [root@www ~]# grep vbird1 /etc/passwd /etc/shadow /etc/group
    /etc/passwd:vbird1:x:504:505::/home/vbird1:/bin/bash
    /etc/shadow:vbird1:!!:14300:0:99999:7:::
    /etc/group:vbird1:x:505:    <==默认会创建一个与账号一模一样的群组名
    • passwd

    刚刚我们讲到了,使用 useradd 创建了账号之后,在默认的情况下,该账号是暂时被封锁的, 也就是说,该账号是无法登陆的,你可以去瞧一瞧 /etc/shadow 内的第二个字段就晓得啰~ 那该如何是好?直接给他配置新口令就好了嘛!对吧~配置口令就使用 passwd !

    [root@www ~]# passwd [--stdin]  <==所有人均可使用来改自己的口令
    [root@www ~]# passwd [-l] [-u] [--stdin] [-S] 
    >  [-n 日数] [-x 日数] [-w 日数] [-i 日期] 账号 <==root 功能
    选项与参数:
    --stdin :可以透过来自前一个管线的数据,作为口令输入,对 shell script 有帮助!
    -l  :是 Lock 的意思,会将 /etc/shadow 第二栏最前面加上 ! 使口令失效;
    -u  :与 -l 相对,是 Unlock 的意思!
    -S  :列出口令相关参数,亦即 shadow 文件内的大部分信息。
    -n  :后面接天数,shadow 的第 4 字段,多久不可修改口令天数
    -x  :后面接天数,shadow 的第 5 字段,多久内必须要更动口令
    -w  :后面接天数,shadow 的第 6 字段,口令过期前的警告天数
    -i  :后面接『日期』,shadow 的第 7 字段,口令失效日期
    
    范例一:请 root 给予 vbird2 口令
    [root@www ~]# passwd vbird2
    Changing password for user vbird2.
    New UNIX password: <==这里直接输入新的口令,屏幕不会有任何反应
    BAD PASSWORD: it is WAY too short <==口令太简单或过短的错误!
    Retype new UNIX password:  <==再输入一次同样的口令
    passwd: all authentication tokens updated successfully.  <==竟然还是成功修改了!
    
     
     
    一些常用命令……
    2.禁止用户登录
       新增一个用户,只允许其使用ftp登录,不允许使用工具shell远程登录
        useradd -s /sbin/nologin 用户名

    2.1更改用户登录后的目录(用户主目录
    第一种方法:vi /etc/passwd

    找到要修改的用户那几行,修改掉即可。此法很暴力,建议慎用。
    /etc/passwd文件格式
    登录名:加密口令:数字用户ID:数字组ID:注释字段:起始目录:shell程序
    用此方法修改了用户宿主目录后,会出现某些异常,如:bash环境异常,需要将用户原宿主目录下的隐藏文件拷贝到更改后的宿主目录即可
    cp /原宿主目录/.* /目标目录

    第二种:usermod
     usermod -d /usr/newfolder -u uid 用户账号
      -u后面一定要接uid啊,不是username

     
     
    3.删除用户
    • userdel

    这个功能就太简单了,目的在删除用户的相关数据,而用户的数据有:

    • 用户账号/口令相关参数:/etc/passwd, /etc/shadow
    • 使用者群组相关参数:/etc/group, /etc/gshadow
    • 用户个人文件数据: /home/username, /var/spool/mail/username..

    整个命令的语法非常简单:

    [root@www ~]# userdel [-r] username
    选项与参数:
    -r  :连同用户的家目录也一起删除
    
    范例一:删除 vbird2 ,连同家目录一起删除
    [root@www ~]# userdel -r vbird2
    

            这个命令下达的时候要小心了!通常我们要移除一个账号的时候,你可以手动的将 /etc/passwd 与 /etc/shadow 里头的该账号取消即可!一般而言,如果该账号只是『暂时不激活』的话,那么将 /etc/shadow 里头账号失效日期 (第八字段) 配置为 0 就可以让该账号无法使用,但是所有跟该账号相关的数据都会留下来! 使用 userdel 的时机通常是『你真的确定不要让该用户在主机上面使用任何数据了!』

            另外,其实用户如果在系统上面操作过一阵子了,那么该用户其实在系统内可能会含有其他文件的。 举例来说,他的邮件信箱 (mailbox) 或者是例行性工作排程 (crontab, 十六章) 之类的文件。 所以,如果想要完整的将某个账号完整的移除,最好可以在下达 userdel -r username 之前, 先以『 find / -user username 』查出整个系统内属于 username 的文件,然后再加以删除吧!

     
     
     
     
     
    用户相关文件:
    使用者标识符: UID 与 GID
             虽然我们登陆 Linux 主机的时候,输入的是我们的账号,但是其实 Linux 主机并不会直接认识你的『账号名称』的,他仅认识 ID 啊 (ID 就是一组号码啦)。 由于计算机仅认识 0 与 1,所以主机对于数字比较有概念的;至于账号只是为了让人们容易记忆而已。 而你的 ID 与账号的对应就在 /etc/passwd 当中。
    • /etc/passwd 文件结构

    这个文件的构造是这样的:每一行都代表一个账号,有几行就代表有几个账号在你的系统中! 不过需要特别留意的是,里头很多账号本来就是系统正常运行所必须要的,我们可以简称他为系统账号, 例如 bin, daemon, adm, nobody 等等,这些账号请不要随意的杀掉他呢! 这个文件的内容有点像这样:

    [root@www ~]# head -n 4 /etc/passwd
    root:x:0:0:root:/root:/bin/bash  <==等一下做为底下说明用
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin

    每一行使用『:』分隔开,共有七个咚咚,分别是:

    1. 账号名称
      就是账号啦!用来对应 UID 的。例如 root 的 UID 对应就是 0 (第三字段);
    2. 口令
      早期 Unix 系统的口令就是放在这字段上!但是因为这个文件的特性是所有的程序都能够读取,这样一来很容易造成口令数据被窃取, 因此后来就将这个字段的口令数据给他改放到 /etc/shadow 中了。所以这里你会看到一个『 x 』,呵呵!
    3. UID
      这个就是使用者标识符啰!通常 Linux 对于 UID 有几个限制需要说给您了解一下:
      id 范围 该 ID 使用者特性
      0
      (系统管理员)
      当 UID 是 0 时,代表这个账号是『系统管理员』! 所以当你要让其他的账号名称也具有 root 的权限时,将该账号的 UID 改为 0 即可。 这也就是说,一部系统上面的系统管理员不见得只有 root 喔! 不过,很不建议有多个账号的 UID 是 0 啦~
      1~499
      (系统账号)
      保留给系统使用的 ID,其实除了 0 之外,其他的 UID 权限与特性并没有不一样。默认 500 以下的数字让给系统作为保留账号只是一个习惯。

      由于系统上面启动的服务希望使用较小的权限去运行,因此不希望使用 root 的身份去运行这些服务, 所以我们就得要提供这些运行中程序的拥有者账号才行。这些系统账号通常是不可登陆的, 所以才会有我们在第十一章提到的 /sbin/nologin 这个特殊的 shell 存在。

      根据系统账号的由来,通常系统账号又约略被区分为两种:
      1~99:由 distributions 自行创建的系统账号;
      100~499:若用户有系统账号需求时,可以使用的账号 UID。
      500~65535
      (可登陆账号)
      给一般使用者用的。事实上,目前的 linux 核心 (2.6.x 版)已经可以支持到 4294967295 (2^32-1) 这么大的 UID 号码喔!
      上面这样说明可以了解了吗?是的, UID 为 0 的时候,就是 root 呦!所以请特别留意一下你的 /etc/passwd 文件!
    4. GID
      这个与 /etc/group 有关!其实 /etc/group 的观念与 /etc/passwd 差不多,只是他是用来规范组名与 GID 的对应而已!
    5. 用户信息说明栏
      这个字段基本上并没有什么重要用途,只是用来解释这个账号的意义而已!不过,如果您提供使用 finger 的功能时, 这个字段可以提供很多的信息呢!本章后面的 chfn 命令会来解释这里的说明。
    6. 家目录
      这是用户的家目录,以上面为例, root 的家目录在 /root ,所以当 root 登陆之后,就会立刻跑到 /root 目录里头啦!呵呵! 如果你有个账号的使用空间特别的大,你想要将该账号的家目录移动到其他的硬盘去该怎么作? 没有错!可以在这个字段进行修改呦!默认的用户家目录在 /home/yourIDname
    7. Shell
      我们在第十一章 BASH 提到很多次,当用户登陆系统后就会取得一个 Shell 来与系统的核心沟通以进行用户的操作任务。那为何默认 shell 会使用 bash 呢?就是在这个字段指定的啰! 这里比较需要注意的是,有一个 shell 可以用来替代成让账号无法取得 shell 环境的登陆动作!那就是 /sbin/nologin 这个东西!这也可以用来制作纯 pop 邮件账号者的数据呢!
     
    • /etc/shadow 文件结构

    我们知道很多程序的运行都与权限有关,而权限与 UID/GID 有关!因此各程序当然需要读取 /etc/passwd 来了解不同账号的权限。 因此 /etc/passwd 的权限需配置为 -rw-r--r-- 这样的情况, 虽然早期的口令也有加密过,但却放置到 /etc/passwd 的第二个字段上!这样一来很容易被有心人士所窃取的, 加密过的口令也能够透过暴力破解法去 try and error (试误) 找出来!

    因为这样的关系,所以后来发展出将口令移动到 /etc/shadow 这个文件分隔开来的技术, 而且还加入很多的口令限制参数在 /etc/shadow 里头呢!在这里,我们先来了解一下这个文件的构造吧! 鸟哥的 /etc/shadow 文件有点像这样:

    [root@www ~]# head -n 4 /etc/shadow
    root:$1$/30QpE5e$y9N/D0bh6rAACBEz.hqo00:14126:0:99999:7:::  <==底下说明用
    bin:*:14126:0:99999:7:::
    daemon:*:14126:0:99999:7:::
    adm:*:14126:0:99999:7:::
    

    基本上, shadow 同样以『:』作为分隔符,如果数一数,会发现共有九个字段啊,这九个字段的用途是这样的:

    1. 账号名称
      由于口令也需要与账号对应啊~因此,这个文件的第一栏就是账号,必须要与 /etc/passwd 相同才行!
    2. 口令
      这个字段内的数据才是真正的口令,而且是经过编码的口令 (加密) 啦! 你只会看到有一些特殊符号的字母就是了!需要特别留意的是,虽然这些加密过的口令很难被解出来, 但是『很难』不等于『不会』,所以,这个文件的默认权限是『-rw-------』或者是『-r--------』,亦即只有 root 才可以读写就是了!你得随时注意,不要不小心更动了这个文件的权限呢!
      另外,由于各种口令编码的技术不一样,因此不同的编码系统会造成这个字段的长度不相同。 举例来说,旧式的 DES 编码系统产生的口令长度就与目前惯用的 MD5 不同(注2)!MD5 的口令长度明显的比较长些。由于固定的编码系统产生的口令长度必须一致,因此『当你让这个字段的长度改变后,该口令就会失效(算不出来)』。 很多软件透过这个功能,在此字段前加上 ! 或 * 改变口令字段长度,就会让口令『暂时失效』了。 
    3. 最近更动口令的日期
      这个字段记录了『更动口令那一天』的日期,不过,很奇怪呀!在我的例子中怎么会是 14126 呢?呵呵,这个是因为计算 Linux 日期的时间是以 1970 年 1 月 1 日作为 1 而累加的日期,1971 年 1 月 1 日则为 366 啦! 得注意一下这个数据呦!上述的 14126 指的就是 2008-09-04 那一天啦!了解乎? 而想要了解该日期可以使用本章后面 chage 命令的帮忙!至于想要知道某个日期的累积日数, 可使用如下的程序计算:
      [root@www ~]# echo $(($(date --date="2008/09/04" +%s)/86400+1))
      14126
      
      上述命令中,2008/09/04 为你想要计算的日期,86400 为每一天的秒数, %s 为 1970/01/01 以来的累积总秒数。 由于 bash 仅支持整数,因此最终需要加上 1 补齐 1970/01/01 当天。
    4. 口令不可被更动的天数:(与第 3 字段相比)
      第四个字段记录了:这个账号的口令在最近一次被更改后需要经过几天才可以再被变更!如果是 0 的话, 表示口令随时可以更动的意思。这的限制是为了怕口令被某些人一改再改而设计的!如果配置为 20 天的话,那么当你配置了口令之后, 20 天之内都无法改变这个口令呦!
    5. 口令需要重新变更的天数:(与第 3 字段相比)
      经常变更口令是个好习惯!为了强制要求用户变更口令,这个字段可以指定在最近一次更改口令后, 在多少天数内需要再次的变更口令才行。你必须要在这个天数内重新配置你的口令,否则这个账号的口令将会『变为过期特性』。 而如果像上面的 99999 (计算为 273 年) 的话,那就表示,呵呵,口令的变更没有强制性之意。
    6. 口令需要变更期限前的警告天数:(与第 5 字段相比)
      当账号的口令有效期限快要到的时候 (第 5 字段),系统会依据这个字段的配置,发出『警告』言论给这个账号,提醒他『再过 n 天你的口令就要过期了,请尽快重新配置你的口令呦!』,如上面的例子,则是口令到期之前的 7 天之内,系统会警告该用户。
    7. 口令过期后的账号宽限时间(口令失效日):(与第 5 字段相比)
      口令有效日期为『升级日期(第3字段)』+『重新变更日期(第5字段)』,过了该期限后用户依旧没有升级口令,那该口令就算过期了。 虽然口令过期但是该账号还是可以用来进行其他工作的,包括登陆系统取得 bash 。不过如果口令过期了, 那当你登陆系统时,系统会强制要求你必须要重新配置口令才能登陆继续使用喔,这就是口令过期特性
      那这个字段的功能是什么呢?是在口令过期几天后,如果使用者还是没有登陆更改口令,那么这个账号的口令将会『失效』, 亦即该账号再也无法使用该口令登陆了。要注意口令过期与口令失效并不相同
    8. 账号失效日期
      这个日期跟第三个字段一样,都是使用 1970 年以来的总日数配置。这个字段表示: 这个账号在此字段规定的日期之后,将无法再使用。 就是所谓的『账号失效』,此时不论你的口令是否有过期,这个『账号』都不能再被使用! 这个字段会被使用通常应该是在『收费服务』的系统中,你可以规定一个日期让该账号不能再使用啦!
    9. 保留
      最后一个字段是保留的,看以后有没有新功能加入。
     
     
     
     

    命 令:usermod

    功能说明:修改用户帐号。

    语  法:usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s <shell>][-u <uid>][用户帐号]

    补充说明:usermod可用来修改用户帐号的各项设定。

    参  数:

     -c<备注>  修改用户帐号的备注文字。
     -d登入目录>  修改用户登入时的目录。
     -e<有效期限>  修改帐号的有效期限。
     -f<缓冲天数>  修改在密码过期后多少天即关闭该帐号。
     -g<群组>  修改用户所属的群组。
     -G<群组>  修改用户所属的附加群组。
     -l<帐号名称>  修改用户帐号名称。
     -L  锁定用户密码,使密码无效。
     -s<shell>  修改用户登入后所使用的shell。
     -u<uid>  修改用户ID。
     -U  解除密码锁定。 
     
    usermod 不 允 许 你 改 变 正 在线 上 的 使 用 者 帐 号 名 称 。 当 usermod 用 来 改 变 user ID, 必 须 确 认 这 名 user 没 在 电 脑 上 执 行 任 何 程 序。 你 需 手 动 更 改 使 用 者 的 crontab 档 。 也 需 手 动 更 改 使 用 者 的 at 工 作 档 。
  • 相关阅读:
    函数声明与函数指针
    【LeetCode】三角形最小路径和
    【LeetCode】字符串中的第一个唯一字符
    【LeetCode】基本计算器II
    【LeetCode】二叉树的最小深度
    【LeetCode】加油站
    java中json与对象的转换
    idea2017 无法使用maven3.6.3版本导入依赖
    springboot项目注册为windows系统服务并设置开机自启
    springmvc上传文件
  • 原文地址:https://www.cnblogs.com/centos2017/p/7896776.html
Copyright © 2011-2022 走看看