Linux账号管理

来源于《鸟哥的linux私房菜》

Linux账号管理

1 账号与用户组

1.1 三个重要文件

1.1.1 /etc/passwd文件结构
$ cat /etc/passwd
root:x:0:0::/root:/bin/zsh
ewen:x:1000:1000:Ewen:/home/ewen:/usr/bin/zsh
  1. 账号名称

    比如root、ewen。

  2. 密码

    早期UNIX系统将密码存储在这个字段上,现在密码存储在/etc/shadow,此字段为x。

  3. UID

    UID范围该ID用户特性
    0(系统管理员)UID为0代表账号为“系统管理员”,但是不建议多个账号的UID都是0。
    1~499(系统账号)1~99:由distributions自行创建的系统账号;
    100~499:用户使用的系统账号需求。
    500~(可登录账号)一般用户
  4. GID

  5. 用户信息说明列

    解释账号意义。

  6. 主文件夹

  7. Shell

1.1.2 /etc/shadow文件结构
$ sudo cat /etc/shadow
root:8vRs/Gc2uuFyyhoGGqA10pi6q1TpC0E6k/s1r2n/cqot/JHPZ...JwLtxviBs1HJ1:17876::::::
ewen:IgGbzoXW.o7pbAOuZkVBk5rY705.NUbE3MNYtsP2QwBm7s7Oe...5AMsf7b:17878:0:99999:7::: 
  1. 账号名称

  2. 密码

    保存加密后的密码,加密后密码长度一致。新建用户密码未设置时,该账号被封锁,不允许登录,此字段为!,可以使用passwd设置密码。

  3. 最近更动密码日期

    以1970年01月01日作为1而累加的日期,比如17876代表的是2018/12/11。

  4. 密码不可被更动的天数(与第3个字段相比)

    此字段表示在最近一次更改密码后必须经过多少天才能再次修改。0表示可以任意修改。

  5. 密码需要重新更改的天数(与第3个字段相比)

    指定在最近一次更改密码后的多少天内必须再次更改密码,否则这个账号密码将变为过期特性。99999(273年)表示密码的更改没有强制性。第三个字段+第五个字段为密码有效日期,过了期限就是过期。过期后登录系统将强制设置密码。

  6. 密码需要更改限期前的警告天数(与第5个字段相比)

    当密码有效期限快要到时,系统将根据这个字段的设置发出“警告”,提醒再过多少天密码将要过期。

  7. 密码过期后的账号宽限时间(与第5个字段相比)

    密码过期后在多少天内还没有登录修改密码,那么这个账号的密码将“失效”,再也无法使用该密码登录。0表示立即失效,-1表示永远不失效(密码只会过期而强制于登录时重新设置)。

  8. 账号失效日期

    此账号在此字段规定的日期之后,将无法再使用。

  9. 保留

1.1.3 /etc/group文件结构
$ head -n 1 /etc/group
root:x:0:root,ewen
  1. 用户组名称

  2. 用户组密码

    设置用户组管理员使用的密码,一般没有机会使用。密码已经迁移至/etc/gshadow,此字段只存在x。

  3. GID

  4. 此用户组支持的账号名称

    某个账号想要加入此用户组,将账号填入这个字段即可,如root,ewen。

1.1.4 密码忘记了
  1. 一般用户密码忘记了

    登录root用户使用passwd命令修改密码。

  2. root用户密码忘记了

    1. 重新启动进入用户维护模式,此时系统将主动给予root权限的bash接口,使用passwd命令修改密码;
    2. 或者使用Live CD开机,挂载根目录去修改/etc/shadow,将root的密码清空,再重新启动不需要输入root密码即可登录root,登录后赶快以passwd命令设置root密码。

1.2 有效与初始用户组

/etc/passwd内的第4列就是初始用户组,当用户登录系统时,立刻用户这个用户组的相关权限。

