linux系统用户账号管理
使用者识别码: UID 与GID
[root@localhost ~]# id wang
uid=1000(wang) gid=1000(wang) 组=1000(wang)
[root@localhost ~]# ll -d /home/wang
drwx------. 2 wang wang 62 10月 27 20:01 /home/wang
[root@localhost ~]# vi /etc/passwd
[root@localhost ~]#
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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
wang:x:1000:1000::/home/wang:/bin/bash
~
~
~
~
~
~
"/etc/passwd" 20L, 885C
添加用户
[root@localhost ~]# useradd -d /home/sam -m sam
此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录 /home/sam(/home为默认的用户主目录所在的父目录
这里可能新建组:#groupadd group及groupadd adm
[root@localhost ~]# useradd -s /bin/sh -g group -G adm,root gem
此命令新建了一个用户gem,该用户的登录Shell是 /bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。
/etc/passwd 档案结构
共7个位置,使用;分割,7个位置分别放的是
1账号名,2 密码,3 UID ,4 GID, 5 使用者资讯说明栏,6 家目录 7 shell
补充介绍:
密码:
早期Unix系统的密码就是放在这栏位上!但是因为这个档案的特性是所有的程序都能够读取,这样一来很容易造成密码资料被窃取,因此后来就将这个栏位的密码资料给他改放到/etc/shadow 中了。所以这里你会看到一个『 x 』
用户账号的管理工作主要涉及到用户账号的添加、修改和删除。
添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录Shell等资源。刚添加的账号是被锁定的,无法使用。
由于系统上面启动的网路服务或背景服务希望使用较小的权限去运作,因此不希望使用root的身份去执行这些服务,所以我们就得要提供这些运作中程式的拥有者帐号才行。这些系统帐号通常是不可登入的
根据系统帐号的由来,通常这类帐号又约略被区分为几种:
0 是管理员
1~200:由distributions 自行建立的系统帐号;
201~999:若使用者有系统帐号需求时,可以使用的帐号UID。
1000以及以上:给一般使用者用的。事实上,目前的linux 核心(3.10.x 版)已经可以支援到 4294967295 (2^32-1) 这么大的UID 号码
添加新的用户账号
[root@localhost ~]# useradd wang
[root@localhost ~]# 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 到的目录
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
-s, --shell SHELL 新账户的登录 shell
-u, --uid UID 新账户的用户 ID
-U, --user-group 创建与用户同名的组
-Z, --selinux-user SEUSER 为 SELinux 用户映射使用指定 SEUSER
[root@localhost ~]#
[root@localhost ~]# useradd vbird1
[root@localhost ~]# ll -d /home/vbird1
drwx------. 2 vbird1 vbird1 62 10月 27 20:26 /home/vbird1
[root@localhost ~]#
预设会建立使用者家目录权限700
[root@localhost ~]# group vbird1 /etc/passwd /etc/shadow /etc/group
-bash: group: 未找到命令
[root@localhost ~]# grep vbird1 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird1:x:1002:1003::/home/vbird1:/bin/bash
/etc/shadow:vbird1:!!:18562:0:99999:7:::
/etc/group:vbird1:x:1003:
[root@localhost ~]#
预设会建立一个和账号名一模一样的群组名
用users为初始群组,UID为1500的来建立一个名为vbird2的账号
[root@localhost ~]# useradd -u 1500 -g users vbird2
[root@localhost ~]# ll -d /home/vbird2
drwx------. 2 vbird2 users 62 10月 27 20:32 /home/vbird2
[root@localhost ~]# grep vbird2 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird2:x:1500:100::/home/vbird2:/bin/bash
/etc/shadow:vbird2:!!:18562:0:99999:7:::
[root@localhost ~]#
删除账号
[root@localhost ~]# userdel wang
[root@localhost ~]# userdel -r wang
userdel:用户“wang”不存在
[root@localhost ~]#
[root@localhost ~]# userdel
用法:userdel [选项] 登录
选项:
-f, --force force some actions that would fail otherwise
e.g. removal of user still logged in
or files, even if not owned by the user
-h, --help 显示此帮助信息并推出
-r, --remove 删除主目录和邮件池
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
-Z, --selinux-user 为用户删除所有的 SELinux 用户映射
[root@localhost ~]#
修改账号
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
修改已有用户的信息使用usermod命令,其格式如下:
/etc/shadow 档案结构
就是放密码的地方,内容以:分割,一共9个位置,分别是:
1 账号名,与/etc/passwd里的账号名对应
2 真正的密码(加密过后的)
3 最近更动密码的日期,记录的为1970年1月1日到变更时间的天数间隔,
echo
(
(
((
(((date --date=“2015/05/04” +%s)/86400+1))
提供一个计算公式用于计算具体日期的天数
4 密码不可变更的天数
5 密码需要重新变更的天数
6 密码变更前几天给提示
7 密码过期后宽限的时间,超过该时间 密码过期
8 密码失效时间 密码无法使用的时间
失效与过期不同,过期可以继续使用,登录提示要修改密码,而失效表示账号不能用了。
9为保留的栏位,无实际意义
。
[root@localhost ~]# 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 用户映射
[root@localhost ~]#
修改使用者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。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为
[root@localhost ~]# passwd
更改用户 root 的密码 。
新的 密码:
[root@localhost ~]#
[root@localhost ~]# passwd
更改用户 root 的密码 。
新的 密码:
[root@localhost ~]# passwd -
passwd:未知的用户名 -。
[root@localhost ~]# passwd --help
用法: 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 从标准输入读取令牌(只有根用户才能进行此操作)
Help options:
-?, --help Show this help message
--usage Display brief usage message
[root@localhost ~]#
请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 了!他的用法如下:
[root@localhost ~]# chage
用法:chage [选项] 登录
选项:
-d, --lastday 最近日期 将最近一次密码设置时间设为“最近日期”
-E, --expiredate 过期日期 将帐户过期时间设为“过期日期”
-h, --help 显示此帮助信息并推出
-I, --inactive INACITVE 过期 INACTIVE 天数后,设定密码为失效状态
-l, --list 显示帐户年龄信息
-m, --mindays 最小天数 将两次改变密码之间相距的最小天数设为“最小天数”
-M, --maxdays MAX_DAYS set maximum number of days before password
change to MAX_DAYS
-R, --root CHROOT_DIR chroot 到的目录
-W, --warndays 警告天数 将过期警告天数设为“警告天数”
[root@localhost ~]#
范例一:列出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文件的更新。
增加一个新的用户组使用groupadd命令。
其格式如下:
groupadd 选项 用户组
可以使用的选项有:
-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
新建一个群组,名称为group1
[root@localhost ~]# groupadd group1
[root@localhost ~]# groupadd
用法: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 创建一个系统账户
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR directory prefix
[root@localhost ~]#
如果要删除一个已有的用户组,使用groupdel命令
,其格式如下
groupadd 选项 用户组
可以使用的选项有:
-g GID 指定新用户组的组标识号(GID)。
-o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。
新建一个群组,名称为group1
[root@localhost ~]# groupadd group1
[root@localhost ~]# groupdel
用法:groupdel [选项] 组
选项:
-h, --help 显示此帮助信息并推出
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
-f, --force delete group even if it is the primary group of a user
[root@localhost ~]#
修改用户组的属性使用groupmod命令。
其语法如下:
[root@localhost ~]# groupmod
用法:groupmod [选项] 组
选项:
-g, --gid GID 将组 ID 改为 GID
-h, --help 显示此帮助信息并推出
-n, --new-name NEW_GROUP 改名为 NEW_GROUP
-o, --non-unique 允许使用重复的 GID
-p, --password PASSWORD 将密码更改为(加密过的) PASSWORD
-R, --root CHROOT_DIR chroot 到的目录
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files
[root@localhost ~]#
将刚刚上个指令建立的group1名称改为mygroup , GID为201
[root@localhost ~]# groupmod -g 201 -n mygroup group1
[root@localhost ~]# grep mygroup /etc/group /etc/ gshadow
如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限
[root@localhost ~]# newgrp --help
用法:newgrp [-] [组]
[root@localhost ~]# newgrp root