Linux用户与组管理
用户分为以下几类账号:
| 用户UID | |
|---|---|
| 0 | 超级管理员,最高权限,有着极强的权限能力 |
| 1 — 200 | 系统用户,用来运行系统自带的进程,默认已创建 |
| 200 — 999 | 系统用户,用来运行用户安装的程序,该用户无需登录 |
| 1000+ | 普通用户,可以正常登录系统的用户,权限比较小,能进行的操作有限 |
一、用户管理
创建用户:useradd
语法:useradd【选项】【用户名】
-u:指定(修改)用户的UID号
-d:指定(修改)用户的宿主目录位置
-m:创建用户时自动建立用户主目录
-e:指定(修改)用户的账户失效时间,可以用YYYY-MM-DD的日期格式
-s:指定用户的登录shell
-l:更改用户的账户的登录名称
新建用户账号时,从模板目录etc/skel目录中复制而来
【示例1】创建一个用户jack并创建宿主目录
useradd -m jack
【示例2】创建一个用户test指定加入组jack,并加入到附加组root
useradd -m -g jack -G root test
设置/更改用户口令:passwd
语法:passwd【选项】【用户名】
-d:清空指定用户密码,仅使用用户名即可登陆
-f:强迫用户下次登录时修改口令
-l:锁定用户账户
-S:查看用户账户的状态(是否被锁定)
-u:解锁用户账户
【示例1】设置用户jack的密码
passwd jack
修改用户账号:usermod
语法:usermod【选项】【用户名】
-u:修改UID
-d:修改宿主目录
-e:修改失效时间
-s:指定用户的登录shell
-l:更改登录名(Login Name)
-L:锁定账户
-U:解锁账户
删除用户账号:userdel
语法:userdel【选项】【用户账号】
-r:同时删除宿主目录
【示例1】删除用户jack并删除宿主目录
userdel -r jack
新晋命令:adduser
属于高级命令(Perl/Python 脚本,调用 useradd 等低级命令实现)。
语法:adduser【选项】【用户账号】
【示例1】添加一个用户
$ adduser jack
Adding user `jack' ...
Adding new group `jack' (1001) ...
Adding new user `jack' (1001) with group `jack' ...
Creating home directory `/home/jack' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: ******
Retype new UNIX password: ******
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
二、组管理
创建组账号:groupadd
语法:groupadd 【组名】
-g:添加指定组账号
添加用户:gpasswd
语法:gpasswd【选项】【用户名】
-a:添加一个用户
-d:删除一个用户
-M:定义组员,可批量定义,但会删除原组员
删除组账号:groupdel
语法:groupdel【组账号名】
注意:groupdel需删除组内成员后才能删除组
三、用户和组记录文件
与用户账号有关的系统文件
Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。
记录系统所有用户的文件:/etc/passwd
cat /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
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
admin:x:1000:1000:admin:/home/admin:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
从上面的格式来看以:为分隔符,分为7列,以root用户为例,如下
head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
| 第一列 | 第二列 | 第三列 | 第四 列 | 第五列 | 第六列 | 第七列 |
|---|---|---|---|---|---|---|
| root:用户名称 | x:密码占位符 | 0:用户UID | 0:组GID | root:注释信息 | /root:用户家目录 | /bin/bash:登录shell |
拥有账户文件
/etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生。
记录系统所有用户密码以及创建和到期时间:/etc/shadow
跟passwd文件一样,以:为分隔符,分为7列,也以root用户为例,如下
head -20 /etc/shadow
root:*::0:99999:7:::
daemon:*::0:0::::
bin:*::0:0::::
sys:*::0:0::::
adm:*::0:0::::
uucp:*::0:0::::
nuucp:*::0:0::::
auth:*::0:0::::
cron:*::0:0::::
listen:*::0:0::::
lp:*::0:0::::
jack:EkdiSECLWPdSa:9740:0:0::::
对应信息:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
第一列:用户名称
第二列:密码为长串字符串,!!为无密码
第三列:最近一次变更密码,从1970年开始,过了多少天
第四列:密码最少使用天数,0表示无限制
第五列:密码最长使用天数,99999表示不过期
第六列:密码过期后几天强制提示用户更改密码
第七列:账户失效时间,从1970年开始,可以用多少天,再这个日期前可以使用,到期失效
用户组的所有信息都存放在/etc/group文件中
root::0:root
bin::2:root,bin
sys::3:root,uucp
adm::4:root,adm
daemon::5:root,daemon
lp::7:root,lp
users::20:root,jack
对应信息:
组名:口令:组标识号:组内用户列表
第一列:用户组的名称,由字母或数字构成。与/etc/passwd中的登录名一样,组名不应重复。
第二列:用户组加密后的口令字。一般Linux 系统的用户组都没有口令,即这个字段一般为空,或者是*。
第三列:用户标识号类似,也是一个整数,被系统内部用来标识组。
第四列:属于这个组的所有用户的列表,不同用户之间用逗号(,)分隔。这个用户组可能是用户的主组,也可能是附加组。
利用pwunconv批量添加用户
1.编辑用户列表文件
每一列按照/etc/passwd密码文件的格式书写,要注意每个用户的用户名、UID、宿主目录都不可以相同
vim users.txt
--------------------------------------------
user001::600:100:user:/home/user001:/bin/bash
user002::601:100:user:/home/user002:/bin/bash
user003::602:100:user:/home/user003:/bin/bash
user004::603:100:user:/home/user004:/bin/bash
user005::604:100:user:/home/user005:/bin/bash
user006::605:100:user:/home/user006:/bin/bash
2.执行newusers命令
从刚创建的用户文件users.txt中导入数据。
newusers < users.txt
3.执行pwunconv命令
将/etc/shadow产生的shadow密码解码,然后回写到/etc/passwd中,并将/etc/shadow的shadow密码栏删掉。了方便下一步的密码转换工作,即先取消 shadow password 功能。
pwunconv
4.为用户们设置密码
编辑对应每个用户的密码文件。
vim passwd.txt
------------------
user001:123456
user002:123456
user003:123456
user004:123456
user005:123456
user006:123456
5.执行chpasswd命令
创建用户密码chpasswd会将经过passwd命令编码过的密码写入/etc/passwd的密码栏。
chpasswd < passwd.txt
6.执行pwconv命令
执行命令pwconv将密码编码为shadow password,并将结果写入/etc/shadow。
pwconv
sudo提权配置
你可以根据实际需要在/etc/sudoers文件中按照下面四行格式中任意一条进行添加:
vim /etc/sudoers
-------------------------------------------
test ALL=(ALL) ALL
%test ALL=(ALL) ALL
test ALL=(ALL) NOPASSWD: ALL
%test ALL=(ALL) NOPASSWD: ALL
第一行:允许用户test执行sudo命令(需要输入密码)
第二行:允许用户组test里面的用户执行sudo命令(需要输入密码)
第三行:允许用户test执行sudo命令,并且在执行的时候不输入密码
第四行:允许用户组test里面的用户执行sudo命令,并且在执行的时候不输入密码
用户和组一些查询命令
id:查询用户账号的身份标识
groups:查询用户账号所属的组
finger:查询用户账号的登录属性
users:查询当前登录账号
w:查询当前主机的用户登录情况
who:查询当前主机登录用户
whoami:查询当前登录账号