Linux的账号与用户组
用户识别UID与GID
每个登陆用户至少会获得两个ID一个是用户ID(UID)一个是组ID(GID)
用户账号:/etc/passwd /etc/shadow(使用man 4 passwd/shadow 查看帮助)
/etc/passwd
每一行代表一个账号,里面很多有很多账号本来就是系统必要的,称为
系统账号 如 bin daemon adm nobody 系统正常工作需要这些账号
root 😡 :0 :0 :root :/root :/bin/bash
账户名称 密码 UID GID 用户信息说明 家目录 默认shell
密码:早期的unix密码放在这里因为安全问题换地儿了
UID的限制
ID范围 该ID用户的限制
0 代表这个账号是 “系统管理员”(不一定是root)
1-499 系统保留的ID,供系统使用,只是一个习惯问题
默认1-99给系统使用100-499供一些服务来使用
500-65535 给一般用户使用,2.6以上的内核支持4294967295个UID
用户信息说明栏:用来解释这个账号的含义
shell:有一个shell可以代替让账号无法登陆的命令 /sbin/nologin
/etc/shadow
/etc/passwd 权限必须设置为 -rw-r--r--
shadow以:作为分隔符
duxing :$1$gSQJIRYN$AyqWHAMFif9Dpbh.PlW/61 :16740
账户名称 密码 最近更改日期
:0 :99999 :7
密码不可更改的天数 密码需要重新更改的天数 密码期限前警告天数
: : :
密码过期的宽限天数 账号时效日期 保留
这个文件的第一栏是账号名称,与passwd对应
密码:经过编码之后的密码,如果密码栏第一个为!或*表示并不会
用来登录,加个*就无法登录了
最近更改密码日期:1970年1月1日作为1
密码需要重新更改的天数:必须要在这个时间之内重新设置
密码更改期限前警告日期:当密码快到到上面的日期发出警告
密码过期的宽限时间:密码失效后用户可以在这个时间之内用
这个过期的密码登录
账号时效日期:与第三个字段一样,到了这个日期账号就无法使用了
保留:以后可能会有新功能
关于用户组:有效与初始用户组,group,newgrp
/etc/group
root 😡 :0 :
用户组名称 用户组密码 GID 支持账号名称
用户组密码:通常不需要设置,密码是记录在gshadow文件中的
支持的账号名称:加入这个用户组里的所有账号多个可以加",duxing"
注意不要有空格
有效用户组(effective group)与初始用户组(inital group)
在passwd文件中的第四栏GID就是初始用户组,用户的初始用户组,
不需要加入/etc/group文件中
groups指令可以查询用户登录的用户在哪些用户组中
其中第一个输出的为有效用户组(建立文件时文件所属的用户组)
可以使用newgrp更改有效用户组,更改后等于登录一个新shell,离开
新的有效用户组可以使用exit
/etc/gshadow
adm :* : :syslog,duxing
用户组名称 密码 用户组管理员账号 该用户组所属的成员账号
账号管理
新增与删除用户:useradd、相关设置文件,passwd,usermod,userdel
useradd 新增用户
useradd [-u UID] [-g initial_group] [-G other_group] \
> -[Mm] [-c 说明栏] [-d home] [-s shell] username
选项:
-u 后面接UID 直接给该账号指定一个UID
-g 后面可以接的用户组名称就是初始用户组passwd第四个字段
-G 后面接的用户组名称是这个账号支持的用户组 会修改group文件
-M 强制,不要建立用户家目录
-m 强制,要建立家目录
-c 这个是passwd第五栏的内容,随便填写
-d 制定一个目录成家目录,而不要使用默认值
-r 建立一个系统账号,这个账号的UID会有限制
-s 后面接一个shell,默认是/bin/bash
可以通过passwd更改密码
相关设置文件
使用useradd去增加用户时,一些在/etc/passwd中的值会参考
/etc/default/useradd文件 文件内容大致如下:
GROUP=100 默认的用户组
HOME=/home 默认的家目录所在
INACTIVE=-1 /etc/shadow第七栏
EXPIRE= /etc/shadow第八栏
SHELL=/bin/bash 默认的shell
SKEL=/etc/skel 用户家目录的内容数据参考目录
关于用户组的建立机制
不同系统不同处理有的
建立账户时若无指定初始用户组,则系统自动创建与账户名相同的组
有的
不创建新的而是/etc/default/useradd GROUP设置值
关于用户家目录的参考/etc/skl/*
可以通过更改这个目录下的内容,达到新建用户的设置与你设置的相同
关于UID/GID的设置
与密码及UID/GID有关的设置文件在/etc/login.defs中
MAIL_DIR /var/spool/mail 用户默认的邮件信箱放置目录
PASS_MAX_DAYS 99999 /etc/shadow内第五栏
PASS_MIN_DAYS 0 /etc/shadow内第四栏
PASS_MIN_LEN 5 /密码最短的长度
PASS_WARN_AGE 7 /etc/shadow内的第六栏
UID_MIN 500 用户最小的UID
...
CREATE_HOME yes 在不加-M及-m时是否主动建立用户家目录
useradd -r -r参数会查找500以下最大的UID在此基础上+1创建新用户
passwd
新建立的账号是不能登录的要通过passwd设置密码
想修改自己的密码后面不需要加参数,修改别人的密码加上用户名
选项:
-l 将用户的密码锁住
-u 解锁
-n 后面可以接天数 最短天数 /etc/shadow 第四栏
-x 后面可以接天数 最长天数 /etc/shadow 第五栏
-w 后面可以接天数 警告天数 /etc/shadow 第六栏
-S 显示当前用户的相关信息
usermod 修改错误的设置数据
选项 :
-c 后面可以接账号的说明,即/etc/passwd第五栏的说明符
-d 后面接账号的家目录,即,修改/etc/passwd第六栏
-e 后面可以接日期,格式:YYYY-MM-DD /etc/passwd第八个字段
-g 后面接group name /etc/passwd GID字段
-G 后面接group name 修改用户能够支持的组 修改/etc/group文件
-l 后面接账号名称,修改账号名称
-s 后面接shell的实际文件例如 /bin/bash
-u 后面接UID数字
-L 暂时将用户的密码冻结,让他无法登录
-U 将/etc/shadow密码栏!去掉 即解冻
userdel 删除用户
选项:
-r 连同用户家目录一起删除
用户功能:chfn chsh
chsh 更改用户的shell
选项:
-l 列出当前系统上可用的shell,就是/etc/shells内容
-s 设置修改自己的shell
注:在我的ubuntu中无法使用这两个选项
chfn
选项:
-f 后面可以接完整的名字
-o 办公室的房间号码
-p 办公室的电话号码
-h 家里的电话号码
finger
选项:
-s 使用长串数据输出格式
在自己的home目录下建立.plan内容可以显示在最后一项中
新增与删除用户组
groupadd
选项:
-g 后面接某个特定的GID 用来直接给予某个GID
-r 建立系统用户组 与 /etc/login/defs内的GID_MIN有关
groupmod
选项:
-g 修改已有的GID数字 groupmod -g 1001 test
-n 修改已有的用户组名称 groupmod -n newname oldname
groupdel
选项:
必须确定没有任何用户属于这一个用户组才可以删除这个用户组
gpassed
root可用
gpasswd groupname
gpasswd [-A user1,...] [-M user3,user4...] groupname
gpasswd [-rR] groupname
选项:
没有任何选项表示给groupname一个密码
-A 将groupname的主动权交给后面的用户管理
-M 将某些账号加入这个用户组
-r 将groupname的密码删除
-R 让groupname的密码栏失效,所以newgrp就不能使用了
组管理员可用
gpasswd [-ad] user groupname
选项:
-a 将某用户加入到groupname用户组中
-d 将某个用户从groupname用户组中删除(管理员可以删除管理员)
newgrp 会额外以另一个login来让用户登陆shell,并将有效用户改为
后面的参数
密码管理:passwd
切换用户身份
su
选项:
- 如果执行su - 表示该用户想要变换身份成为root 且使用root的环境
-l 可使用变换者身份的环境
-m=-p 使用当前环境设置,而不去读取新用户的设置文件
-c 仅执行一次命令
su后面不加用户默认是root
sudo
使用sudo系统会去/etc/sudoers文件查看用户是否具有sudo的权限
root执行sudo 不需要输入密码
选项:
-u 后面可以接用户的账号名称,或者UID 如:sudo -u #500
sudo 和 su一起使用 sudo su -
visudo
用户账号 登陆的主机 = (可以变换的身份) 可以执行的命令
%开头表示用户组,这个用户组里的所有成员都会具有该权限
比如让wheel用户组里的用户使用sudo不用输入密码可以如下输入:
%wheel ALL = (ALL) NOPASSWD: ALL
用户的特殊shell与PAM模块
特殊的shell、/sbin/nologin
/sbin/nologin 或者 /usr/sbin/nologin 可以让用户不能登录
/etc/nologin.txt可以修改提示信息(我的UBUNTU不是这么修改)
PAM模块:/etc/nologin/ /etc/securetty
重要信息:
PAM相关的设置文件一般放在:/etc/pan.d
更多的环境相关设置放在/etc/security/*中
PAM是通过自己提供的相关模块来进行验证,
模块放在/lib/security/*中
PAM的设置文件设置规范
/etc/pan.d/passwd
每个动作都分成四段:
验证的类别 验证的控制标准 使用的PAM模块 该模块能使用的参数
验证类别分成4种:
auth 用来进行用户的身份验证,通常是需要密码来检验
account 检验用户是否具有正确的权限
session 管理用户正确使用该程序时的环境设置
password 提供验证的修改工作
验证的控制标准
required 这种状态,模块的验证必须成功,否则传回failure
信息,不论是否成功,下面的工作都继续
optional 显示信息,不是用在验证方面
sufficent 顺利通过验证时立刻给原程序发送信息,并中断PAM
/etc/securetty
主要功能是预防不安全的登录环境,主要针对root用户的身份
将/etc/pam.d/login中关于pam_securetty.so模块的行注释掉
或者将/etc/securetty文件删除可以支持telnet使用root
/etc/nologin
如果这个文件存在,那么所有的用户都无法登录,并且会看到这个文件
的内容提示,一直到这个文件被删除
/etc/security/*
更多的PAM模块设置放在这里
lINUX系统的用户对话与邮件的使用
查询用户:w who last lastlog
lastlog 会去读取/var/log/lastlog文件
用户对话:talk mesg write wall
可以使用mesg y 开启write发送的消息
用户邮件信箱:mail
mail
P311
手动新增用户
一些检查工具
pwck 检查/etc/passwd账号设置文件的信息 以及实际家目录是否存在
还可以检查/etc/passwd /etc/shadow的信息是否一致
如果/etc/passwd文件内的字段错误,还会提示用户修改
直接使用没有参数
pwconv 将/etc/passwd内的账号与密码移到/etc/shadow中
用useradd创建的用户没有任何效果,但是手动设置的账号有用
pwunconv 将shadow内的密码栏数据写会passwd 这个命令最好不要用,
因为它会删除/etc/shadow
chpasswd 读入未加密前的密码,并且经过加密后,将加密后的数据写入
/etc/shadow中,常用在大量建立账号的情况可以由标准输入
读入数据,每个数据的格式是“username:passwd”
例如“test:12345678”
-m 可以使用md5加密
手动建立特殊账号,如:纯数字账号的建立(不建议使用纯数字账号)
步骤:
1.建立所需要的用户组(vi /etc/group)
如:normalgroup:x:520:
2.将/etc/group与/etc/gshadow同步(grpconv)
3.建立账号的各个属性(vi /etc/passwd)
如:normalgroup:x:700:520::/home/normaluser:bin/bash
4.将/etc/passwd与/etc/shadow同步(pwconv)
5.建立该账号的密码(passwd accountname)
6.建立用户家目录(cp -a /etc/skel /home/accountname)
7.更改用户家目录属性(choen -R accountname.group /home/accountname)
如:chown -R normaluser:normaluser /home/normaluser
不开放终端登录的账号(ex > mail account)
因为不需要登录,所以shell指定为nologin 因为不需要登录,所以不要
家目录
手动删除账户
步骤:
1.先用find / -user accont 找出所有相关的账号文件,灭之
2.将/etc/passwd与/etc/shadow内相关数据删除
3.将/etc/group与/etc/gshadow内的相关数据删除
4.将/home下面关于该账号的目录删除
5.到/var/pool/mail以及/var/spool/cron中相关的用户文件删除
建立账号的规范