8.用户管理
8.1 用户
用户组,用于方便地指派权限。
用户和用户组都可看作标识符。进程可看作用户的代理
每个用户都有uid,每个组都有gid。
uid存储在/etc/passwd,gid存储在/etc/group。
计算机对用户名称进行解析转换为uid
用户密码存储在/etc/shadow里,即影子口令
组也有密码,存储在/etc/gshadow
3个重要文件:/etc/passwd,/etc/gshadow,/etc/group。
添加用户实际操作这三个文件
用户类别:管理员(id为0)和普通用户(1-65536)
普通用户又分为系统用户(1-499)和一般用户(500-65535)。
{
管
理
员
i
d
:
0
普
通
用
户
i
d
:
1
−
65536
{
系
统
用
户
i
d
:
1
−
499
一
般
用
户
i
d
:
500
−
65535
\begin{cases}管理员 & id:0 \\普通用户 & id:1-65536 \begin{cases}系统用户 & id:1-499 \\一般用户 & id:500-65535 \end{cases} \end{cases}\\
⎩⎪⎨⎪⎧管理员普通用户id:0id:1−65536{系统用户一般用户id:1−499id:500−65535
系统用户可运行后台进程,不需要(或者说不允许)登录系统。
用户组分为管理员组和普通组;普通组分为系统组和一般组。
用户组也可以分为基本组和私有组。
- 私有组:创建用户时没有指定属组则自动创建一个与用户同名的组。
- 基本组:用户的默认组。
- 附加组,或者叫额外组:默认组以外的其它组。
举例:
一个进程,用户为foo,属组为foo。
访问对象a.txt:764 属主bar,属组foo,
这里,用户与属主不一样,用户foo属于对象属组,以权限6访问。
8.2 权限
关于权限rwx:
- r:可以对目录执行ls
- w:可以创建、编辑文件
- x:可执行;可以cd进入目录,也可以ls -l查看详细信息。
一般目录必须有x权限,文件一般不建议有x权限。
三组用户使用能力:所有者,属组,其他用户。简称ugo(a),a代表all。
安全上下文(secure context),暂时简单理解为访问控制属性。
/etc/shadow
权限为400;
ls -l `which passwd`,权限为755,u=rws,特殊权限s使得普通用户可以修改密码。
umask
touch生成文件的权限由umask遮罩码决定,
- 文件权限=666-umask
- 目录权限=777-umask
umask xxx
可以设置码值
文件默认没有执行权限,若有,则权限+1.
常用umask:027
8.3 passwd
whatis passwd
查看
man 5 passwd
显示字段描述
用户名:加密密码:uid:gid:注释:家目录:默认shell
关于这里的shell,/etc/shells保存了所有合法shell。
8.4 shadow
man 5 shadow
查看字段
$x$y$z
美元符分隔,x为加密方式,y为salt,z为密码。
例如,x为1时,md5加密,md5sum命令可计算该值。
加密
有三种:
- 对称
- 公钥
- 单向(散列/指纹)
单向加密主要的有:md5(message digest),sha(secure hash algorithm)
8.5 管理命令
用户管理命令
useradd,userdel,usermod,passwd,chsh,chfn,finger,id,chage
组管理命令
groupadd,groupdel,groupmod,gpasswd
权限管理命令
chown,chgrp,chmod,umask
用户管理
useradd [option] USERNAME
-u #uid
-g #gid基本组(事先存在)
-G #gid,gid,... 指定附加组,可有多个
-c #"COMMENT"
-d #指定家目录
-s #指定shell路径(/etc/shells中的),shell为nologin时无法登录,shell可用echo $SHELL查看
-m #创建家目录,详情查看man
-M #不创建家目录,su后将没有目录环境
-r #添加系统用户,无家目录,单独使用
userdel [option] USERNAME
#默认不删除家目录
-r #同时删除家目录
id #查看账户属性信息
-u -g -G
-n #可与以上3个搭配
finger USERNAME #查看用户账号信息
usermod #修改用户属性
-u #改uid
-g #gid基本组(事先存在)
-G #附加组;一般搭配-a为追加,不覆盖原来的附加组
-c #改变注释
-d #改变家目录;一般搭配-m同时移动原来家目录的文件。
-l #改变用户名
-L #锁定用户,类似禁用,-U解锁;
#其它 -e -f
chsh USERNAME #改变shell
chfn(finger) #修改注释信息
passwd #改密码
#管理员可修改其他用户密码
--stdin eg. echo "abc" | passwd --stdin USERNAME
-l -u #锁定,解锁
-d #删除密码
pwck #检查密码文件完整性
组管理
groupadd
-g gid
-r #添加系统组
groupmod
-g GID
-n GRPNAME
groupdel
gpasswd #添加密码
newgrp #临时切换到其他组
chage #改变密码过期信息
-d #最近一次修改时间
-E #过期时间
-I #非活动时间
-m -M #最短/长使用期限
-W #警告时间
权限管理
chown USERNAME file
#改变属主
-R #对于目录中的文件,可以递归修改
--reference=/path/file file,... 参考修改,使属主属组相同
#也可改变属组
chown USERNAME:GROUPNAME #冒号也可改为点号'.'
chown :GROUPNAME
chgrp GRPNAME file
#也支持-R
chmod MOD file,...
-R,--reference #也支持
#若MOD为5,则变为------r-x
chmod ug=rx file
chmod g=r,o=r file
chmod u+x,g-x file
chmod +x file #三类用户全部+x
练习
1.新建没有家目录的用户foobar
useradd -M foobar
2.复制/etc/skel为/home/foobar
cp -r /etc/skel /home/foobar
3.改变/home/foobar及其内部文件的属主属组均为foobar
chown -R foobar:foobar /home/foobar
ls -ld /home/foobar
查看
4./home/foobar及其内部的文件,设置属组和其它用户没有任何访问权限
chmod -R go= /home/foobar
即家目录权限700
su foobar
cd ~才会进入foobar目录
5.手动添加用户foobar(5000),基本组foobar(5000),附加组mygroup.
vim /etc/group
foobar:x:5000:
mygroup:x:5000:foobar
vim /etc/passwd
foobar:x:5000:5000:FOOBAR:/home/foobar:/bin/bash
vim /etc/shadow
foobar::17918:0:99999:7:::
#时间天数17918可以这样计算:先date +%s得到秒数,使用计算器bc,秒数/24/60/60
#现在没有密码,只能su切换,不能登录。手动添加密码步骤如下。
openssl passwd -1 -salt 'cafebabe'生成密码
#粘贴到shadow密码字段。
cp -r /etc/skel/ /home/foobar
chown -R foobar:foobar /home/foobar
chmod go= /home/foobar/
su后id验证。
8.6 shell
对于用户,shell有两种,
- 登录式shell:
su - USERNAME
su -l USER NAME
以及通过某终端登录。 - 非登录式shell:
su USERNAME
图形终端下打开命令窗口
自动执行的shell脚本
8.7 配置文件
bash配置文件:
- 全局配置
/etc/profile,/etc/profile.d/*.sh, /etc/bashrc
对所有用户生效 - 个人配置
~/.bash_profile, ~/.bashrc
profile类文件用来设定环境变量、运行命令或脚本。
bashrc类文件设定本地变量、定义别名。
登录式shell读取配置文件顺序:
/etc/profile->/etc/profile.d/*.sh->~/.bash_profile->~/.bashrc->/etc/bashrc
非登录式shell读取配置文件顺序:
~/.bashrc->/etc/bashrc->/etc/profile.d/*.sh
所以,类似alias等习惯操作,可以修改bashrc
可以把bash理解为脚本解释器。