三周第三节课

三周第三次课
3.7 su命令
3.8 sudo命令
3.9 限制root远程登录

3.7 su命令

linux系统中,有些事情只有root用户才能做,普通用户是不能做的,这时就需要临时切换到root身份了。

[root@centos7 ~]# useradd test

[root@centos7 ~]# echo "123456789" | passwd --stdin test

Changing password for user test.

passwd: all authentication tokens updated successfully.

[root@centos7 ~]# su - test

[test@centos7 ~]$ whoami

test

[test@centos7 ~]$

使用id命令查看当前用户是谁。

[aming@localhost ~]$ id

uid=1000(aming) gid=1000(aming) groups=1000(aming) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

su命令的格式为:

su [-] username,后面可以跟-,也可以不跟-。加-的作用是为了彻底的切换用户,包括它的一些自己的配置、环境变量等等。加-是在自己的家目录下,就会加载自己家目录下的配置文件。总之,切换用户要加-,这样才切换的彻底。

普通用户的su命令不加username时,就是切换到root用户。当然,root用户同样可以使用su命令切换到普通用户。该命令加上-后,会初始化当前用户的各种环境变量。

[test@centos7 ~]$ pwd

/home/test

[test@centos7 ~]$ su

Password:

[root@centos7 test]# pwd

/home/test

[root@centos7 test]# exit

exit

[test@centos7 ~]$ su -

Password:

Last login: Wed Dec 27 03:49:01 CST 2017 on pts/0

[root@centos7 ~]# pwd

/root

如果不加-切换到root账户时,当前目录没有变化;而加上-切换到root账户时,当前目录为root账户的家目录。这跟直接登录root账户是一样的。当由root切换到普通用户时,是不需要输入密码的。

在root账户下,不进入某一个账户但以这个账户来执行一条命令,示例如下:

[root@localhost ~]# su - -c "touch /tmp/aming.111" aming

[root@localhost ~]#

命令执行是否成功,使用如下命令查看:

[root@localhost test]# ls -lt /tmp | head
total 4
-rw-r--r--. 1 aming grp2   0 Jan  8 05:32 aming.111
drwx------. 3 root  root  17 Jan  7 22:11 systemd-private-e1b35a0cde85463589173981b61577ef-chronyd.service-jU7wZn
drwx------. 3 root  root  17 Jan  7 22:11 systemd-private-e1b35a0cde85463589173981b61577ef-vmtoolsd.service-T4KQ20
drwx------. 3 root  root  17 Jan  7 22:11 systemd-private-e1b35a0cde85463589173981b61577ef-vgauthd.service-5MjukE
drwx------. 3 root  root  17 Jan  6 03:16 systemd-private-e68ca9c130244734a4df85c49e044a9a-chronyd.service-YMLQEY
drwx------. 3 root  root  17 Jan  6 03:16 systemd-private-e68ca9c130244734a4df85c49e044a9a-vmtoolsd.service-SVKV3C
drwx------. 3 root  root  17 Jan  6 03:16 systemd-private-e68ca9c130244734a4df85c49e044a9a-vgauthd.service-BDGAFh
drwx------. 3 root  root  17 Jan  5 04:06 systemd-private-c43011ea430e467886a572b54c41de2e-vmtoolsd.service-7eHHCf
drwx------. 3 root  root  17 Jan  5 04:06 systemd-private-c43011ea430e467886a572b54c41de2e-vgauthd.service-v2Nfxn

[root@localhost test]# id aming
uid=1000(aming) gid=1001(grp2) groups=1001(grp2),1002(user5)
[root@localhost test]# 

3.8 sudo命令

用su可以切换用户身份,而且每个普通用户都能切换到root身份。为了不使root密码泄露,所以设计了sudo命令。

使用sudo命令执行一个只有root才能执行的命令是可以办到的,但是需要输入密码(用户自己的密码)。默认情况下,只有root用户才能使用sudo命令,普通用户想要使用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的命令有哪些。ALL指的是所有的命令,也可以是ls,mv,cp,但是要写绝对路径。

使用visudo命令编辑/etc/sudoers配置文件(必须要使用root用户),它的使用方法同vi命令一样,即输入i进入编辑模式,编辑完成后,按ESC键,再输入:wq完成保存。

具体操作方法如下:

## Allow root to run any commands anywhere

root ALL=(ALL) ALL

test ALL=(ALL) ALL

visudo可以提示哪一行出现错误,如何出现行数呢?可以使用:set nu命令,就可以查看行数。

此时可以验证一下test账户的权限了,方法如下(在root账号下进行):

[root@centos7 ~]# su test

[test@centos7 root]$ ls

ls: cannot open directory .: Permission denied

[test@centos7 root]$ sudo ls

 

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 test:

1_hard.txt.bak.bak 2.txt.bak.bak anaconda-ks.cfg.bak

[test@centos7 root]$

由于切换到test账户后当前目录还是root,test账户没有任何权限,所以使用命令ls查看时,提示权限不够。然而使用命令sudo ls(这里可以加绝对路径,也可以不加)输入test账户的密码后,就有权限了。初次使用sudo命令时,会提示上面的一大段,当再次使用sudo命令时则不再提示。如果不想输入密码的话,可以在配置文件里要加的哪一行

