0. 概述
在使用 Linux 的时候,我们总会遇到很多跟用户权限有关的问题,一个常见的操作方式就是以指定用户运行程序,在本文中,我将介绍两种不同的方式来操作。
1. su
su
命令可以让一个普通的用户切换到其他的用户,并拥有和切换后用户相同的权限做一些操作,当然,这里的其他用户也包括超级用户。这里有一个注意点:
- 普通用户切到其他用户:需要输入其他用户的密码
- 超级用户切换到普通用户:无需密码
su 的命令形式
[root@liqiang.io]# man su
NAME
su - run a command with substitute user and group ID
SYNOPSIS
su [options...] [-] [user [args...]]
其中一些比较常见的选项为:
-l, –login
:切换用户后是否使用新用户的环境变量(指定则表示需要加载环境变量)-c, –command=COMMAND
:以新用户执行特定命令,执行完毕之后退出新用户–session-command=COMMAND
:配合 -c 传递单个命令到 shell 中,但是不创建新的 session-s, –shell=SHELL
:指定执行命令的 shell
示例
[root@liqiang.io]# su - root -s /bin/sh -c “/usr/local/nginx/sbin/nginx”`
优缺点
- 优点:用户可以通过切换命令指定其他用户权限的命令
- 缺点:容易造成权限滥用
- 一个好的实践是通过超级用户以普通用户角色运行命令
2. runuser
runuser 可以使用一个用户或者组 ID 来运行一个 shell,但是局限在于这个命令只有 root 能用。
示例
[root@liqiang.io]# runuser -l userNameHere -c '/path/to/command arg1 arg2'
优缺点
- 优点:可以防止用户权限滥用
- 缺点:只能 root(或者具有 setuid 的用户)使用
3. 错误处理
This account is currently not available
- 可能原因一:HOME 目录不存在
- 解决方式:创建 HOME 目录
- 可能原因二:没有指定默认 bash
[root@liqiang.io]# usermod -s /bin/bash username