这是我学习linux的过程,每天都会更新所学习的知识总结,每个例子都是我自己的亲手实践的,作为新人的我希望各位大佬提出宝贵的意见!!
Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
每个用户账号都拥有一个惟一的用户名和各自的口令。
用户在登录时键入正确的用户名和口令后,就能够进入系统和自己的主目录。
实现用户账号的管理,要完成的工作主要有如下几个方面:
- 用户账号的添加、删除与修改。
- 用户口令的管理。
- 用户组的管理。
一、linux系统用户账号管理
添加新的用户账号
useradd 选项 用户名
参数说明:
选项:
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
用户名:
指定新账号的登录名。
例:
[root@localhost ~]# useradd aaa
[root@localhost ~]# ll -d /home/aaa
#预设会建立使用者家目录,且权限为700
[root@localhost ~]# useradd -d /home/bbb -m bbb
#此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录 /home/sam(/home为默认的用户主目录所在的父目录)。
删除账号
如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。
删除一个已有的用户账号使用userdel命令,其格式如下:
userdel 选项 用户名
常用的选项是 -r,它的作用是把用户的主目录一起删除。
[root@localhost ~]# userdel -r aaa
修改账号
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
修改已有用户的信息使用usermod
命令,其格式如下:
usermod 选项 用户名
选项参数:
用法:usermod [选项] 登录
选项:
-c, --comment 注释 GECOS 字段的新值
-d, --home HOME_DIR 用户的新主目录
-e, --expiredate EXPIRE_DATE 设定帐户过期的日期为 EXPIRE_DATE
-f, --inactive INACTIVE 过期 INACTIVE 天数后,设定密码为失效状态
-g, --gid GROUP 强制使用 GROUP 为新主组
-G, --groups GROUPS 新的附加组列表 GROUPS
-a, --append GROUP 将用户追加至上边 -G 中提到的附加组中,
并不从其它组中删除此用户
-h, --help 显示此帮助信息并推出
-l, --login LOGIN 新的登录名称
-L, --lock 锁定用户帐号
-m, --move-home 将家目录内容移至新位置 (仅于 -d 一起使用)
-o, --non-unique 允许使用重复的(非唯一的) UID
-p, --password PASSWORD 将加密过的密码 (PASSWORD) 设为新密码
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
-s, --shell SHELL 该用户帐号的新登录 shell
-u, --uid UID 用户帐号的新 UID
-U, --unlock 解锁用户帐号
-v, --add-subuids FIRST-LAST add range of subordinate uids
-V, --del-subuids FIRST-LAST remove range of subordinate uids
-w, --add-subgids FIRST-LAST add range of subordinate gids
-W, --del-subgids FIRST-LAST remove range of subordinate gids
-Z, --selinux-user SEUSER 用户账户的新 SELinux 用户映射
范例:修改使用者bbb的说明栏,加上『VBird's test』的说明。
[root@localhost ~]# usermod -c "VBird's test" bbb
[root@localhost ~]# grep bbb /etc/passwd
bbb:x:1002:1002:VBird's test:/home/bbb:/bin/bash
范例二:使用者bbb这个帐号在2020/12/31失效
[root@localhost ~]# usermod -e "2020-12-31" bbb
[root@localhost ~]# chage -l bbb | grep 'Account expires'
用户口令管理
用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
指定和修改用户口令的Shell命令是passwd
。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为
passwd 选项 用户名
参数及选项
-k, --keep-tokens 保持身份验证令牌不过期
-d, --delete 删除已命名帐号的密码(只有根用户才能进行此操作)
-l, --lock 锁定指名帐户的密码(仅限 root 用户)
-u, --unlock 解锁指名账户的密码(仅限 root 用户)
-e, --expire 终止指名帐户的密码(仅限 root 用户)
-f, --force 强制执行操作
-x, --maximum=DAYS 密码的最长有效时限(只有根用户才能进行此操作)
-n, --minimum=DAYS 密码的最短有效时限(只有根用户才能进行此操作)
-w, --warning=DAYS 在密码过期前多少天开始提醒用户(只有根用户才能进行此操作)
-i, --inactive=DAYS 当密码过期后经过多少天该帐号会被禁用(只有根用户才能进行此操作)
-S, --status 报告已命名帐号的密码状态(只有根用户才能进行此操作)
--stdin 从标准输入读取令牌(只有根用户才能进行此操作)
范例一:请root给予bbb密码
[root@localhost ~]# passwd bbb
更改用户 bbb 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
范例二:管理bbb的密码使具有60天变更、密码过期10天后帐号失效的设定
[root@localhost ~]# passwd -S bbb
bbb PS 2020-10-27 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
# 上面说明密码建立时间(2020-10-27)、0 最小天数、99999 变更天数、7 警告日数与密码不会失效(-1)
[root@localhost ~]# passwd -x 60 -i 10 bbb
[root@localhost ~]# passwd -S bbb
bbb PS 2020-10-27 0 60 7 10 (密码已设置,使用 SHA512 算法。)
范例三:让vbird2的帐号失效,观察完毕后再让她失效
[root@localhost ~]# passwd -l bbb
锁定用户 bbb 的密码 。
passwd: 操作成功
[root@localhost ~]# passwd -S bbb
bbb LK 2020-10-27 0 60 7 10 (密码已被锁定。)
#状态变成『 LK, Lock 』了啦!无法登入喔!
[root@localhost ~]# grep bbb /etc/shadow
bbb:!!$6$TS9PFc48$rb/e9sHbP9b8Rff28jm/K36CIffczfkGZhTrYbrhERDycwf6N15DfmoCBHzfIJK4QB5Mat83h4KL8NC2AIg2k0:18562:0:60:7:10:18627:
#其实只是在这里加上!!而已!
[root@localhost ~]# passwd -u bbb
解锁用户 bbb 的密码。
passwd: 操作成功
[root@localhost ~]# grep bbb /etc/shadow
bbb:$6$TS9PFc48$rb/e9sHbP9b8Rff28jm/K36CIffczfkGZhTrYbrhERDycwf6N15DfmoCBHzfIJK4QB5Mat83h4KL8NC2AIg2k0:18562:0:60:7:10:18627:
# 密码栏位恢复正常!
除了使用passwd -S 之外,有没有更详细的密码参数显示功能呢?有的!那就是chage 了!他的用法如下:
chage [-ldEImMW]帐号名
选项与参数:
-l :列出该帐号的详细密码参数;
-d :后面接日期,修改shadow 第三栏位(最近一次更改密码的日期),格式YYYY-MM-DD
-E :后面接日期,修改shadow 第八栏位(帐号失效日),格式YYYY-MM-DD
-I :后面接天数,修改shadow 第七栏位(密码失效日期)
-m :后面接天数,修改shadow 第四栏位(密码最短保留天数)
-M :后面接天数,修改shadow 第五栏位(密码多久需要进行变更)
-W :后面接天数,修改shadow 第六栏位(密码过期前警告日期)
范例一:列出bbb的详细密码参数
[root@localhost ~]# chage -l bbb
最近一次密码修改时间 :10月 27, 2020
密码过期时间 :12月 26, 2020
密码失效时间 :1月 05, 2021
帐户过期时间 :12月 31, 2020
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :60
在密码过期之前警告的天数 :7
范例二:建立一个名为agetest 的帐号,该帐号第一次登入后使用预设密码,但必须要更改过密码后,
使用新密码才能够登入系统使用bash环境
[root@localhost ~]# useradd agetest
[root@localhost ~]# echo "agetest" | passwd --stdin agetest
更改用户 agetest 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# chage -d 0 agetest
[root@localhost ~]# chage -l agetest | head -n 3
最近一次密码修改时间 :密码必须更改
密码过期时间 :密码必须更改
密码失效时间 :密码必须更改
使用者功能(普通用户可以使用的功能:
[root@localhost ~]# id [username]
范例一:查阅root自己的相关ID资讯!
[root@localhost ~]# id
uid=0(root) gid=0(root) 组=0(root) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
# 上面资讯其实是同一行的资料!包括会显示UID/GID 以及支援的所有群组!
# 至于后面那个context=... 则是SELinux 的内容,先不要理会他!
范例二:查阅一下aaa
[root@localhost ~]# id aaa
uid=1004(aaa) gid=1004(aaa) 组=1004(aaa)
linux系统用户组的管理
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group文件的更新。
1、增加一个新的用户组使用groupadd命令。其格式如下:
groupadd 选项 用户组
可以使用的选项有:
-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
范例一:新建一个群组,名称为group1
[root@localhost ~]# groupadd group1
2、如果要删除一个已有的用户组,使用groupdel命令,其格式如下:
[root@localhost ~]# groupdel group1
3、修改用户组的属性使用groupmod命令。其语法如下:
groupmod [-g gid] [-n group_name]群组名
选项与参数:
-g :修改既有的GID 数字;
-n :修改既有的群组名称
范例一:将刚刚上个指令建立的group1名称改为mygroup , GID为201
[root@localhost ~]# groupmod -g 201 -n mygroup group1
[root@localhost ~]# grep mygroup /etc/group /etc/ gshadow
4、如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。
用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。例如:
[root@localhost ~]# newgrp root
这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。