0x01 前言
服务器上运行程序,考虑到安全问题,通常不会以root身份运行,最常见的就是web服务器,同事上面装的web服务器中间件(比如Nginx、PHP等)都会新建www用户(不给登录权限),然后以www用户身份运行web服务程序。
1 |
www:x:1000:1000::/home/www:/sbin/nologin |
如上面的www用户,配置了nologin,所以是无法直接登录的,那怎么使用www用户身份执行程序呢?下面揭晓。
0x02 su命令的-s选项
先看下su命令的帮助
1 2 3 4 5 6 7 8 9 10 11 |
root@ktwo:~# su -h Usage: su [options] [LOGIN] Options: -c, --command COMMAND pass COMMAND to the invoked shell -h, --help display this help message and exit -, -l, --login make the shell a login shell -m, -p, --preserve-environment do not reset environment variables, and keep the same shell -s, --shell SHELL use SHELL instead of the default in passwd |
su www命令允许我们暂时以www用户登录,但是当www用户无登录权限的时候会直接爆出以下错误:
1 2 |
root@ktwo:~# su www Cannot execute /sbin/nologin: No such file or directory |
因为我们对www设置的shll是/sbin/nologin,但是这个shell是不存在的,所以找不到。
su命令的-s选项允许我们指定一个shell路径,而不是用配置中的默认值,所以我们只要执行以下命令就可以给www用户一个shell权限:
1 2 3 |
root@ktwo:~# su www -s /bin/bash www@ktwo:/root$ whoami www |
可以看到此时身份已经变成了www用户