su 切换用户

用法:su [选项] [-] [用户 [参数]... ]

  1. - :以 login-shell 方式进行登录
  2. 不加 - :以 no-login-shell 方式进行登录
  3. -c:只进行一次在该用户下使用命令

login-shell 与 no-login-shell 的区别
login-shell 登录时先去读取 /etc/profile, 然后按照顺序读取 ~/.bash_profile 或者 ~/.bash_login 或者 ~/.profile ,这三个个人配置文件只要按照顺序读取到一个就不会读取后面的配置文件。
no-login-shell 的方式登录时不会去读取/etc/profile 和 ~/.bash_profile(or ~/.bash_login or ~/.profile)内容。
以 no-login-shell 的方式登录,从 tom 切换到 root 为例,可以看出,以 no-login-shell 的方式,切换登录时不会去加载 root 的环境变量,依然保持着 tom 的环境变量,而以 login-shell 的方式,则会去加载 root 的环境变量。
no-login-shell 的方式切换:

  1. [tom@localhost ~]$ su
  2. 密码:
  3. [root@localhost tom]# env | grep 'tom'
  4. USER=tom
  5. PATH=/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/tom/bin
  6. MAIL=/var/spool/mail/tom
  7. PWD=/home/tom
  8. LOGNAME=tom

login-shell 的方式切换(一般采用):  

  1. [tom@localhost ~]$ su - root
  2. 密码:
  3. [root@localhost ~]# env | grep 'tom'
  4. 无结果
  5. [root@localhost ~]# env | grep 'root'
  6. USER=root
  7. MAIL=/var/spool/mail/root
  8. PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/linux.i386
  9. PWD=/root
  10. HOME=/root
  11. LOGNAME=root

-c 只进行一次在该用户下使用命令,例如 

  1. [root@localhost ~]# su - tom -c "touch su-test"
  2. [root@localhost ~]# su - tom
  3. [tom@localhost ~]$ ll
  4. -rw-r--r-- tom home 2 : su-test

sudo 切换用户

su 需要被切换用户的密码,sudo不需要被切换用户的密码,只有 /etc/sudoers 文件内有的用户才可以执行此命令

1.将 tom 用户加入 /etc/sudoers 文件中

  1. #编辑 /etc/sudoers 文件
  2. [root@localhost ~]# visudo

2.找到如下内容,并且将 tom 加入,保存退出  

  1. ## Allow root to run any commands anywhere
  2. root ALL=(ALL) ALL
  3. tom ALL=(ALL) ALL
  4. #如果想要切换执行的时候不需要输入自己的密码,则配置成如下
  5. tom ALL=(ALL) NOPASSWD:ALL
  6. 或者让一个用户组的用户都可以使用 sudo,则配置如下
  7. ## Same thing without a password
  8. %用户组名 ALL=(ALL) NOPASSWD: ALL

3.使用 root 身份进行操作,sudo -u 用户 命令  

  1. [tom@localhost ~]$ head -n 3 /etc/sudoers
  2. head: 无法打开"/etc/sudoers" 读取数据: 权限不够
  3. [tom@localhost ~]$ sudo -u root head -n 3 /etc/sudoers
  4. ## Sudoers allows particular users to run various commands as
  5. ## the root user, without needing the root password.
  6. ##

将 su 和 sudo 结合,使用 sudo 切换到 root 并且使用自己的密码  

1.更改配置文件 /etc/sudoers 如下

  1. tom ALL=(ALL) /bin/su -
  2. 备注:如果想要 tom 切换到 root 而禁止使用某些命令,可以在前面加一个 ! ,如禁止 tom 使用 sudo 执行更改密码操作:
  3. tom ALL=(ALL) !/user/bin/passwd

2.使用自己的密码切换到 root 用户下  

  1. [tom@localhost ~]$ sudo su -
  2. [sudo] password for tom:
  3. [root@localhost ~]#

设置用户不可登陆  

1.对于已有的用户,可以在 /etc/passwd 文件中可以直接加入 /sbin/nologin 使得该用户不可登录

tom:x:505:505:tom,088-88888888,18899990000,088-666666:/home/tom:/sbin/nologin

2.对于新建的用户,直接设置不可登录

  1. [root@localhost etc]# useradd jun -s /sbin/nologin