$ cat /etc/group | grep ewen
wheel:x:998:ewen	# 次要用户组
lp:x:991:cups,ewen	# 次要用户组
sys:x:3:bin,ewen	# 次要用户组
network:x:90:ewen	# 次要用户组
power:x:98:ewen		# 次要用户组
ewen:x:1000:		# 初始用户组,所以第4个字段不用填入
  • groups:查看当前用户支持的用户组

    $ groups
    ewen # 第一个输出的用户组就是有效用户组
    
  • cxinshezhinewgrp:有效用户组的切换

    $ newgrp testewen
    $ groups
    testewen ewen
    

    以一个shell来提供目前用户的有效用户组的环境。

2 账号管理

2.1 新增、管理、删除用户

  • useradd

    $ sudo useradd -m -u 2001 -U love

    1. -b, --base-dir BASE_DIR

      没有指定-d HOME_DIR,那么使用默认的base目录。

      若未指定,则默认使用/etc/default/useradd中的HOME变量或/home。

      $ sudo useradd -b /home/vsftp -m -u 2000 -U zhangyou
      # 允许随意指定base目录,但必须有权限让新建用户访问主文件夹
      # 新建love,但无法访问主文件夹
      $ sudo useradd -b /home/ewen/Document -m -u 2001 -U love
      $ sudo su love
      EwenPC% cd
      cd: permission denied: /home/ewen/Document/love
      EwenPC% cd
      cd: permission denied: /home/ewen/Document/love
      EwenPC% echo $HOME
      /home/ewen/Document/love
      
    2. -d,--home-dir HOME_DIR

      新用户将使用HOME_DIR作为用户登录的主文件夹。

      默认为登录名添加到BASE_DIR变量之后,并作为主文件夹。

    3. -e, --expiredate EXPIRE_DATE

      设置账号的失效日期,格式为“YYYY-MM-DD”。

      若未指定,useradd命令将使用/etc/default/useradd中的EXPIRE变量指定的日期,否则默认不失效。

    4. -f, --inactive INACTIVE

      指定密码是否会失效。0表示立即失效,-1表示永远不失效(密码只会过期而强制于登录时重新设置)。

      若未指定,useradd命令将使用/etc/default/useradd中的INACTIVE变量,否则默认值-1。

    5. -g,--gid GROUP

      指定某个存在的用户组为初始用户组。

      若未指定,useradd命令将的行为取决于/etc/login.def文件中的USERGROUP_ENAB变量。

      1. 若USERGROUP_ENAB值为yes(或指定-U/–user-group),将创建一个与用户名相同的用户组。
      2. 若USERGROUP_ENAB值为no(或指定-N/–no-user-group),则设置/etc/default/useradd中的GROUP变量为初始用户组,否则默认为100。
    6. -G,--groups GROUP1[,GROUP2,…[,GROUPN]]

      设置次要用户组列表。

    7. -k, --skel SKEL_DIR

      指定SKEL_DIR目录为骨架目录。当-m或–create-home选项被指定时,此选项才有效。

      若未设置,骨架目录在/etc/default/useradd文件中定义,否则默认为/etc/skel。

    8. -K, --key KEY=VALUE

      指定UID_MIN,UID_MAX,UMASK,PASS_MAX_DAYS键值对。

      多次使用如,-K UID_MIN=100 -K UID_MAX=499。

    9. -m,--create-home

      强制!要创建用户主文件夹!如果此选项未指定以及CREATE_HOME未生效,默认不生成用户主文件夹。

    10. -M,--no-create-home

      强制!不要创建用户主文件夹!即使/etc/login.defs文件中的CREATE_HOME设置了yes。

    11. -N, --no-user-group

      不创建同名用户组,指定初始用户组为-g选项或GROUP变量。

    12. -r, --system

      创建系统账号。除非指定-m选项,否则useradd命令将忽略CREATE_HOME变量不再创建用户主文件夹。

    13. -s,--shell SHELL

      指定默认登录shell,默认使用/etc/default/useradd文件中的SHELL变量。

    14. -u, --uid UID

      指定UID给新增用户。

    15. -U,--user-group

      新建同名用户组,并将用户加入该用户组。

  • passwd [-l] [-u] [--stdin] [-S] [-n MIN_DAYS] [-x MAX_DAYS] [-w WARN_DAYS][-i INACTIVE] username

    1. -d, --delete

      清空密码。不允许直接清空当前账号密码,必须使用root权限sudo passwd -d username

    2. -e, --expire

      使密码过期,强制用户下次登录时修改密码。

    3. -i, --inactive INACTIVE

      设置密码过期后的宽限天数。

    4. -l, --lock

      锁住密码,在/etc/shadow文件的第二个字段前加!。

    5. -n, --mindays MIN_DAYS

      设置多少天内都不允许修改密码。

    6. -S, --status

      输出密码的状态信息。使用chage -l love查看更详细的信息。

    7. -u, --unlock

      解锁密码。

    8. -w, --warndays WARN_DAYS

      设置密码过期前多少天的提示。

    9. -x, --maxdays MAX_DAYS

      设置密码有效期多少天,即多少天内必须修改密码。

  • usermod [-cdegGlLsuU] username

    1. -a,--append

      添加次用户组。只能和-G选项一起使用。

    2. -c, --comment COMMENT

      账号说明,即/etc/passwd文件中的第5个字段。

    3. -d, --home HOME_DIR

      修改用户主文件夹。

    4. -e, --expiredate EXPIRE_DATE

      指定密码过期日期,格式为“YYYY-MM-DD”。

    5. -f, --inactive INACTIVE

      设置密码过期后的宽限天数。0表示立即失效,-1表示永远不失效(密码只会过期而强制于登录时重新设置)。

    6. -g, --gid GROUP

      指定已存在的用户组作为用户的初始用户组。主文件夹的所属用户组将更改为新的用户组。主文件夹之外的文件的所属用户组必须手动修改。

    7. -G,--groups GROUP1[,GROUP2,…[,GROUPN]]

      重新设置次要用户组列表。

    8. -l, --login NEW_LOGIN

      将用户名修改为NEW_LOGIN。但是,用户目录以及同名用户组不会被自动修改。

    9. -L, --lock

      锁住密码。

    10. -m, --move-home

      移动用户主文件夹下的所有内容到新的目录。此选项必须和-d(或--home)选项一起使用才有效。

    11. -s, --shell SHELL

      修改登录shell。绝对路径。

    12. -u, --uid

      修改用户UID。

    13. -U, --unlock

      解锁密码。

  • userdel

    1. -r, --remove

      连同用户主文件夹一起删除。

