三周三次课
su切换用户
- 命令su
语法:su [-] username
加“-”的作用是,加上后切换,shell会初始化当前用户的各种变量(.bash_history .bash_profile .bash_logout .bashrc 等);且切换后会直接进入当前用户家目录。不加则环境变量还会是当前shell的变量,切换后还是当前目录。
root用户切换普通用户时,不需要密码。普通用户su 不加username就是切换root用户,需要输入root密码。
我们可以在切换时,直接以某一普通用户的身份去执行一条命令,用在脚本中比较合适。
[root@t1 ~]# su - -c "touch /tmp/zyb.log" zyb
[zyb@t1 ~]$ ls -l /tmp/zyb.log
-rw-rw-r--. 1 zyb zyb 0 8月 16 21:05 /tmp/zyb.log
[zyb@t1 ~]$ su - bird -c "touch /tmp/bird.log"y
密码:
[zyb@t1 ~]$ exit
登出
[root@t1 ~]# ls -l /tmp/bird.log
-rw-rw-r--. 1 bird bird 0 8月 16 21:26 /tmp/bird.log
#切换用户名可以在“-” 后面也可以在最后
sudo详解
为了保证root密码的安全,同时准许某些用户执行一些root才能执行的命令,但是不需要知道root密码,就是sudo命令的作用。
默认情况下,只有root才能sudo,因为sudo的配置中有一行"root ALL=(ALL) ALL "。该配置分为三部分,最左侧是用户名,指定某个用户可以拥有sudo执行权,第二部分ALL,是一个用户名,即,指定的用户可以切换到哪个用户的身份,ALL表示所有用户。小括号里面指定主机名或者主机IP,ALL表示所有,最后一个ALL,用来指定可以使用的命令有哪些。如果是多个命令,用英文逗号隔开,命令使用绝对路径。使用命令"visudo"编辑sudo的配置文件/etc/sudoers。
- 举例,配置sudo,使zyb用户能够以root用户什么ls /root/下面的文件。
[root@t1 ~]# su - zyb
上一次登录:三 8月 16 23:00:31 CST 2017pts/0 上
[zyb@t1 ~]$ ls /root/
ls: 无法打开目录/root/: 权限不够
[zyb@t1 ~]$ exit
登出
[root@t1 ~]# visudo
#添加 zyb ALL=(ALL) /usr/bin/ls
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
zyb ALL=(ALL) /usr/bin/ls
[zyb@t1 ~]$ sudo ls /root
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 zyb:
anaconda-ks.cfg anaconda-ks.cfg.1.bak linux_note y.pub
[zyb@t1 ~]$ sudo ls /root
anaconda-ks.cfg anaconda-ks.cfg.1.bak linux_note y.pub
zyb用户是不能查看/root下的文件,需要以root身份执行ls。所以配置sudo:
zyb ALL=(ALL) /usr/bin/ls
准许zyb使用sudo 以root身份执行ls,zyb第一次执行sudo会有提示,并且需要输入密码,注意是zyb用户的登录密码。再次执行sudo就没有提示。
- 设定不需要输入密码执行sudo
配置sudo,准许bird用户执sudo且不需要密码
[root@t1 ~]# visudo
#添加 bird ALL=(ALL) NOPASSWD: /usr/bin/ls
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
zyb ALL=(ALL) /usr/bin/ls
bird ALL=(ALL) NOPASSWD: /usr/bin/ls
[bird@t1 ~]$ sudo ls /root
anaconda-ks.cfg anaconda-ks.cfg.1.bak linux_note y.pub
/etc/sudoers包含很多配置,可以使用命令man sudoers来获取帮助,下面介绍案例,来了解sudo的常用功能。
- 要求设置系统只允许普通用户登录,普通用户登陆后,可以不输入密码就能sudo切换到root账户。
User_Alias ALLUSERS = zyb, bird, user1, user2
#用户别名ALLUSERS虚拟用户包含了4个真实用户 #
Cmnd_Alias SU = /bin/su
#命令别名 SU代表了/bin/su,可以代表多个用“, ”隔开
ALLUSERS ALL=(ALL) NOPASSWD: SU
#用户ALLUSERS 可以免密码sudo执行SU命令#
命令别名,以及用户别名都必须是大写的。以上ALLUSERS,SU如果有小写字母,保存时就会报错,并提醒错误位置。使用visudo编辑sudo配置和自动检查语法,如果直接vi /etc/sudoers,不会检查语法, 所以使用visudo命令来编辑sudo配置。
- %groupname ALL=(ALL) ALL
为每一个需要sudo的用户逐个添加太麻烦,可以直接为某一组用户开通sudo权限,组名前面加%。
%groupname ALL=(ALL) ALL
groupname这组用户都具有了sudo权限,接下来只需要让将用户加入到这个group中就行了。
- sudo -l 查看当前用户可以sudo的命令
- 取消某类程序的执行:
取消程序某类程序的执行,要在命令动作前面加上!号; 在本例中也出现了通配符的*的用法;
beinan ALL=(ALL) /usr/sbin/*, /sbin/*, !/usr/sbin/fdisk
把这行规则加入到/etc/sudoers中,本规则表示beinan用户在所有可能存在的主机名的主机上运行/usr/sbin和/sbin下所有的程序,但fdisk 程序除外。
不允许远程用户登录root
此方法只适用于通过ssh远程登录linux的时候,修改配置文件/etc/ssd/ssd_config,在文件中查找"#PermitRootLogin yes" 这句话,将yes改为no。就表示不允许远程root用户登录。保存配置文件,重启sshd服务:service sshd restart