linux登录命令无法使用吗,Linux以www(无登录权限)身份执行命令 | kTWO-个人博客

  • Post author:
  • Post category:linux


摘要

服务器上运行程序,考虑到安全问题,通常不会以root身份运行,最常见的就是web服务器,同事上面装的web服务器中间件(比如Nginx、PHP等)都会新建www用户(不给登录权限),然后以www用户身份运行web服务程序。本文将介绍如何使用无登录权限的www用户启动程序。

89ce60841da503ee238ea69f0faf60cc.gif

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用户