1 用户和用户组基础
1.1 /etc/passwd
Linux系统中的每个用户都在/etc/passwd文件中有一个对应的记录行,它记录了这个用户的一些基本属性。
这个文件对所有用户都是可读的。它的内容类似下面的例子:
# cat /etc/passwd
root:x:0:0:Superuser:/:
daemon:x:1:1:System daemons:/etc:
bin:x:2:2:Owner of system commands:/bin:
sys:x:3:3:Owner of system files:/usr/sys:
adm:x:4:4:System accounting:/usr/adm:
uucp:x:5:5:UUCP administrator:/usr/lib/uucp:
auth:x:7:21:Authentication administrator:/tcb/files/auth:
cron:x:9:16:Cron daemon:/usr/spool/cron:
listen:x:37:4:Network daemon:/usr/net/nls:
lp:x:71:18:Printer administrator:/usr/spool/lp:
sam:x:200:50:Sam san:/home/sam:/bin/sh
从上面的例子我们可以看到,/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
1.2 /etc/shadow
/etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生
它的文件格式与/etc/passwd类似,由若干个字段组成,字段之间用":"隔开。这些字段是:
登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
cat /etc/shadow
root:Dnakfw28zf38w:8764:0:168:7:::
- "登录名"是与/etc/passwd文件中的登录名相一致的用户账号
- "口令"字段存放的是加密后的用户口令字,长度为13个字符。如果为空,则对应用户没有口令,登录时不需要口令;如果含有不属于集合 { ./0-9A-Za-z }中的字符,则对应的用户不能登录。
- "最后一次修改时间"表示的是从某个时刻起,到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。例如在SCO Linux 中,这个时间起点是1970年1月1日。
- "最小时间间隔"指的是两次修改口令之间所需的最小天数。
- "最大时间间隔"指的是口令保持有效的最大天数。
- "警告时间"字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
- "不活动时间"表示的是用户没有登录活动但账号仍能保持有效的最大天数。
- "失效时间"字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。
1.3 /etc/group
用户组的所有信息都存放在/etc/group文件中。此文件的格式也类似于/etc/passwd文件,由冒号(:)隔开若干个字段,这些字段有:
组名:口令:组标识号:组内用户列表
cat /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,sam
2 用户管理
2.1 useradd
#创建系统账号
useradd -r username
#例子
useradd -g user007 -d /home/user007 -G sysadmin -s /bin/sh -e 2024-08-09 user007
#创建程序用户,不创建主目录且不允许登录
useradd -M -s /sbin/nologin
参数说明:
- 选项:
- -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
- -g 用户组 指定用户所属的用户组。
- -G 用户组,用户组 指定用户所属的附加组。
- -s Shell文件 指定用户的登录Shell。
- -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
- -e 指定用户失效时间
- -f 指定密码过期后。账户将被彻底禁用的天数
- -m 自动创建主目录
- -M 不创建用户主目录
2.2 chage
#修改过期日期
chage -E 2024-08-10 username
#查看用户信息
chage -l username
2.3 usermod
#将username加入到用户组
usermod -G groupname username
2.4 userdel
#强制删除用户,即使在登录状态
userdel -f username
#删除用户,家目录及用户邮箱一起删除
userdel -r username
2.5 passwd
#设置用户密码
passwd username
#删除用户密码
passwd -d username
#锁定用户密码(账号可用,只是无法通过密码验证)
passwd -l username
#解锁密码
passwd - username
无交互式密码设置
echo "12345" | passwd --stdin user001
2.6 id
#显示uid,gid
id userna
2.7 visudo
# !为排除命令
test ALL=(ALL) NOPASSWD: ALL,!/usr/bin/passwd
2.8 groupadd
groupadd
2.9 groupdel
group groupname
3 umask
umask 目录为777,文件为666
文件的权限为为目录去掉X权限
设置路径 :
用户: $HOME/.bashrc
全局:/etc/.bashrc
4 特殊权限
SUID作用:
a、SUID权限仅对二进制程序(binary program)有效;b、执行者对于该程序需要具有x的可执行权限;c、本权限仅在执行该程序的过程中有效(run-time);d、执行者将具有该程序拥有者(owner)的权限。
ls -al /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 Apr 1 2020 /usr/bin/passwd
s 为特殊权限标识具有执行权限,S表示没有执行权限。
sgid(Set GID)
对于文件,使用该命令的组群权限来运行
对于目录,在设置了 sgid 权限的目录中创建的文件会继承该目录的组群身份,创建一个子目录的话,不但会继承组群身份,还会继承sgid的特殊权限位。
ls -al /usr/bin/wall
-r-xr-sr-x. 1 root tty 15344 Jun 10 2014 /usr/bin/wall
Sbit
粘滞位(Sticky Bit ):在带有粘滞位的目录中的文件只能被文件的所属用户和根用户删除,不管该目录的写入权限是如何设置的(“ t ” 代表粘滞位)
为特殊权限标识具有执行权限,T表示没有执行权限
SUID/SGID/SBIT权限设置
和前面说的rwx差不多,也有两种方式,一种是字符方式,一种是数字方式。
4 为 SUID = u+s
2 为 SGID = g+s
1 为 SBIT = o+t
5 隐藏属性
chattr
#文件具有无法被修改,删除等属性
chattr +i test.txt
# 文件只能被追加内容且无法使用vim等打开
chattr +a test.txt
lsattr
lsattr test.txt