系统管理入门 - 用户与组
内容提要
本文介绍Linux用户与组管理基础:用useradd创建用户、groupadd创建组、usermod将用户加入组,并用grep或members查看组成员;同时讲解目录粘滞位的作用与设置方法,以及setuid的含义、设置方式及安全风险。
延伸解读
粘滞位:共享目录的权限边界
粘滞位用于目录,设置后只有文件所有者、目录所有者或root可以重命名或删除目录内的文件。未设置时,任何对该目录有写和执行权限的用户都能删除或重命名其中文件,无论文件属于谁。例如教师创建带粘滞位的/homework目录,学生可上传作业但不能删除他人作业。设置命令为chmod +t或chmod 1755,目录权限末尾显示t;若其他用户无执行权限则显示大写T。
setuid:便利与风险并存
setuid的含义是:无论谁运行该程序,程序都以文件所有者的身份运行,而非执行者身份。设置命令为chmod u+s。文章指出这很危险,并举例:一个以root权限设置setuid的shell脚本showfile.sh内部执行ls -l | sort,攻击者可在$PATH靠前位置放置名为ls的恶意脚本,当showfile.sh运行时就会以root权限执行恶意代码,导致重要文件被删除。因此应谨慎使用setuid。
用户与组管理命令要点
创建用户可用useradd,建议指定家目录和组,如useradd -m -d <HomeDir> -g <Group> username,其中-m创建家目录,-d指定目录。注意useradd与adduser不同,后者是更高级的实现。创建组用groupadd groupname。将用户加入组用usermod -a -G groupname username,-a表示追加。查看组成员没有内置命令,可用grep '^groupname' /etc/group或安装members后使用members groupname。
Q&A
Linux下如何创建一个新用户并指定其家目录和所属组?
使用useradd命令,例如:useradd -m -d <HomeDir> -g <Group> username。其中-m表示创建家目录,-d指定家目录路径,-g指定所属组。建议明确指定家目录和组。
如何将已有用户添加到一个附加组中?
使用usermod命令,格式为:usermod -a -G groupname username。其中-a表示追加(append),-G指定附加组。
Linux中如何查看某个组里包含哪些用户?
可以使用grep命令查看/etc/group文件:grep '^groupname' /etc/group;或者安装members工具后使用:members groupname。
目录的粘滞位(sticky bit)有什么作用?
粘滞位用于目录,设置后只有文件的所有者、目录的所有者或root用户才能重命名或删除目录中的文件。未设置时,任何对该目录有写和执行权限的用户都可以重命名或删除其中的文件,无论文件所有者是谁。
如何设置目录的粘滞位?设置后目录权限显示会有什么变化?
使用chmod +t /path/to/directory或chmod 1755 /path/to/directory。设置后,目录权限字符串的最后一位会变为t(如drwxr-xr-t),如果其他人没有执行权限则显示为T(如drwxr-xr-T)。
setuid权限有什么含义?为什么说它危险?
setuid意味着无论谁运行该程序,程序都以程序所有者的身份运行,而不是执行者的身份。如果程序所有者是root,则程序以root权限运行,可能被恶意利用。例如,一个setuid为root的脚本如果调用了用户可控的命令(如ls),攻击者可以通过修改PATH环境变量来执行恶意代码,从而删除重要文件。