3.登录时,不能登录的用户给予提示,在 etc 目录下增加 nologin.txt  

  1. [root@localhost etc]# cat nologin.txt
  2. 不能登陆,因为我不能让 tom 登录
  3. [root@localhost etc]# su - tom
  4. 不能登陆,因为我不能让 tom 登录

  

Linux-- su和sudo 切换用户的更多相关文章

  1. Linux环境下sudo切换用户后执行其他命令

    https://blog.csdn.net/liangxw1/article/details/80106465

  2. LINUX使用 su 命令临时切换用户身份

    1.su 的适用条件和威力 su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd ,beinan用户没有这个权限,而这个权限恰恰由root ...

  3. 07 Linux su和sudo命令的区别

    一. 使用 su 命令临时切换用户身份 1.su 的适用条件和威力 su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd ,beinan用 ...

  4. linux su和sudo命令的区别

    一. 使用 su 命令临时切换用户身份 1.su 的适用条件和威力 su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd ,beinan用 ...

  5. linux su和sudo命令的区别(转)

    一. 使用 su 命令临时切换用户身份 1.su 的适用条件和威力 su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd ,beinan用 ...

  6. 怎样把linux客户端用户禁止用 su命令来切换用户

    系统中有一个组叫做“wheel”,我们可以利用该组实现一些特殊的功能.我们可以将拥有su使用权限的用户加入到wheel组中并且对该组进行限制,那么只有在该组中的用户才有su的使用权限. 如要实现该功能 ...

  7. Linux su和sudo命令的区别,并获得root权限

    su(superuser) su表示切换用户,如: 输入:su命令后回车表示切换当前的用户到root用户,或者: 输入:su - root(或者其他用户名)这里加了"-"后表示也切 ...

  8. linux su、sudo、sudo su、sudo -i的用法和区别

    sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码.不过有时间限制,Ubuntu默认一次时长15分钟. su : 切换到某某用户模式,提 ...

  9. Linux 下以其他用户身份运行程序—— su、sudo、runuser

      本文综合分析了Linux系统下,如何使用runuser命令.su命令和sudo命令以其他用户身份来运行程序,以及这三个命令的运行效率比较. 一.su 命令临时切换用户身份 SU:( Switch ...

随机推荐

  1. 50+ Useful Docker Tools

    As containers take root, dozens of tools have sprung up to support them. Check out your options for ...

  2. number to string

    C++进行int to string和string to int 下面方法一存在内存泄露 #include<strstream>void main(){ std::strstream ss ...

  3. Flutter知识点:数据存储之sqflite

    sqflite是一款轻量级的关系型数据库,类似SQLite. 在Flutter平台我们使用sqflite库来同时支持Android 和iOS. 使用介绍 1.首选需要在pubspec.yaml 导入库 ...

  4. 上海ctf2017 pwn100 && pwn200

    前言 分析的 idb 文件在这: https://gitee.com/hac425/blog_data/tree/master/shanghaictf pwn100 程序是一个经典的 堆管理程序,基本 ...

  5. 使用ajax请求后返回数据显示undefinded解决办法

    今天在使用七牛的sdk做断点续传时候,当文件过大,本地没有存储时候,想要通过ajax将本地信息存到服务器缓存,之后通过读取缓存的方式来完成文件过大断点续传无法使用问题. 但是在使用ajax请求的时候, ...

  6. Android自定义View之绘制虚线

    现在实现一个效果,有个虚线分割和阴影效果.一个一个实现. 分为2中方式. 1.设计出图,我们SRC引入进来(最简单,但是需要其他资源支持). 2.code实现,有些难度,需要查资料. 现在把第2种方式 ...

  7. Software Testing Techniques LAB 01: test Junit and Eclemma

    1. Installing  1. Install Junit and hamcrest First, I download the Junit-4.12.jar and hamcrest-core- ...

  8. springIOC学习笔记

    目录 目的 引用 xml方式 配置 配置实例 使用 底层简单模拟 全注解方式 基础 包扫描方式 配置 使用 config方式 配置 使用 spring整合junit 引用 示例 目的 让spring统 ...

  9. ajax实现跨域请求

    因为现在一直用的mvc,所以就以mvc来说说ajax跨域提交. 首先说说跨域,简单说就是不同域名访问,比如在aaa.com访问bbb.com. 就拿招聘网站来说,分为两种用户,求职者和企业,求职者端是 ...

  10. August 07th 2017 Week 32nd Monday

    Life is just a series of trying to make up your mind. 生活只是由一系列下决心的努力所构成. Some people say it is not y ...