文章目录
来源于《鸟哥的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
-
账号名称
比如root、ewen。
-
密码
早期UNIX系统将密码存储在这个字段上,现在密码存储在/etc/shadow,此字段为x。
-
UID
UID范围 该ID用户特性 0(系统管理员) UID为0代表账号为“系统管理员”,但是不建议多个账号的UID都是0。 1~499(系统账号) 1~99:由distributions自行创建的系统账号;
100~499:用户使用的系统账号需求。500~(可登录账号) 一般用户 -
GID
-
用户信息说明列
解释账号意义。
-
主文件夹
-
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:::
-
账号名称
-
密码
保存加密后的密码,加密后密码长度一致。新建用户密码未设置时,该账号被封锁,不允许登录,此字段为!,可以使用passwd设置密码。
-
最近更动密码日期
以1970年01月01日作为1而累加的日期,比如17876代表的是2018/12/11。
-
密码不可被更动的天数(与第3个字段相比)
此字段表示在最近一次更改密码后必须经过多少天才能再次修改。0表示可以任意修改。
-
密码需要重新更改的天数(与第3个字段相比)
指定在最近一次更改密码后的多少天内必须再次更改密码,否则这个账号密码将变为过期特性。99999(273年)表示密码的更改没有强制性。第三个字段+第五个字段为密码有效日期,过了期限就是过期。过期后登录系统将强制设置密码。
-
密码需要更改限期前的警告天数(与第5个字段相比)
当密码有效期限快要到时,系统将根据这个字段的设置发出“警告”,提醒再过多少天密码将要过期。
-
密码过期后的账号宽限时间(与第5个字段相比)
密码过期后在多少天内还没有登录修改密码,那么这个账号的密码将“失效”,再也无法使用该密码登录。0表示立即失效,-1表示永远不失效(密码只会过期而强制于登录时重新设置)。
-
账号失效日期
此账号在此字段规定的日期之后,将无法再使用。
-
保留
1.1.3 /etc/group文件结构
$ head -n 1 /etc/group
root:x:0:root,ewen
-
用户组名称
-
用户组密码
设置用户组管理员使用的密码,一般没有机会使用。密码已经迁移至/etc/gshadow,此字段只存在x。
-
GID
-
此用户组支持的账号名称
某个账号想要加入此用户组,将账号填入这个字段即可,如root,ewen。
1.1.4 密码忘记了
-
一般用户密码忘记了
登录root用户使用passwd命令修改密码。
-
root用户密码忘记了
- 重新启动进入用户维护模式,此时系统将主动给予root权限的bash接口,使用passwd命令修改密码;
- 或者使用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
-
-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
-
-d,--home-dir HOME_DIR
新用户将使用HOME_DIR作为用户登录的主文件夹。
默认为登录名添加到BASE_DIR变量之后,并作为主文件夹。
-
-e, --expiredate EXPIRE_DATE
设置账号的失效日期,格式为“
YYYY-MM-DD
”。若未指定,useradd命令将使用/etc/default/useradd中的EXPIRE变量指定的日期,否则默认不失效。
-
-f, --inactive INACTIVE
指定密码是否会失效。0表示立即失效,-1表示永远不失效(密码只会过期而强制于登录时重新设置)。
若未指定,useradd命令将使用/etc/default/useradd中的INACTIVE变量,否则默认值-1。
-
-g,--gid GROUP
指定某个存在的用户组为初始用户组。
若未指定,useradd命令将的行为取决于/etc/login.def文件中的USERGROUP_ENAB变量。
- 若USERGROUP_ENAB值为yes(或指定-U/–user-group),将创建一个与用户名相同的用户组。
- 若USERGROUP_ENAB值为no(或指定-N/–no-user-group),则设置/etc/default/useradd中的GROUP变量为初始用户组,否则默认为100。
-
-G,--groups GROUP1[,GROUP2,…[,GROUPN]]
设置次要用户组列表。
-
-k, --skel SKEL_DIR
指定SKEL_DIR目录为骨架目录。当-m或–create-home选项被指定时,此选项才有效。
若未设置,骨架目录在/etc/default/useradd文件中定义,否则默认为/etc/skel。
-
-K, --key KEY=VALUE
指定UID_MIN,UID_MAX,UMASK,PASS_MAX_DAYS键值对。
多次使用如,-K UID_MIN=100 -K UID_MAX=499。
-
-m,--create-home
强制!要创建用户主文件夹!如果此选项未指定以及CREATE_HOME未生效,默认不生成用户主文件夹。
-
-M,--no-create-home
强制!不要创建用户主文件夹!即使/etc/login.defs文件中的CREATE_HOME设置了yes。
-
-N, --no-user-group
不创建同名用户组,指定初始用户组为-g选项或GROUP变量。
-
-r, --system
创建系统账号。除非指定-m选项,否则useradd命令将忽略CREATE_HOME变量不再创建用户主文件夹。
-
-s,--shell SHELL
指定默认登录shell,默认使用/etc/default/useradd文件中的SHELL变量。
-
-u, --uid UID
指定UID给新增用户。
-
-U,--user-group
新建同名用户组,并将用户加入该用户组。
-
-
passwd [-l] [-u] [--stdin] [-S] [-n MIN_DAYS] [-x MAX_DAYS] [-w WARN_DAYS][-i INACTIVE] username
-
-d, --delete
清空密码。不允许直接清空当前账号密码,必须使用root权限
sudo passwd -d username
。 -
-e, --expire
使密码过期,强制用户下次登录时修改密码。
-
-i, --inactive INACTIVE
设置密码过期后的宽限天数。
-
-l, --lock
锁住密码,在/etc/shadow文件的第二个字段前加!。
-
-n, --mindays MIN_DAYS
设置多少天内都不允许修改密码。
-
-S, --status
输出密码的状态信息。使用
chage -l love
查看更详细的信息。 -
-u, --unlock
解锁密码。
-
-w, --warndays WARN_DAYS
设置密码过期前多少天的提示。
-
-x, --maxdays MAX_DAYS
设置密码有效期多少天,即多少天内必须修改密码。
-
-
usermod [-cdegGlLsuU] username
-
-a,--append
添加次用户组。只能和-G选项一起使用。
-
-c, --comment COMMENT
账号说明,即/etc/passwd文件中的第5个字段。
-
-d, --home HOME_DIR
修改用户主文件夹。
-
-e, --expiredate EXPIRE_DATE
指定密码过期日期,格式为“YYYY-MM-DD”。
-
-f, --inactive INACTIVE
设置密码过期后的宽限天数。0表示立即失效,-1表示永远不失效(密码只会过期而强制于登录时重新设置)。
-
-g, --gid GROUP
指定已存在的用户组作为用户的初始用户组。主文件夹的所属用户组将更改为新的用户组。主文件夹之外的文件的所属用户组必须手动修改。
-
-G,--groups GROUP1[,GROUP2,…[,GROUPN]]
重新设置次要用户组列表。
-
-l, --login NEW_LOGIN
将用户名修改为NEW_LOGIN。但是,用户目录以及同名用户组不会被自动修改。
-
-L, --lock
锁住密码。
-
-m, --move-home
移动用户主文件夹下的所有内容到新的目录。此选项必须和
-d(或--home)
选项一起使用才有效。 -
-s, --shell SHELL
修改登录shell。绝对路径。
-
-u, --uid
修改用户UID。
-
-U, --unlock
解锁密码。
-
-
userdel
-
-r, --remove
连同用户主文件夹一起删除。
-
2.2 新增与删除用户组
-
groupadd [-g gid] [-r] groupname
-
-f, --force
此选项使添加用户组的命令简单地返回成功的返回码。当与
-g
选项一起使用时,如果GID已经使用了,将直接分配一个独一无二的GID。 -
-g, --gid GID
指定独一无二的GID给新建的用户组,除非使用了
-o
选项。 -
-K, --key KEY=VALUE
指定一些GID_MIN,GID_MAX键值对。
如,-K GID_MIN=1000 -K GID_MAX=4999。-K GID_MIN=10 -K GID_MAX=499将不会起作用。
-
-r, --system
创建系统用户组。
-
-
groupmod [-g gid] [-n NEW_GROUP] OLD_GROUP
-
-g, --gid GID
修改给定用户组的ID为GID。注意不要随意修改GID,容易造成系统混乱。
-
-n, --new-name NEW_GROUP
修改用户组名为NEW_GROUP。
-
-
groupdel [groupname]
-
gasswd [groupname]
-
没有任何选项则添加组密码。
-
-A user1[,user2,...[usern]]
-
-a, --add user
向groupname用户组中添加user。
-
-d, --delete user
把groupname用户组的user删除。
-
-r, --remove-password
删除用户组的密码,用户组的密码为空,只允许组成员使用newgrp将此组设置为初始用户组。
-
-R, --restrict
限制组的访问。组密码前添加!,只有拥有组密码的组成员才能使用newgrp将此组设置为初始用户组。
-
3 主机权限:ACL的使用
ACL是Access Control List的缩写,针对单一用户、单一文件或目录提供特殊权限。
3.1 ACL设置
-
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file
-
-m, –modify
设置ACL参数。格式:
[u[ser]:]uid [:perms]
、g[roup]:gid [:perms]
、o[ther][:] [:perms]
、m[ask][:] [:perms]
。setfacl -m u:ewen:rwx ./bin
-
-x, --remove
删除ACL参数。
-
-b, --remove-all
删除所有的ACL设置参数。
-
`-k, --remove-default``
删除默认的ACL设置参数。
-
-n, --no-mask
不重新计算有效权限掩码。setfacl命令的默认行为要计算目录的有效权限掩码。
-
--mask
重新计算有效权限掩码。
-
-d, --default
所有操作都设置默认ACL参数!只对目录有效,在该目录新建的数据会继承ACL权限设置值。
-
--test
测试ACL设置参数,输出设置结果。
-
-R, --recursive
递归设置ACL参数。
-
-L, --logical
软连接也设置ACL参数。只与
-R
选项一起使用时有效。 -
`-P, --physical``
软连接不设置ACL参数。只与
-R
选项一起使用时有效。
-
-
getfacl
4 用户身份切换
4.1 su
-
su [options] [-] [user [argument...]]
-
-c, --command=COMMAND
仅执行一次命令。
-
-g, --group=GROUP
指定切换用户的有效用户组。只要root用户可以使用此选项。
-
-, -l, --login
使用login-shell的变量文件读取方式来登录系统。
初始化环境变量HOME、SHELL、USER、LOGNAME、PATH。
-
-m, -p, --preserve-environment
使用目前的环境变量设置。不初始化环境变量HOME、SHELL、USER、LOGNAME。指定了
-l
选项后此选项将忽略。 -
-s, --shell=SHELL
切换身份时指定运行SHELL。
-
4.2 sudo
-
sudo的命令用法
-
-b, --background
后台执行命令。
-
-E, --preserve-env
保留环境变量。
-
--preserve-env=list
保留list列出的环境变量。
-
-g group, --group=GROUP
指定执行命令时的有效用户组。
-
-H, --set-home
将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录。
-
-i, --login
使用login-shell的变量文件读取方式来登录系统。.prefile、.bash_profile、.login文件将被读取。
-
-K, --remove-timestamp
运行
sudo -K
后下次使用sudo必须要密码。 -
-k, --reset-timestamp
运行
sudo -k
后下次使用sudo必须要密码。 -
-l, --list
若没有命令,那么显示执行 sudo 的使用者的权限。
若有命令,那么显示命令的完整路径。
-
-n, --non-interactive
拒绝任何交互。
-
-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,广播信息。