3.7:su命令:(切换后无时间限制)

1.1、su命令是来切换用户:变更为其他使用者的身份:变更时需要输入用户名及密码:

语法: su  [ - ]  用户名

“-”加上后:表示同时切换到用户的环境变量下,如下:

“-”不加:不切换用户的环境的变量:半切换:

[root@localhost ~]# su yuanhh        #半切换到yuanhh用户:

[yuanhh@localhost root]$ pwd         #查看当前用户的所属目录还是root.

/root

[yuanhh@localhost root]$ su root      #当普通用户切换至root用户,则需要输入密码:

密码:

[root@localhost ~]# pwd              #切换到root后。

/root

[root@localhost ~]# su - yuanhh      #全切换到yuanhh用户:

上一次登录:四 11月  2 01:10:33 CST 2017pts/0 上

[yuanhh@localhost ~]$ pwd           #则用户的所属目录则变成了用户的家目录。

/home/yuanhh

注:普通用户是无法查看root用户的文件

1.2、在root用户登录的时候,以某个用户的身份去执行某一条命令,并且不登录用户

[root@localhost ~]# su - -c "touch /tmp/zzz" yuanhh #以yuanhh用户的身份来执行。

[root@localhost ~]# ls -ld /tmp/zzz    #用ls命令来查看:则属于yuanhh这个用户:

-rw-rw-r-- 1 yuanhh yuanhh 0 11月  2 01:22 /tmp/zzz

注:su - yuanhh -c "ls /tmp/"

1.3、在创建用户的同时,未创建用户的家目录,则需要手动创建家目录,并且拷贝环境变量:

[root@localhost ~]# useradd -M user3    #创建用户user3,不创建用户的家目录:

[root@localhost ~]# su - user3          #切换到用户user3下:

su: 警告:无法更改到 /home/user3 目录: 没有那个文件或目录  #提示家目录不存在,无法切换:

[root@localhost~]#mkdir /home/user3;chown user3:user3 /home/user3  #创建家目录并更改权限,很重要,否则无法使用:

[root@localhost ~]# ls -a /etc/skel/.bash  #此目录的.bash开头的为系统默认的环境变量:

.bash_logout   .bash_profile  .bashrc

[root@localhost ~]# cp /etc/skel/.bash* /home/user3   #拷贝至家目录yuanhh目录下:

[root@localhost ~]# chown -R user3:user3 /home/user3  #更改user3家目录下文件级联:

[root@localhost ~]# su - user3         #切换user3.

[user3@localhost~]$ pwd                #所属组正常:

/home/user3

3.8:sudo命令:  只有超级用户root可以使用:(切换后有时间限制)

1.1:语法:su  [ 选项 ] 参数

选项如下:

-b:在后台执行指令;
-h:显示帮助;
-H:将HOME环境变量设为新身份的HOME环境变量;
-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;
-l:列出目前用户可执行与无法执行的指令;
-p:改变询问密码的提示符号;
-s:执行指定的shell;
-u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
-v:延长密码有效期限5分钟;
-V :显示版本信息

1.2:sudo命令:让其他用户来执行命令,预设用户为root,使用时需输入密码,5分钟后超时重新输入密码:

由于sudo的配置文件为sudoers比较重要,不建议直接编辑,可以用visudo(可检测语法错误)来操作,如下:

[root@localhost ~]# visudo        #编辑visudo

## The COMMANDS section may have other options added to it.

##

## Allow root to run any commands anywhere   #核心的配置文件:修改此处即可:

##授权的用户     授权客户端IP=(赋予它系统中哪些用户)      赋予哪些命令给他使用。

 root                ALL=(ALL)               ALL(绝对路径)     

yuanhh               ALL=(ALL)           /usr/bin/ls,/usr/bin/cp,/usr/bin/cat   

#注:命令要使用绝对路径,否则会报错,如下:                         

>>> /etc/sudoers: 语法错误 near line 93 <<<

现在做什么?

选项有:

  重新编辑 sudoers 文件(e)

  退出,不保存对 sudoers 文件的更改(x)

  退出并将更改保存到 sudoers 文件(危险!)(Q)

以上信息表示:授予yuanhh用户(任何地方的主机IP),系统中所有用户的权限,可以用ls,cp,cat等命令:

测试如下:

[root@localhost ~]# su - yuanhh     #第一次用su全切换到yuanhh下。

[yuanhh@localhost ~]$ ls /root/     #查看时权限不足:

ls: 无法打开目录/root/: 权限不够

[yuanhh@localhost ~]$ sudo /usr/bin/ls /root/     #

[sudo] yuanhh 的密码:    #第一次使用时需要输入密码:此处为yuanhh的用户密码:

txt  1.txt.bak  2.txt.bak  anaconda-ks.cfg  yuanhh  重要事宜.txt

