Linux的账号与用户组
1./etc/passwd文件结构
cat /etc/passwd
①root:②x:③0:④0:⑤root:⑥/root:⑦/bin/bash
①账号名称
②密码
③UID
④GID
⑤用户信息说明栏
⑥家目录
⑦shell
2./etc/shadow文件结构
cat /etc/shadow
①root:②$y$j9T$ol9.VL1YpZM.3U65Q8aEK/$aqb.U2myNnA6qk8bPONiqpldzTFeo2D/HHxwiN1Vjc.:③19645:④0:⑤99999:⑥7:⑦:⑧:⑨
①账号名称
②密码
③最近修改密码的日期
④密码不可被修改的天数(与③比)
⑤密码需要重新修改的天数(与③比)
⑥密码需要修改期限前的警告天数(与⑤相比)
⑦密码过期后的账号宽限时间(密码失效日)(与⑤ 比)
⑧账号失效日期
⑨保留
3.Linux日期时间是以1970年1月1日作为1而累加的日期(centos 7),其他发行版可能有所不同。
echo $(($(date --date="2015/05/04" +%s)/86400+1))
该命令计算某个日期的累积日数,2015/05/04是想要计算的日期,86400是一天的秒数,%s是自1970年1月1日以来累计的秒数。由于bash仅支持整数,因此最终加1补齐1970/01/01当天。
4./etc/group文件结构
cat /etc/group
①root:②x:③0:④
①组名
②用户组密码(通常不需要设置,给用户组管理员用的)
③GID
④此用户组支持的账号名称
5.有效用户组与初始用户组
groups
该命令第一个输出的用户组是有效用户组
通常有效用户组的作用是新建文件,新建文件属于有效用户组。
newgrp 用户组名
有效用户组的切换,注意:想要切换的用户组必须是拥有的支持的用户组,用完newgrp后必须用exit退出,因为newgrp命令是以一个新的shell来提供这个功能的。
6./ect/gshadow文件结构
cat /etc/gshadow
①root:②*:③:④
①组名
②密码栏(开头为!表示无合法密码,所以无用户组管理员)
③用户组管理的账号
④有加入该用户组支持的所属账号
gshadow最大的功能就是建立用户组管理员
账号管理
1.新增用户
useradd [-u UID] [-g 初始用户组] [-G 次要用户组] [-mM] [-c 说明栏] \
> [-r] [-d 家目录绝对路径] [-s shell] 使用者账号名
-r:建立系统账号,系统账号默认不会主动建立家目录。更多的可选参数可通过man useradd
查看
useradd -D
可查看useradd的默认值;
如果不允许用户登录系统获取shell,可将SHELL参数设置成/sbin/nologin
useradd这个程序在建立linux上的账号时,至少会参考:
/etc/default/useradd
/etc/login.defs
/etc/skel/*
这些文件
2.设置密码
passwd [--stdin] [账号名称]
<==所有人都可以修改自己的密码
passwd [-l] [-u] [--stdin] [-S] \
> [-n 日数] [-x 日数] [-w 日数] [-i 日期] 账号
<==root功能
选项参数:
--stdin :用前一个管道的输入作为密码输入,在shell脚本很方便(Centos有,其他发行版不一定有这个可选参数)
-l :是 Lock 的意思,会将/etc/shadow 第二栏最前面加上 ! 使密码失效;
-u :与l相对,是 Unlock 的意思!
-S :列出密码的相关参数。
-n :shadow 的第 4 栏位,多久不可修改密码
-x :shadow 的第 5 栏位,多久內必须修改密码
-w :shadow 的第 6 栏位,密码过期前的警告天数
-i :shadow 的第 7 栏位,密码失效天数
3.chage(更详细的密码参数显示功能)
chage [-ldEImMW] 账号名
参数意义man chage
查看。
chage有一个很棒的功能,如果想让用户在第一次登录时,强制他们一定要修改密码后才能登录使用系统资源,可这样处理:
useradd test
echo "test" | passwd --stdin test
chage -d 0 test
chage -l test | head -n 3
上述命令在Centos 7可执行,其他发行版方法会有所不同。
4.usermod(对账号相关数据进行微调)
usermod [-cdegGlsuLU] username
参数意义man usermod
查看。
5.删除用户数据
userdel [-r] username
-r:连同使用者的家目录一起删掉
注意:①如果某账号是暂时不使用,不一定要删除,可将/etc/shadow的账号失效日期(第八字段)设置为0,相关数据都会保留下来;
②在删除账号前,先用find / -user username
查出整个系统内属于username的文件,然后再删除。
6.查询自己或其他人的相关UID/GID等信息
id [username]
7.finger(查看用户相关信息)
新的版本已经默认不安装这个软件了。
8.chfn(修改/etc/passwd第五栏位)
chfn [-foph] 账号名
9.chsh
chsh [-ls]
-l:列出系统可用的shell,是/etc/shells的内容
-s:设置修改自己的shell
chfn与chsh这两个命令,都能让一般用户修改/etc/passwd这个系统文件,所以这两个文件的权限一定是SUID的功能。
9.新增,修改与删除用户组
groupadd [-g gid] [-r] 用户组名
-r:建立系统用户组
groupmod [-g gid] [-n group_name] 用户组名
-g:修改现有的GID数字
-n:修改用户组名称
groupdel [groupname]
10.用户组管理员
除了系统管理员,也可让某个用户组建立一个管理员,管理账号加入/移出改用户组。
gpasswd groupname
设置groupname密码
gpasswd [-A user1,...] [-M user3,...] groupname
gpasswd [-rR] groupname
-A:将groupname的管理权交给后面的使用者
-M:将某些账号加入用户组
-r:将groupname的密码删除
-R:让groupname的密码栏失效
-a:将使用者加入这个用户组
-d:将使用者删除出这个用户组
主机的详细权限规划:ACL的使用
ACL中文译为访问控制列表,主要提供传统的属主、所属用户组、其他人的读、写、执行权限之外的详细权限设置。
ACL可以针对单一用户、单一文件或目录进行rwx的权限设置。
1.ACL的设置
setfacl [-bkRd] [{-m|-x} acl参数] 目标文件名
-m:设置acl参数,不可与-x合用
-x:删除后续的acl参数,不可与-m合用
-b:删除所有acl参数
-k:删除默认的acl参数
-R:递归设置acl参数(子目录)
-d:设置默认acl参数,只对目录有效,且在该目录下新建的数据(含文件)会继承此默认值。
①针对特定使用者
setfacl -m u:[使用者账号列表]:[rwx] 目标文件名
如果是u::[rwx],表示设置的是该文件拥有者
②针对单一用户组的权限设置
setfacl -m g:[用户组列表]:[rwx] 目标文件名
③针对有效权限(effective permission)的设置
setfacl -m m:[rwx] 目标文件名
用户或用户组所设置的权限必须存在于mask的权限设置内才有效。
注意:在设置没有任何权限的ACL语法中,权限的字段不可留白,应加上一个减号(-)。
2.查看acl
getfacl filename
用户身份切换
1.su
su [-lm] [-c 命令] [username]
-:单纯使用-如(su -)代表使用login-shell的变量文件读取方式登录系统。
若username为空,则代表切换root身份
-l:后面接使用者账号,也是login-shell方式
-m:-m与-p一样,表示使用目前的环境配置
-c:仅进行一次命令,执行完毕恢复原来身份
注意:单纯使用su
切换为root身份,读取的变量设置方式为非登录shell的方式,这种方式很多原来的变量都不会被修改。一般推荐用su -
方式切换root。
2.sudo
sudo [-b] [-u 新使用者账号] [命令]
-b:将后续的命令放到后台执行,不与当前的shell产生影响
-u:后面接切换的使用者,如无此项代表切换root
示例:以sshd身份创建文件
sudo -u sshd touch /tmp/mysshd
ll /tmp/mysshd
-rw-r--r--. 1 sshd sshd 0 Jul 21 23:37 /tmp/mysshd
※仅有规范到/etc/sudoers文件内的用户才能执行sudo命令,要通过visudo去修改这个文件
visudo的设置:
①单一用户可使用root所有命令,与sudoers文件语法
比如:让vbird1可以使用root的任何命令
[root@study ~]# visudo
....(前面省略)....
root ALL=(ALL) ALL <==找到这一行,大约在第98行
vbird1 ALL=(ALL) ALL <==新增的
....(底下省略)....
上面的解释:
使用者账号 登陆者的来源主机名称=(可切换的身份) 可执行的命令
②利用wheel用户组(也可改成自定义组)以及免密码的功能处理visudo
[root@study ~]# visudo
....(前面省略)....
%wheel ALL=(ALL) ALL <==大约在 106 行左右,请将这行的 # 拿掉,在最左邊加上 % ,代表后面接的是一個(群组)之意!
[root@study ~]# usermod -a -G wheel pro1
<==将 pro1 加入 wheel 的支持
[root@study ~]# visudo
....(前面省略)....
%wheel ALL=(ALL) NOPASSWD: ALL <==大约在 109 行左右,请将 # 拿掉!
即可实现wheel组的用户不需要密码登录sudo。
③有限制的命令操作
[root@study ~]# visudo
<==注意是 root 身份
myuser1 ALL=(root) /usr/bin/passwd <==最后指令务必用绝对路径
④通过别名创建visudo(别名可以是账户,命令,主机;都需要大写)
[root@study ~]# visudo <==注意是 root 身份
User_Alias ADMPW = pro1, pro2, pro3, myuser1, myuser2
Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
ADMPW ALL=(root) ADMPWCOM
好好理解这个别名的设置,通过别名,可以将多用户加入到管理员行列,而不需要一个一个设置。
⑤sudo的时间间隔
两次执行sudo的间隔在5分钟内,再次执行sudo时不需要密码。
⑥sudo搭配su的使用方式
[root@study ~]# visudo
User_Alias ADMINS = pro1, pro2, pro3, myuser1
ADMINS ALL=(root) /bin/su -
这样设置后,上述四个人只要输入sudo su -
并且输入自己的密码,立刻变成root身份,不需要root密码。这是实际环境中,多人公用一台主机常用的技巧。
用户的特殊shell与PAM模块
1.特殊的shell:/sbin/nologin
系统账号的shell就是使用/sbin/nologin,重点在于系统账号是无法登陆的。
这里无法登陆指的是:这个用户无法使用bash或其他shell来登录系统,并不是说这个账号无法使用其他的系统资源。
2.PAM模块(插入式验证模块)
PAM可以说是一套应用程序编程接口(API),他提供了一连串的验证机制,只要用户将验证阶段的需求告知PAM后,PAM就能返回用户验证的结果(成功或失败)。
※遇到远程连接机制无法用root登录时,可试下从PAM模块中找找原因。
PAM模块与其他程序的相关性
评论区