十三 su 命令 sudo 命令限制 root 远程登录
一 su 命令
格式为 su [-] username, 后面可以跟 -, 也可以不跟普通用户的 su 命令不加 username 时, 就是切换到 root 用户 root 用户也可以使用 su 命令切花到普通用户该命令加上 - 后, 会初始化当前用户的各种环境变量示例加与不加 - 的区别, 命令:
- # su user1
- [user1@yaowei-01 root]$ pwd
- /root
- [user1@yaowei-01 root]$ ls
ls: 无法打开目录.: 权限不够
[user1@yaowei-01 root]$ su root
密码:
[root@yaowei-01 ~]# su - user1
上一次登录: 二 2 月 6 20:18:12 CST 2018pts/0 上
- [user1@yaowei-01 ~]$ pwd
- /home/user1
- [user1@yaowei-01 ~]$ ls -la
总用量 12
drwx------. 2 user1 grp1 62 1 月 30 18:46 .
drwxr-xr-x. 4 root root 32 2 月 6 18:50 ..
-rw-r--r--. 1 user1 grp1 18 8 月 3 2017 .bash_logout
-rw-r--r--. 1 user1 grp1 193 8 月 3 2017 .bash_profile
-rw-r--r--. 1 user1 grp1 231 8 月 3 2017 .bashrc
不加 - 表示还在 root 用户下, 没有彻底切换过来, 加 - 后可以发现在自己的家目录下 / home/user1, 在自己的家目录下就会加载自己家目录下的配置文件, 比如 ls -la
因此, 切记切换用户的时候要加上 -, 这样切换才彻底
用法:
root 用户下, 以普通用户的身份执行命令:
- [root@yaowei-01 ~]# su - -c "touch /tmp/13.txt" user1
- [root@yaowei-01 ~]# ls -lt /tmp/|head
总用量 0
-rw-r--r--. 1 user1 grp1 0 2 月 6 20:28 13.txt
-rw-r--r--. 1 user1 grp1 0 2 月 6 20:27 12.txt
drwx------. 3 root root 17 2 月 3 03:57 systemd-private-6777d80f894446f799d9a6e27f054b68-vmtoolsd.service-aSrK8x
drwx------. 3 root root 17 2 月 3 03:57 systemd-private-6777d80f894446f799d9a6e27f054b68-vgauthd.service-0Lc2Vi
drwxr-xr-x. 2 root root 19 1 月 30 19:10 test
drwx------. 3 root root 17 1 月 27 03:22 systemd-private-e8721cff7b864cf6acc2f0604f95bb97-vmtoolsd.service-8ks2ZG
drwx------. 3 root root 17 1 月 27 03:22 systemd-private-e8721cff7b864cf6acc2f0604f95bb97-vgauthd.service-T7GMmu
drwx------. 3 root root 17 1 月 26 04:41 systemd-private-13ad930731b445abbdd9798b690f2917-vmtoolsd.service-lslC0Q
drwx------. 3 root root 17 1 月 26 04:41 systemd-private-13ad930731b445abbdd9798b690f2917-vgauthd.service-iI6GMz
切换的用户若没有系统的配置文件, 前缀会显示. bash 字样, 可进入系统的模板目录:/etc/skel/, 复制下面的 ".bash" 文件:
# ls -la /etc/skel
总用量 24
drwxr-xr-x. 2 root root 62 1 月 22 01:48 .
drwxr-xr-x. 74 root root 8192 2 月 6 18:57 ..
-rw-r--r--. 1 root root 18 8 月 3 2017 .bash_logout
-rw-r--r--. 1 root root 193 8 月 3 2017 .bash_profile
-rw-r--r--. 1 root root 231 8 月 3 2017 .bashrc
- # cp /etc/skel/.bash* /home/user5/ 复制到它的家目录下去, 比如 user5
- # chown -R user5:user5 /home/user5 然后不要忘记了更改所有者及所属组,/home/user5 可以用!$(上一条命令的最后一个参数) 代替
复制过去后, 再登录查看, 前缀即可正常显示
二 sudo 命令
sudo 命令: 只有 root 用户可以使用的命令, 普通用户若想使用 sudo 命令, 需要 root 预先设定可以使用 visudo 命令编辑它的配置文件 / etc/sudoers 若没有 visudo 这个命令, 使用命令 yum install -y sudo 安装
root 默认支持 sudo, 因为这个文件中有一行 root ALL=(ALL)ALL
在该行下面加入 test ALL=(ALL)ALL
就可以让 test 用户拥有 sudo 的特权从左到右, 第一段 test 这里为一个用户, 指定让哪个用户拥有 sudo 特权, 第二段 ALL=(ALL), 左边的 ALL 指的是所有的主机, 右边的 ALL 指的是获取哪个用户的身份, 第二段几乎不用配置; 第三段设定可以使用 sudo 命令的有哪些
visudo 这个命令可以检测错误, 因此建议使用这个命令
使用 visudo 命令编辑 / etc/sudoers 配置文件, 必须要使用 root 用户
操作方法: 进入这个文件, 然后在 root 下面加上一行示例:
- ## Allow root to run any commands anywhere (整个文件中最核心的一个项目)
- root ALL=(ALL) ALL
user1 ALL=(ALL) ALL(可以自定义一些命令, 如 ls,mv,cat, 这些命令需要些绝对路径, 否则不可用, 找不到文件)
此时方可验证 user1 的权限了, 方法如下:(如下操作是在 root 账户下进行的)
- # su user1
- [user1@yaowei-01 root]$ ls
ls: 无法打开目录.: 权限不够
[user1@yaowei-01 root]$ sudo ls
我们信任您已经从系统管理员那里了解了日常注意事项
总结起来无外乎这三点:
- #1) 尊重别人的隐私
- #2) 输入前要先考虑 (后果和风险)
- #3) 权力越大, 责任越大
[sudo] user1 的密码:
123 1.txt anaconda-ks.cfg dir3 dir4
小技巧: 在文件内,":set nu" 可以显示文件内的行号
使用 sudo 时, 要输入自身的密码, 也可设置不要密码如下的 user2:
- ## Allow root to run any commands anywhere
- root ALL=(ALL) ALL
- user1 ALL=(ALL) ALL
- user2 ALL=(ALL) NOPASSWD: ALL:
这个下面也可以加入别名的组
host 可以设置别名, 用户也可以 alias 命令
获取到的命令那里
由于切换到 user1 用户后当前目录还是 root,user1 没有任何权限, 所以 ls 查看时, 提示权限不够然而使用命令 sudo ls 输入 user1 自身的密码后, 就有权限了初次使用 sudo 命令时, 会出现上面的一大段提示, 再次使用 sudo 命令时则不再提示
若每增加一个用户就设置一行, 这样就很麻烦, 所以可以这样设置:
# %wheel ALL=(ALL)
将# %wheel ALL=(ALL) 前面的 #去掉, 让这一行生效它的意思是, wheel 这个组的所有用户都拥有了 sudo 的权力接下来, 只要把需要设置 sudo 权限的用户加入到 wheel 这个组即可如下所示:
- ## Allows people in group wheel to run all commands
- %wheel ALL=(ALL) ALL
新加入别名的组, 加入到这一行命令下面, 如下:
# User_Alias ADMINS = jsmith, mikem
实用案例:
我们的需求是把 Linux 服务器设置成这个样子: 只允许使用普通账户登录, 登录后, 可以不输入密码就能用 sudo 切换到 root 账户配置方法是:
# visudo
在文件最后加入三行:
- User_Alias USER_SU = user1, user2 user3
- Cmnd_Alias SU = /usr/bin/su
- USER_SU ALL=(ALL)NOPASSWD:SU
第一行设定了一个 user 别名, 其实这个 USER_SU 相当于是 user1,user2,user3 三个账户; 第二行设定了一个命令别名, SU 相当于 / usr/bin/su;
第三行, 保存配置文件后, 使用 user123 这三个账户登录 Linux
三限制 root 远程登录
/etc/ssh/sshd_config 为 sshd 服务的配置文件, 默认允许 root 账户用过 ssh 远程登录 Linux 要想限制 root 用户远程登录 Linux, 操作方法为: 修改配置文件 / etc/ssh/sshd_config, 在文件中查找 #PermitRootLogin yes 并修改为 PermitRootLogin no 保存配置文件后, 重启 sshd 服务, 如下所示:
# systemctl restart sshd.service
需注意的是, 这个方法只适用于通过 ssh 远程登录 Linux 的情况
来源: http://www.bubuko.com/infodetail-2490301.html