2.2 新增与删除用户组

  • groupadd [-g gid] [-r] groupname

    1. -f, --force

      此选项使添加用户组的命令简单地返回成功的返回码。当与-g选项一起使用时,如果GID已经使用了,将直接分配一个独一无二的GID。

    2. -g, --gid GID

      指定独一无二的GID给新建的用户组,除非使用了-o选项。

    3. -K, --key KEY=VALUE

      指定一些GID_MIN,GID_MAX键值对。

      如,-K GID_MIN=1000 -K GID_MAX=4999。-K GID_MIN=10 -K GID_MAX=499将不会起作用。

    4. -r, --system

      创建系统用户组。

  • groupmod [-g gid] [-n NEW_GROUP] OLD_GROUP

    1. -g, --gid GID

      修改给定用户组的ID为GID。注意不要随意修改GID,容易造成系统混乱。

    2. -n, --new-name NEW_GROUP

      修改用户组名为NEW_GROUP。

  • groupdel [groupname]

  • gasswd [groupname]

    1. 没有任何选项则添加组密码。

    2. -A user1[,user2,...[usern]]

    3. -a, --add user

      向groupname用户组中添加user。

    4. -d, --delete user

      把groupname用户组的user删除。

    5. -r, --remove-password

      删除用户组的密码,用户组的密码为空,只允许组成员使用newgrp将此组设置为初始用户组。

    6. -R, --restrict

      限制组的访问。组密码前添加!,只有拥有组密码的组成员才能使用newgrp将此组设置为初始用户组。

