摘要
服务器上运行程序,考虑到安全问题,通常不会以root身份运行,最常见的就是web服务器,同事上面装的web服务器中间件(比如Nginx、PHP等)都会新建www用户(不给登录权限),然后以www用户身份运行web服务程序。本文将介绍如何使用无登录权限的www用户启动程序。
0x01 前言
服务器上运行程序,考虑到安全问题,通常不会以root身份运行,最常见的就是web服务器,同事上面装的web服务器中间件(比如Nginx、PHP等)都会新建www用户(不给登录权限),然后以www用户身份运行web服务程序。
www:x:1000:1000::/home/www:/sbin/nologin
1
www:x:1000:1000::/home/www:/sbin/nologin
如上面的www用户,配置了nologin,所以是无法直接登录的,那怎么使用www用户身份执行程序呢?下面揭晓。
0x02 su命令的-s选项
先看下su命令的帮助
Shell
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
1
2
3
4
5
6
7
8
9
10
11
root@ktwo:~# su -h
Usage:su[options][LOGIN]
Options:
-c,–commandCOMMANDpassCOMMANDtotheinvokedshell
-h,–helpdisplaythishelpmessageandexit
-,-l,–loginmaketheshellaloginshell
-m,-p,
–preserve-environmentdonotresetenvironmentvariables,and
keepthesameshell
-s,–shellSHELLuseSHELLinsteadofthedefaultinpasswd
su www命令允许我们暂时以www用户登录,但是当www用户无登录权限的时候会直接爆出以下错误:
root@ktwo:~# su www
Cannot execute /sbin/nologin: No such file or directory
1
2
root@ktwo:~# su www
Cannotexecute/sbin/nologin:Nosuchfileordirectory
因为我们对www设置的shll是/sbin/nologin,但是这个shell是不存在的,所以找不到。
su命令的-s选项允许我们指定一个shell路径,而不是用配置中的默认值,所以我们只要执行以下命令就可以给www用户一个shell权限:
root@ktwo:~# su www -s /bin/bash
www@ktwo:/root$ whoami
www
1
2
3
root@ktwo:~# su www -s /bin/bash
www@ktwo:/root$whoami
www
可以看到此时身份已经变成了www用户