1.3:如果不想让普通用户使用时输入密码:可以修改如下:

[root@localhost ~]# visudo      #编辑

## The COMMANDS section may have other options added to it.

##

## Allow root to run any commands anywhere

root    ALL=(ALL)       ALL

yuanhh  ALL=(ALL)     /usr/bin/ls,/usr/bin/cp,/usr/bin/cat

user3   ALL=(ALL)    NOPASSWD: /usr/bin/ls,/usr/bin/cp,/usr/bin/cat

#加上"NOPASSWD:" 则下次使用时不需要输入密码:                        

[root@localhost ~]# su - user3

[user3@localhost ~]$ sudo ls /root/

txt  1.txt.bak  2.txt.bak  anaconda-ks.cfg  yuanhh  重要事宜.txt

1.4:在配置文件里面三个非常重要的配置文件分别是 

Host Alias :通过主机名别名称来限制: 

User Alias :通过用户名别名称限制

Command Alias :通过命令别名来限制。

编辑visudo:添加如下内容:

Cmnd_Alias YUANHH_CMD = /usr/bin/ls, /usr/bin/cat

修改用户的配置:

yuanhh  ALL=(ALL)     YUANHH_CMD

测试:


[root@localhost ~]# su - yuanhh

[yuanhh@localhost ~]$ sudo ls /root/

[sudo] yuanhh 的密码:

txt  1.txt.bak  2.txt.bak  anaconda-ks.cfg  yuanhh  重要事宜.txt

3.9:限制root用户的登录:

注:该方法只适用于来root用户的登录:

思路如下:

1、首先修改sshd的配置文件,限制root用户登录系统:

2、给普通用户sudo授权,通过让普通用户临时拥有root的权限来执行:

3、通过普通用户直接sudo  su  - root下即可:

注:当时普通用户sudo到root用户下,必须要知道root用户的密码我们可以通NOPASSWD设置,如下

1、需要修改配置文件:/etc/ssh/sshd_config     #限制root用户登录

vi /etc/ssh/sshd_config

PermitRootLogin yes       #将yes修改为no,

systemctl restart sshd.service     #重启服务即可:

#修改后则不允许root用户登录,只能先登录普通用户,然后su过来。

2、修改visudo文件:

[root@localhost ~]# visudo


# User_Alias ADMINS = jsmith, mikem 

User_Alias YUANHHS = yuanhh, user1      #通过用户名别名来添加多个用户:


## Allow root to run any commands anywhere

root    ALL=(ALL)       ALL

yuanhh  ALL=(ALL)      YUANHH_CMD

YUANHHS ALL=(ALL)      NOPASSWD: /usr/bin/su   #让普通用户无密码使用su命令:

测试:此时会发现root用户无法登录,登录普通用户,并跳转到root用户来测试。


[yuanhh@localhost ~]$ sudo su - root

[root@localhost ~]#

[root@localhost ~]#

[root@localhost ~]# pwd

/root

[root@localhost ~]# id

uid=0(root) gid=0(root) 组=0(root)

测试结果如上:


附记:以下内容网上查找整理:

扩展

sudo与su比较 http://www.apelearn.com/bbs/thread-7467-1-1.html 

sudo配置文件样例  www.opensource.apple.com/source/sudo/sudo-16/sudo/sample.sudoers

sudo -i 也可以登录到root吗? http://www.apelearn.com/bbs/thread-6899-1-1.html

1、su的优缺点

        su的确为管理带来方便,通过切换到root下,能完成所有系统管理工具,只要把root的密码交给任何一个普通用户,他都能切换到root来完成所有的系统管理工作;但通过su切换到root后,也有不安全因素;比如系统有10个用户,而且都参与管理。如果这10个用户都涉及到超级权限的运用,做为管理员如果想让其它用户通过su来切换到超级权限的root,必须把root权限密码都告诉这10个用户;如果这10个用户都有root权限,通过root权限可以做任何事,这在一定程度上就对系统的安全造成了威协;想想Windows吧,简直就是恶梦;“没有不安全的系统,只有不安全的人”,我们绝对不能保证这 10个用户都能按正常操作流程来管理系统,其中任何一人对系统操作的重大失误,都可能导致系统崩溃或数据损失;所以su 工具在多人参与的系统管理中,并不是最好的选择,su只适用于一两个人参与管理的系统,毕竟su并不能让普通用户受限的使用;超级用户root密码应该掌握在少数用户手中,这绝对是真理!所以集权而治的存在还是有一定道理的;

2、sudo -i: 为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。提示输入密码时该密码为当前账户的密码。没有时间限制。执行该命令后提示符变为“#”而不是“$”。想退回普通账户时可以执行“exit”或“logout” 。

3、

sudo su - 约等于 sudo -i

sudo -s 完全等于 sudo /bin/bash 约等于 sudo su