3 主机权限:ACL的使用

ACL是Access Control List的缩写,针对单一用户、单一文件或目录提供特殊权限。

3.1 ACL设置

  • setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file

    1. -m, –modify

      设置ACL参数。格式:[u[ser]:]uid [:perms]g[roup]:gid [:perms]o[ther][:] [:perms]m[ask][:] [:perms]

      setfacl -m u:ewen:rwx ./bin
      
    2. -x, --remove

      删除ACL参数。

    3. -b, --remove-all

      删除所有的ACL设置参数。

    4. `-k, --remove-default``

      删除默认的ACL设置参数。

    5. -n, --no-mask

      不重新计算有效权限掩码。setfacl命令的默认行为要计算目录的有效权限掩码。

    6. --mask

      重新计算有效权限掩码。

    7. -d, --default

      所有操作都设置默认ACL参数!只对目录有效,在该目录新建的数据会继承ACL权限设置值。

    8. --test

      测试ACL设置参数,输出设置结果。

    9. -R, --recursive

      递归设置ACL参数。

    10. -L, --logical

      软连接也设置ACL参数。只与-R选项一起使用时有效。

    11. `-P, --physical``

      软连接不设置ACL参数。只与-R选项一起使用时有效。

  • getfacl

4 用户身份切换

4.1 su

  • su [options] [-] [user [argument...]]

    1. -c, --command=COMMAND

      仅执行一次命令。

    2. -g, --group=GROUP

      指定切换用户的有效用户组。只要root用户可以使用此选项。

    3. -, -l, --login

      使用login-shell的变量文件读取方式来登录系统。

      初始化环境变量HOME、SHELL、USER、LOGNAME、PATH。

    4. -m, -p, --preserve-environment

      使用目前的环境变量设置。不初始化环境变量HOME、SHELL、USER、LOGNAME。指定了-l选项后此选项将忽略。

    5. -s, --shell=SHELL

      切换身份时指定运行SHELL。

4.2 sudo

  • sudo的命令用法

    1. -b, --background

      后台执行命令。

    2. -E, --preserve-env

      保留环境变量。

    3. --preserve-env=list

      保留list列出的环境变量。

    4. -g group, --group=GROUP

      指定执行命令时的有效用户组。

    5. -H, --set-home

      将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录。

    6. -i, --login

      使用login-shell的变量文件读取方式来登录系统。.prefile、.bash_profile、.login文件将被读取。

    7. -K, --remove-timestamp

      运行sudo -K后下次使用sudo必须要密码。

    8. -k, --reset-timestamp

      运行sudo -k后下次使用sudo必须要密码。

    9. -l, --list

      若没有命令,那么显示执行 sudo 的使用者的权限。

      若有命令,那么显示命令的完整路径。

    10. -n, --non-interactive

      拒绝任何交互。

    11. -S, --shell

      指定shell执行命令。将修改SHELL变量。

  • visudo与/etc/sudoers

    love ALL=(ALL) ALL # 单一用户设置root所有命令
    %wheel ALL=(ALL) ALL # 用户组
    love ALL=(root) /usr/bin/passwd # 限制用户切换身份以及命令
    

5 用户信息传递

5.1 查询用户

  • 查看用户登录时间:last
  • 查询已登录在系统上面的用户:who、w
  • 查询每个账号最近的登录时间:lastlog

5.2 用户对谈

  • write,使用ctrl-d结束输入。
  • mesg n/y,不接收/接收信息。
  • wall,广播信息。

5.3 用户邮箱信件

  • mail
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值