Linux 用户和组管理
本地用户管理
综合案例
手动创建一个用户
# 1 添加账户
[root@centos7 ~ 16:51:13]# vim /etc/passwd
# 最后一行添加如下内容,注意uid要在原有的基础上增加1
zhangsan:x:1002:1002::/home/zhangsan:/bin/bash
# 2 添加组
[root@centos7 ~ 16:51:35]# vim /etc/group
# 最后一行添加如下内容
zhangsan:x:1002:
# 3 添加密码
[root@centos7 ~ 16:51:57]# vim /etc/shadow
# 最后一行添加如下内容
zhangsan:$6$FgUNKn74yoEDbcXD$pxDk9AEhsxkJGYi76Rv91zLy5LRns8olgAyGuNssQYG07ypaidhuX0gHAU4hrNi9Zp9A7vtMEvbyzCQ0e/gbk1::0:99999:7:::
# 4 准备家目录
[root@centos7 ~ 16:52:22]# cp -r /etc/skel/ /home/zhangsan
# 修改zhangsan家目录所属有zhangsan用户和组
[root@centos7 ~ 16:52:44]# chown zhangsan:zhangsan /home/zhangsan
[root@centos7 ~ 16:53:06]# ll -d /home/zhangsan
drwxr-xr-x. 16 zhangsan zhangsan 4096 7月 19 14:00 zhangsan
# 测试
[root@centos7 ~ 16:53:28]# ssh zhangsan@localhost
bash 提示符变为初始字符
提示符如下: bash-4.2$
模拟:
[root@centos7 ~ 16:53:50]# mv /etc/bashrc{,.ori}
[root@centos7 ~ 16:54:12]# bash
bash-4.2#
原因:nologin shell打开的时候执行 /etc/bashrc 配置。
恢复:
bash-4.2# mv /etc/bashrc{.ori,}
bash-4.2# bash
[root@centos7 ~ 16:54:40]#
误删用户家目录
故障:
[root@centos7 ~ 16:55:02]# ssh zhangsan@localhost
zhangsan@localhost's password:
Activate the web console with: systemctl enable –now cockpit.socket
Last login: Fri Jul 19 14:13:47 2024 from ::1
Could not chdir to home directory /home/zhangsan: No such file or directory
-bash-4.2$
模拟:
[root@centos7 ~ 16:55:28]# rm -fr /home/zhangsan
解决
[root@centos7 ~ 16:55:50]# cp -r /etc/skel/ /home/zhangsan
[root@centos7 ~ 16:56:12]# chown zhangsan:zhangsan /home/zhangsan
没有权限切换家目录
故障
Could not chdir to home directory /home/zhangsan: Permission denied
-bash: /home/zhangsan/.bash_profile: 权限不够
模拟
[root@centos7 ~ 16:56:38]# chmod u=- /home/zhangsan
解决
[root@centos7 ~ 16:57:02]# chown -R zhangsan:zhangsan /home/zhangsan
[root@centos7 ~ 16:57:26]# chmod u=rwx /home/zhangsan
[root@centos7 ~ 16:57:50]# ll -d /home/zhangsan
drwx——. 3 zhangsan zhangsan 78 7月 19 14:17 /home/zhangsan
本地组管理
groupadd 命令
# 创建名称为 admin 的组
[root@centos7 ~ 16:58:18]# groupadd admin
# 创建名称为sysadmin的组,组id为2000
[root@centos7 ~ 16:58:42]# groupadd sysadmin -g 2000
# 验证
[root@centos7 ~ 16:59:06]# grep admin /etc/group
printadmin:x:997:
admin:x:1002:
sysadmin:x:2000:
groupmod 命令
# 修改组名称
[root@centos7 ~ 16:59:30]# groupmod –new-name admins admin
# 修改组id
[root@centos7 ~ 16:59:54]# groupmod -g 2002 admins
# 验证
[root@centos7 ~ 17:00:18]# grep 'admins' /etc/group
admins:x:2002:
groupdel 命令
[root@centos7 ~ 17:00:42]# groupdel sysadmin
[root@centos7 ~ 17:01:06]# grep sysadmin /etc/group
groupmems 命令
[root@centos7 ~ 17:01:30]# groupmems –help
用法:groupmems [选项] [动作]
选项:
-g, –group groupname 更改组 groupname,而不是用户的组(只 root)
-R, –root CHROOT_DIR chroot 到的目录
动作:
-a, –add username 将用户 username 添加到组成员中
-d, –delete username 从组的成员中删除用户 username
-h, –help 显示此帮助信息并推出
-p, –purge 从组中移除所有成员
-l, –list 列出组中的所有成员
# 添加成员
[root@centos7 ~ 17:01:56]# groupmems -g admins -a chenxin
[root@centos7 ~ 17:02:22]# groupmems -g admins -l
chenxin
[root@centos7 ~ 17:02:48]# id chenxin
uid=1000(chenxin) gid=1000(chenxin) 组=1000(chenxin),10(wheel),2002(admins)
# 删除成员
[root@centos7 ~ 17:03:14]# groupmems -g admins -d chenxin
[root@centos7 ~ 17:03:40]# groupmems -g admins -l
# 清空组中所有成员
[root@centos7 ~ 17:04:06]# groupmems -g admins -a chenxin
[root@centos7 ~ 17:04:32]# groupmems -g admins -p
课后练习
创建developer组,组id为2000
修改developer组名称为developers,组id为3000
创建developer1用户,并添加到组developers
将developer1用户从组developers中删除
删除组developers
# 1. 创建developer组,GID 2000
[root@centos7 ~ 17:04:58]# groupadd developer -g 2000
# 2. 改名+改GID
[root@centos7 ~ 17:05:24]# groupmod –new-name developers developer
[root@centos7 ~ 17:05:50]# groupmod -g 3000 developers
[root@centos7 ~ 17:06:16]# grep developers /etc/group
developers:x:3000:
# 3. 创建developer1并加入组
[root@centos7 ~ 17:06:42]# useradd developer1 -G developers
[root@centos7 ~ 17:07:08]# id developer1
uid=1001(developer1) gid=1001(developer1) 组=1001(developer1),3000(developers)
# 4. 从组中删除
[root@centos7 ~ 17:07:34]# groupmems -g developers -d developer1
[root@centos7 ~ 17:08:00]# groupmems -g developers -l
# 5. 删除组
[root@centos7 ~ 17:08:26]# groupdel developers
[root@centos7 ~ 17:08:52]# grep developers /etc/group
管理用户密码
shadow 文件
/etc/shadow 文件保存操作系统登录用户密码信息。
每行包含一个登录用户信息,以冒号分隔九个域。
示例:
[root@centos7 ~ 17:09:18]# grep chenxin /etc/shadow
chenxin:$6$m0OgWyIu$P2TF1pB8MO...J3LopEUdhmp/Ir/:19300:0:99999:7:::
解释如下:
-
login name:用户登录名。
-
encrypted password:加密的密码。
-
date of last password change:上一次密码更改日期,以距离1970-1-1过去的天数表示。设置为0,强制用户下次登录时更改密码。
-
minimum password age:最小密码生命周期。设置为0,密码可以随时更改。
-
maximum password age:最大密码生命周期。
-
password warning period:密码过期前,提前多少天告警。设置为0,不提示过期。
-
password inactivity period:密码过期后,非活跃天数,在期间密码仍可以使用。
-
account expiration date:账户过期时间,以距离1970-1-1过去的天数表示。
-
reserved field:保留域。
chage 命令
# 查看用户密码信息
[root@centos7 ~ 17:09:44]# chage -l chenxin
最近一次密码修改时间 :7月 18, 2026
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
# 修改用户密码要求
[root@centos7 ~ 17:10:10]# chage -M 100 chenxin
[root@centos7 ~ 17:10:36]# chage -l chenxin
最近一次密码修改时间 :7月 18, 2026
密码过期时间 :2月 16, 2023
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :100
[root@centos7 ~ 17:11:02]# chage -m 10 chenxin
[root@centos7 ~ 17:11:28]# chage -l chenxin
最近一次密码修改时间 :7月 18, 2026
密码过期时间 :2月 16, 2023
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :10
两次改变密码之间相距的最大天数 :100
在密码过期之前警告的天数 :7
[root@centos7 ~ 17:11:54]# chage -d 0 chenxin
# 验证
[root@centos7 ~ 17:12:20]# ssh chenxin@localhost
chenxin@localhost's password:
You are required to change your password immediately (root enforced)
Last login: Tue Nov 8 11:13:51 2026 from localhost
WARNING: Your password has expired.
You must change your password now and login again!
更改用户 chenxin 的密码 。
为 chenxin 更改 STRESS 密码。
(当前)UNIX 密码:
# 设置用户密码过期时间是过去的一个时间,以便确保用户密码过期,登录时强制用户更改密码
# 设置为1,确保密码很久未改动
[root@centos7 ~ 17:12:52]# chage -d 1 chenxin
# 设置用户账户过期时间是过去的一个时间,以便锁定用户账户
[root@centos7 ~ 17:13:18]# chage -E 1970-1-1 chenxin
usermod -p 更改用户密码
# 更改chenxin的密码与laowang一致
[root@centos7 ~ 17:13:44]# grep laowang /etc/shadow
laowang:$6$dQcDSqtz$Nboi6QLMzscWSLvnnRO86gm3XI/qbgfnK5zVv2Ix13EktQ97vwNsqQlrfI2K/b1mVnHNgzmMNIb0P4HnTugog/:19304:0:99999:7:::
[root@centos7 ~ 17:14:12]# usermod -p '$6$dQcDSqtz$Nboi6QLMzscWSLvnnRO86gm3XI/qbgfnK5zVv2Ix13EktQ97vwNsqQlrfI2K/b1mVnHNgzmMNIb0P4HnTugog/' chenxin
# 删除用户密码
[root@centos7 ~ 17:14:40]# usermod -p '' chenxin
usermod -s 限定用户shell
# 默认情况下,root用户可以切换到任何用户而且不需要密码
[root@centos7 ~ 17:15:08]# su – laowang
上一次登录:二 11月 8 11:19:14 CST 2022tty1 上
[laowang@centos7 ~]$ 登出
# 更改用户shell为 /sbin/nologin
[root@centos7 ~ 17:15:36]# usermod -s /sbin/nologin laowang
[root@centos7 ~ 17:16:04]# su – laowang
上一次登录:二 11月 8 11:21:23 CST 2022pts/0 上
This account is currently not available.
# 将用户shell改为/bin/bash
[root@centos7 ~ 17:16:32]# usermod -s /bin/bash laowang
usermod -L 锁定用户密码
等效于passwd -l
[root@centos7 ~ 17:17:00]# usermod -L laowang
# 输入正确的密码也无法登录
[chenxin@centos7 ~ 17:17:28]$ su – laowang
Password:
su: Authentication failure
[chenxin@centos7 ~ 17:17:56]$
usermod -U 解锁用户密码
等效于passwd -u
[root@centos7 ~ 17:18:24]# usermod -U laowang
# 输入正确的密码登录
[chenxin@centos7 ~ 17:18:52]$ su – laowang
Password:
[laowang@centos7 ~]$
passwd -d 删除密码
# 删除用户密码即可
[root@centos7 ~ 17:19:20]# passwd -d laowang
清除用户的密码 laowang。
passwd: 操作成功
用户登录的时候,输入用户名即可登录。
设置账户过期
等效于passwd -e
# 设置账户过期时间为过去的某一个日期
[root@centos7 ~ 17:19:48]# usermod -e 2024-7-18 laowang
# 或者
[root@centos7 ~ 17:20:16]# chage -E 2024-7-18 laowang
增加一个 uid 为 0 的用户
方法一
[root@centos7 ~ 17:20:44]# vim /etc/passwd
# 将自己的用户id该为0,此时chenxin用户可以行使root权限了
chenxin:x:0:1000:chenxin:/home/chenxin:/bin/bash
方法二
[root@centos7 ~ 17:21:12]# useradd -o -u 0 chenxin
[root@centos7 ~ 17:21:40]# id chenxin
uid=0(root) gid=0(root) 组=0(root)
chenxin 和 root 账户是两个不同的账户,但是 chenxin 用户获得了 root 账户权限。
其他 shell
# 查看系统中 shell 清单
[root@centos7 ~ 17:22:08]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
[root@centos7 ~ 17:22:36]# ll /bin/sh /usr/bin/sh
lrwxrwxrwx. 1 root root 4 2月 10 20:31 /bin/sh –> bash
lrwxrwxrwx. 1 root root 4 2月 10 20:31 /usr/bin/sh –> bash
# 新增 tmux shell
[root@centos7 ~ 17:23:04]# yum install -y tmux
# 新增 c shell
[root@centos7 ~ 17:24:16]# yum install -y tcsh
[root@centos7 ~ 17:25:32]# ll /bin/csh /usr/bin/csh
lrwxrwxrwx. 1 root root 4 4月 23 2022 /bin/csh –> tcsh
lrwxrwxrwx. 1 root root 4 4月 23 2022 /usr/bin/csh –> tcsh
tmux 控制键 ctrl+b:
-
c,新建一个会话
-
N,切换到N号会话,例如数字1,切换到1号会话。
Linux 提权管理
大多数时候Linux系统管理员以非特权用户身份登录系统,并使用工具暂时获得特权用户root管理系统。
su 命令
-
示例1:su username 启动一个非登录shell,使用当前的环境设置(上一个用户)
-
示例2:su -l username 启动一个登录shell,设置了shell环境
username 省略时,代表切换到root账户。
# 不加用户名的 nologin shell
[chenxin@centos7 ~ 17:26:02]$ su
Password: `redhat`
# 很多环境变量仍保留为chenxin用户
[root@centos7 chenxin 17:26:32]# env | grep chenxin
LOGNAME=chenxin
MAIL=/var/spool/mail/chenxin
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/chenxin/.local/bin:/home/chenxin/bin
PWD=/home/chenxin
USER=chenxin
XDG_DATA_DIRS=/home/chenxin/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
# 不加用户名的 login shell
[chenxin@centos7 ~ 17:26:58]$ su -l
Password: `redhat`
Last login: Mon Nov 7 15:40:31 CST 2022 on pts/2
# 所有环境变量都更改为了root用户
[root@centos7 ~ 17:27:30]# set | grep chenxin
[root@centos7 ~ 17:27:56]#
提示: 尽可能使用 loging shell 登录。
准备一个用户
# 添加一个用户
[root@centos7 ~ 17:28:24]# useradd laowang
# 设置密码为redhat
[root@centos7 ~ 17:28:50]# echo redhat | passwd –stdin laowang
Changing password for user laowang.
passwd: all authentication tokens updated successfully.
[chenxin@centos7 ~ 17:29:16]$ grep laowang /etc/passwd
laowang:x:1001:1001::/home/laowang:/bin/bash
# 以特定用户身份执行特定命令
[chenxin@centos7 ~ 17:29:42]$ su -l laowang -c id
Password:
uid=1001(laowang) gid=1001(laowang) groups=1001(laowang) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
# 加单引号
[chenxin@centos7 ~ 17:30:10]$ su -l laowang -c 'cat /etc/hosts'
Password:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# 不加单引号
[chenxin@centos7 ~ 17:30:38]$ su -l laowang -c cat /etc/hosts
Password:
hello
hello
# 原因:没有把 "cat /etc/hosts" 当作整体
其他使用方法
# 创建的文件位置在 ~laowang/haha
[root@centos7 ~ 17:31:08]# su -l -c 'touch haha' laowang
# 无权创建
[root@centos7 ~ 17:31:38]# su -c 'touch haha' laowang
touch: 无法创建 'haha': 权限不够
# 原因:nologin shell 执行,当前位置不变,导致laowang用户无法在/root下创建
# 切换 nologin shell 账户
[root@centos7 ~ 17:32:08]# grep adm /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@centos7 ~ 17:32:38]# su -l adm -c id
This account is currently not available.
[root@centos7 ~ 17:33:06]# su -l adm -s /bin/bash -c id
uid=3(adm) gid=4(adm) 组=4(adm)
# 只有 root 用户可以指定 shell
[root@centos7 ~ 17:33:36]# su -l adm -s /bin/bash
-bash-4.2$
# 提示符不正常,原因是家目录中缺少bash相关配置文件
# 处理方法如下:
[root@centos7 ~ 16:18:06]# grep adm /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@centos7 ~ 16:17:37]# cp /etc/skel/{.bash_profile,.bashrc} /var/adm
[root@centos7 ~ 16:17:52]# su adm -l -s /bin/bash
上一次登录:三 7月 23 16:16:32 CST 2025pts/0 上
[adm@centos7 ~ 16:17:55]$
sudo 命令
从根本上说,Linux实现了一个非常粗糙的获得权限模型:root 可以做任何事情,其他用户与系统相关什么也不能做。
-
su 缺点:
-
用户必须知道 root 用户密码获取 root 用户所有权限。
-
未记录用户执行命令。
-
无法以 /sbin/nologin 的用户身份运行命令。
-
sudo 优点:
-
sudo 允许用户以其他用户身份执行特定命令。
-
sudo 需要用户输入用户自己的密码,而非他们想访问的用户密码。
-
sudo 执行的命令会记录在 /var/log/secure 文件中。
sudo 语法:sudo [-u username] command
# 有sudo权限的用户,输入自己的密码,确认是否是本人在操作
[chenxin@centos7 ~ 17:34:04]$ sudo id
[sudo] password for chenxin:
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
# 没有sudo权限的用户
[laowang@centos7 ~ 17:34:36]$ sudo id
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for laowang:
laowang is not in the sudoers file. This incident will be reported.
sudo 配置
[root@centos7 ~ 17:35:08]# export EDITOR=vim
[root@centos7 ~ 17:35:36]# visudo
# 其中两条记录,wheel组中成员,可以以任何用户身份执行任何命令
root ALL=(ALL) ALL
# 组以%开头
%wheel ALL=(ALL) ALL
示例1:
# laowang 记录如下
laowang ALL=(ALL) ALL
验证:
[laowang@centos7 ~ 17:36:04]$ sudo id
[sudo] password for laowang:
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
示例2: 不需要输入密码情况下,直接执行命令。
# laowang 记录如下
laowang ALL=(ALL) NOPASSWD:ALL
验证:
[laowang@centos7 ~ 17:36:32]$ sudo id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
示例3: 只能够执行特定命令。
# laowang 记录如下
laowang ALL=(ALL) /sbin/useradd,/sbin/usermod,/sbin/userdel
验证:
[laowang@centos7 ~ 17:37:00]$ sudo id
[sudo] password for laowang:
Sorry, user laowang is not allowed to execute '/bin/id' as root on centos7.wanho.net.
[laowang@centos7 ~ 17:37:28]$ sudo useradd laozhang
[sudo] password for laowang:
[laowang@centos7 ~ 17:37:56]$ id laozhang
uid=1002(laozhang) gid=1002(laozhang) groups=1002(laozhang)
总结: 在分配命令的时候,切记只给用户特定功能的命令 (例如用户管理相关命令),而不是通用功能的工具(例如 vim)。
配置文件路径:
-
主配置文件 :/etc/sudoers,正常情况不要修改。
-
从配置文件 :/etc/sudoer.d/*,如果想添加配置,在此处添加。
示例:
[root@centos7 ~ 17:38:24]# echo 'laowang ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/laowang
[root@centos7 ~ 17:38:52]# cat /etc/sudoers.d/laowang
laowang ALL=(ALL) NOPASSWD:ALL
命令别名
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
# sys组中成员执行以下命令别名中的所有命令
%sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
案例
配置用户 xiaoniuma 可以以root身份运行vim命令
用户 xiaoniuma 将自己提权为 root 用户 – 方法一:
操作过程:
# 创建用户
[root@centos7 ~ 17:39:20]# useradd xiaoniuma
[root@centos7 ~ 17:39:42]# echo 123 | passwd –stdin xiaoniuma
# 配置sudo
[root@centos7 ~ 17:40:06]# echo 'xiaoniuma ALL=(ALL) /bin/vim' > /etc/sudoers.d/xiaoniuma
# 切换用户并修改用户id
[xiaoniuma@centos7 ~ 17:40:32]$ sudo vim /etc/passwd
# 修改 xiaoniuma 的 UID 为0
xiaoniuma:x:0:1001::/home/xiaoniuma:/bin/bash
# 验证
[xiaoniuma@centos7 ~ 17:41:02]$ su -l xiaoniuma
密码:
[root@centos7 ~ 17:41:30]#
还原环境
# 修改用户id为原来的1001
[xiaoniuma@centos7 ~ 17:41:54]$ sudo vim /etc/passwd
xiaoniuma:x:1001:1001::/home/xiaoniuma:/bin/bash
# 删除用户
[root@centos7 ~ 17:42:22]# userdel -r xiaoniuma
# 删除sudo规则
[root@centos7 ~ 17:42:46]# rm -f /etc/sudoers.d/xiaoniuma
提权总结
以下是关于 Linux 中 su 和 sudo 使用的几条建议:
优先使用 sudo 而非 su:sudo 允许临时获取管理员权限,操作完成后自动退回普通用户状态,降低误操作风险;而 su 会直接切换到 root 身份,长期保持高权限状态存在安全隐患。
限制 su 的使用范围:尽量仅在需要长时间执行多个管理员操作时使用 su,且完成后立即通过 exit 退出 root 身份,避免在 root 权限下进行日常操作。
合理配置 sudoers 文件:通过 visudo 命令配置 sudoers,精确控制用户可执行的管理员命令(如 user ALL=(ALL) /bin/apt),避免授予无限制的 sudo 权限。
注意命令的完整路径:使用 sudo 时,尽量指定命令的绝对路径(如 sudo /usr/bin/apt update),防止因环境变量篡改导致的安全风险。
避免在脚本中硬编码 sudo 密码:不要在脚本中直接写入 sudo 密码(如通过管道传递),可通过配置 sudoers 实现特定命令免密执行,或使用更安全的权限管理方式。
定期审计操作日志:sudo 的操作会记录在 /var/log/auth.log(或 /var/log/secure)中,定期检查日志可追踪权限使用情况,及时发现异常操作。
使用 sudo -i 替代 su 进行交互式操作:若需要类似 su 的交互式 root 环境,可使用 sudo -i,它会加载 root 的环境变量,同时保留 sudo 的日志记录功能。
课后练习
解析以下每个命令作用,并且至少使用三个示例说明。
su 命令使用说明
su 命令作用:切换当前登录身份为指定用户。使用时需要提供目标用户的密码(root 用户切换到其他用户时无需密码)。
| su -l username 或 su – username | Login shell(登录式切换):完整加载目标用户的环境变量(PATH / HOME / USER / LOGNAME / PS1 等),工作目录也会进入目标用户的家目录。推荐使用。 |
| su username | Non-login shell(非登录式切换):保留当前用户的大部分环境变量(PATH / HOME / USER 等仍指向上一个用户),仅身份切换。 |
| su -l username -c 'COMMAND' | 以目标用户身份执行单条命令,执行完毕立即返回当前身份,命令参数必须用单引号包裹(否则会被当前 shell 先展开)。 |
| su -l nologinuser -s /bin/bash | 临时指定登录 shell(仅 root 可用 -s),用于 /sbin/nologin 的系统账户。 |
示例 1:root 使用 login shell 切换到 chenxin,观察 HOME / PATH 均已切换
[root@centos7 ~ 17:43:18]# su -l chenxin
[chenxin@centos7 ~ 17:43:32]$ pwd
/home/chenxin
[chenxin@centos7 ~ 17:43:50]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/chenxin/.local/bin:/home/chenxin/bin
示例 2:不加 -l 的 Non-login 方式(HOME / USER / MAIL 仍停留在 root,容易出现权限诡异问题)
[root@centos7 ~ 17:44:16]# su chenxin
bash-4.2$ echo $HOME
/root
bash-4.2$ echo $USER
root
示例 3:以 chenxin 身份执行一条单命令,且命令整体用单引号包住
[root@centos7 ~ 17:44:48]# su -l chenxin -c 'id; whoami; echo 家目录是 $HOME'
uid=1000(chenxin) gid=1000(chenxin) 组=1000(chenxin),10(wheel)
chenxin
家目录是 /home/chenxin
sudo 命令使用说明
sudo 命令作用:以"指定的其他用户"身份执行特定命令。默认目标用户是 root。使用时需要输入自己的密码(或通过配置免密),执行完毕立即退回原身份,所有操作会记录到 /var/log/secure。
| sudo COMMAND | 以 root 身份执行一条命令(需要本人密码验证,验证成功后默认 5 分钟内再次 sudo 免密)。 |
| sudo -u username COMMAND | 以指定的普通用户身份执行命令,而不是 root。 |
| sudo -i | 进入交互式 login shell,效果近似 su – root,但保留 sudo 日志 + 输本人密码。 |
| sudo visudo 或 visudo -f /etc/sudoers.d/file | 配置 sudo 权限规则(语法错误时 visudo 会自动检查并禁止保存)。 |
示例 1:普通用户用 sudo 执行管理员命令(cat /etc/shadow 本应 Permission denied,加上 sudo 即可读取)
[chenxin@centos7 ~ 17:45:20]$ cat /etc/shadow | head -n1
cat: /etc/shadow: 权限不够
[chenxin@centos7 ~ 17:45:44]$ sudo cat /etc/shadow | head -n1
[sudo] password for chenxin:
root:$6$............:19300:0:99999:7:::
示例 2:-u 指定以非 root 用户身份运行(用 tom 用户在 /tmp 建文件,属主属组自动变 tom)
[root@centos7 ~ 17:46:10]# sudo -u tom touch /tmp/tom-test-file
[root@centos7 ~ 17:46:32]# ls -l /tmp/tom-test-file
-rw-rw-r–. 1 tom tom 0 7月 22 17:46 /tmp/tom-test-file
示例 3:精确的 sudoers 规则配置 —— 只允许 laowang 跑 useradd / usermod / userdel 三条命令,且 NOPASSWD 免密
[root@centos7 ~ 17:47:00]# cat > /etc/sudoers.d/laowang << 'EOF'
laowang ALL=(ALL) NOPASSWD: /sbin/useradd, /sbin/usermod, /sbin/userdel
EOF
# 验证:sudo id 被拒(权限外的命令),但 sudo useradd 成功通过
[laowang@centos7 ~ 17:47:34]$ sudo id
Sorry, user laowang is not allowed to execute '/bin/id' as root on centos7.
[laowang@centos7 ~ 17:48:02]$ sudo useradd user01
[laowang@centos7 ~ 17:48:28]$ id user01
uid=1002(user01) gid=1002(user01) 组=1002(user01)
Linux 文件权限管理
文件系统权限介绍
文件系统权限介绍
Linux文件权限简单灵活,易于理解和应用,能够处理大多数权限使用情况。
文件有三个适用权限的用户类别:
单个用户拥有者,通常是创建该文件的用户。
单个组拥有者,通常是创建该文件的用户的主要组。
除了用户拥有者和组拥有者之外的 其他用户。
[chenxin@centos7 ~ 17:48:56]$ ls -l myfile
-rw-r—–. 1 chenxin wheel 2262 Dec 23 08:47 myfile
对于/etc/passwd文件来说,-rw-r–r–字符串分成四份,格式如下:
第一位 代表文件类型,例如,- 代表普通文件,d 代表目录,l(L的小写)代表软链接等。
第二到第四位,代表user-owner具有的权限,也就是chenxin用户具有的权限。
第五到第七位,代表group-owner具有的权限,也就是chenxin组中成员具有的权限。
第八到第十位,代表user-owner和group-owner之外的用户具有的权限。
权限优先级
如果文件的用户是chenxin,组成员中也有chenxin用户,那么chenxin获得最终权限是chenxin用户拥有者的权限,而不是组中成员具有的权限。
rwx 权限解读
目录中保存文件,文件中保存数据(例如字符串)

课后作业

哪个常规文件归 operator1 所有并可被所有用户读取? a. lfile1 b. lfile2 c. rfile1 d. rfile2
c
哪个文件可以被 contractor1 用户修改? a. lfile1 b. lfile2 c. rfile1 d. rfile2
b
哪个文件无法被 operator2 用户读取? a. lfile1 b. lfile2 c. rfile1 d. rfile2
d
哪个文件的组所有者为 consultant1? a. lfile1 b. lfile2 c. rfile1 d. rfile2
a
哪些文件可以被 operator1 用户删除? a. rfile1 b. rfile2 c. 以上都对。 d. 以上都不对。
c
哪些文件可以被 operator2 用户删除? a. lfile1 b. lfile2 c. 以上都对。 d. 以上都不对。
d