test ALL=(ALL) ALL变成test ALL=(ALL) NOPASSWD: ALL。

[aming@localhost ~]$ su - user1

Password:

Last login: Tue Dec 26 18:51:19 EST 2017 on pts/0

[user1@localhost ~]$

[user1@localhost ~]$ ls /root/

ls: cannot open directory /root/: Permission denied

[user1@localhost ~]$ sudo /bin/ls /root/

1.c 3.c anaconda-ks.cfg

[user1@localhost ~]$

如果每增加一个用户就设置一样,就太麻烦了。可以进行如下设置:把

##wheel ALL=(ALL) ALL前面的#去掉,让这一行生效。它的意思是,wheel这个组的所有用户都拥有了sudo权限。接下来,只要把需要设置sudo权限的所有用户加入到wheel这个组中即可。如下所示:

## Allows people in group wheel to run all commands

%wheel ALL=(ALL) ALL

配置文件/etc/sudoers包含了许多配置项,可以使用命令man sudoers来获得帮助信息。

下面介绍一个示例:

我们的需求是把linux服务器设置成这个样子:只允许使用普通账户登录,而普通账户登录后,可以不输入密码就能用sudo切换到root账户。配置方法如下:

然后在文件的最后加入如下3行:

User_Alias USER_SU = test, aming, user1

Cmnd_Alias SU = /usr/bin/su

USER_SU All=(ALL) NOPASSWD: SU

第一行设定了一个user别名,其实这个USER_SU相当于是test、test1、和aming三个账户;第二行设定了一个命令别名,SU相当于/usr/bin/su;第三行刚介绍过。保存配置文件后,使用test、user1、和aming这三个账户登录linux,不需要密码登录。执行命令sudo su -切换到root账户,获取root账户的所有权利,如下所示:

[root@centos7 ~]# su - test

Last login: Wed Dec 27 05:44:04 CST 2017 on pts/0

[test@centos7 ~]$ sudo su -

[root@centos7 ~]# whoami

root

不允许root直接登录,可以设置一个复杂度极高的密码。这样也会有一个问题,就是普通用户可以使用su命令切换到root,然后再修改一个简单的密码就能直接登录root了。

3.9 限制root远程登录

有这样一个需求,我们平常登陆服务器,是用root用户登录的,这样是有一定危险性的。比如说,root登陆,给root设定了一个密码,如果用密钥登陆还好,若是用密码登陆(比如你们公司用的就是密码登录,密码设置的简单,就会被猜到;复杂的话,你就会记不住,就会将密码记录在文档里)。如果给别人拿到了密码,他就会远程登陆你的服务器,为了安全起见,我们要限制远程登陆root(本地root登陆无法限制)。

现在我们禁止root登陆,只允许普通用户登录,普通用户要想拿到root的权限,可以使用sudo,也可以使用su命令。可以允许临时切换到root用户,但是root的密码你是不知道的。

我们可以把su命令放到sudo的命令列表里面去。逻辑结构如下:服务器root无法登陆了,只允许普通用户登录,普通用户要想su到root用户就需要root的密码,但是root的密码我们是保密的,现在就需要用到sudo了。

普通用户到root需要密码,root用户到root不需要密码,我们可以做一个User_Alias,把普通用户aming、tianqi、user1加到里面去。

# User_Alias ADMINS = jsmith, mikem

User_Alias AMINGS = aming, tianqi, user1

这是设定了用户的alias,然后我们再去设定一个规则,放到下面这个地方。

## Allow root to run any commands anywhere

root ALL=(ALL) ALL

AMINGS ALL=(ALL) NOPASSWD: /usr/bin/su

第二个ALL是用户的身份,代表可以切换到任何用户的身份,这里是root。

后面代表使用su命令可以不用输入密码。

现在切换到aming下,再使用命令sudo su - root切换到root不用输入密码。

[root@localhost ~]# su - aming

Last login: Thu Dec 21 23:51:49 CST 2017 on pts/0

[aming@localhost ~]$ sudo su - root

Last login: Wed Dec 27 07:14:43 CST 2017 from 192.168.231.1 on pts/0

[root@localhost ~]# whoami

root

[root@localhost ~]#

现在我们要限制远程登陆,/etc/ssh/sshd_config为sshd服务的配置文件,默认允许root账户通过ssh远程登录linux。要想不允许root用户远程登录linux,具体操作方法为:修改配置文件

/etc/ssh/sshd_config,在文件中查找#PermitRootLogin yes并修改为

PermitRootLogin no。保存配置文件后,需要重启sshd服务,如下所示:

#PermitRootLogin yes改为

PermitRootLogin no

不允许root远程登录,改完配置文件要重启一下。

#systemctl testart sshd.service

然后重新登录,证明是不能远程登录的。

那如何改回可以远程登录呢?把配置文件PermitRootLogin no改为#PermitRootLogin yes,然后重启服务即可。

这个方法只适用于通过ssh远程登录linux的情况。

 

友情链接:阿铭Linux

转载于:https://my.oschina.net/u/3744518/blog/1595428

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值