강좌
클라우드/리눅스에 관한 강좌입니다.
자격증 분류

리눅스마스터1급 : 리눅스 사용자교체하는 su 명령어

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스마스터1: 리눅스 사용자교체하는 su 명령어

 

 

su

 

 

su“Substitute User”의 약어로서 다른 계정 사용자로 교체할 때 사용하는 명령어이다.

 

 

 

리눅스 서버로 로그인하여 시스템을 사용하는 중에 다른 계정의 권한이 필요한 경우에 su 명령을 이용하여 리눅스 쉘 상태에서 바로 다른 사용자로 교체할 수 있다.

 

 

 

 

 

그리고 리눅스 기본 설정에서는 root로 원격 로그인이 되지 않도록 설정되어 있거나 그렇지 않은 경우(SSH의 경우에는 root 접속이 가능하다)에 원격 로그인이 되지 않도록 할 필요가 있다.

 

 

 

따라서 일반 사용자로 접속하여 시스템 관리를 하기 위해서는 su 명령이 필요하다.

 

 

 

 

 

1) 개요

 

 

 

 

 

su [-flmp] [-c 명령] [-s ] [--login] [--fast] [--preserve-environ-ment]

[--command=명령] [--shell=] [-] [--help] [--version] [사용자 [인수...]]

 

 

 

 

 

 

2) 옵션

 

su 명령에 사용되는 옵션들은 다음과 같다.

 

 

 

 

-c COMMAND, --command=COMMAND : 대화형 쉘을 시작하지 않고 -c 옵션을 쉘에 주어서 한 개의 명령만을 수행하도록 한다.

 

 

 

 

-f, --fast : 쉘에 -f 옵션을 전달한다.

 

 

 

csh tcsh 에만 해당되는 것으로서, -f 옵션은 시작 파일(.cshrc)을 읽지 않도록 한다.

 

 

 

본쉘의 경우, -f 옵션은 파일 패턴 확장을 불능으로 설정하는 것으로서 일반적으로 그렇게 하지 않는다.

 

 

 

 

--help : 표준출력으로 사용법을 출력하고 정상적으로 종료한다.

 

 

 

 

-, -l, --login : 쉘을 로그인 쉘로 만든다.

 

 

 

그 의미는 다음과 같다.

 

 

 

‘TERM’, ‘HOME’, ‘SHELL’ 그리고 ‘USER’, ‘LOGNAME’(수퍼 유저라고 하더라도 설정된다)을 제외하고 나머지 환경변수를 제거한다.

 

 

 

그리고 ‘PATH’를 컴파일 기본 설정값으로 설정한다.

 

 

 

USER의 홈디렉토리로 이동한다.

 

 

 

쉘 이름에 "-" 를 추가하여 로그인 스크립트 파일들을 읽을 수 있게 할 수 있다.

 

 

 

 

-m, -p, --preserve-environment : ‘HOME’, ‘USER’, ‘LOGNAME’, ‘SHELL’ 등의 환경변수값을 변경하지 않는다.

 

 

 

만약 su 를 실행하는 사용자가 수퍼 유저이거나 사용자의 쉘이 제한된 쉘일 때는 /etc/passwd에 기재된 USER의 쉘이 아니라 ‘SHELL’ 환경변수에 설정된 쉘을 실행한다.

 

 

 

제한된 쉘이란 /etc/shells에 등록되어 있지 않거나 /etc/shells 파일이 존재하지 않을 때 내장 컴파일 된 목록에 들어있지 않는 경우를 말한다.

 

 

 

이 옵션의 일부는 --login --shell 옵션에 의해 무시될 수 있다.

 

 

 

 

-s, --shell shell : su 를 실행하는 사용자가 수퍼 유저가 아니거나 사용자의 쉘이 제한된 쉘일 때는 /etc/passwd에 등록된 사용자(USER)의 쉘을 수행하지 않고 지정한 쉘을 수행한다.

 

 

 

 

--version : 표준출력으로 버전정보를 출력하고 정상적으로 종료한다.

 

 

 

 

3) 설명

 

 

네트워크로 시스템에 접속할 때는 항상 일반 계정으로 접속하는 것이 보안상 안전하다.

 

 

 

이에 따라 SSH 등의 경우를 제외하면 거의 대부분 시스템에 root로 접속할 수 없도록 기본 설정되어 있다

 

(물론 바꿀 수도 있지만 보안상 권장하지 않는다). 이 때 시스템을 관리하기 위해서 su 명령을 사용하게 된다.

 

 

 

 

su 뒤에 아무것도 붙이지 않고 su 명령만 내리면 root 계정으로 변경된다.

 

 

 

, root 계정으로 변경하기 위해서는 su 뒤에 사용자명을 적지 않고 명령을 내리면 된다.

 

 

 

 

 

이때 실행되는 쉘은 지정된 사용자의 패스워드 목록에서 찾아오거나 없으면 /bin/sh 를 수행한다.

 

 

 

그리고 만약 사용자에 패스워드가 있다면 su root가 아닌 한 패스워드를 물어온다.

 

 

 

기본적으로, su 명령을 내리면 현재 디렉토리가 변경되지 않고, /etc/passwd 파일에서 사용자에 대한 환경변수인 ‘HOME’, ‘SHELL’ 등을 설정하며, 만약 수퍼 유저인 경우가 아니라면 사용자는 지정된 사용자(USER)와 로그인 이름(LOGNAME)의 사용자로 설정한다.

 

 

 

그렇지만 기본적으로 이 쉘은 해당 사용자의 로그인 쉘이 아니다.

 

 

 

 

만약 한 개 이상의 인수가 주어지면 쉘에 대한 인수로 전달된다.

 

 

 

su /bin/sh나 다른 쉘을 특정하여 사용하도록 하지는 않지만, c 옵션으로 특정 쉘로 지정하는 경우에는 해당 사용자는 지정된 쉘을 사용한다.

 

 

 

그리고 'su -' 라고 하여 root 환경으로 전환하면 root의 환경 변수가 반영된다.

 

 

 

물론, 일반 사용자의 경우에도 “su 사용자명으로 명령을 내리면 변경된 사용자에 대해 그 사용자의 환경변수가 반영된다.

 

 

 

만약 root 사용자가 일반 계정으로 변경하는 경우라면, 특별히 해당 사용자의 패스워드를 묻지 않고 그대로 해당 사용자로 변경된다.

 

 

 

 

syslog를 사용하는 시스템에서는 su 명령의 결과가 실패인 경우에는 반드시 보고하고 성공인 경우에는 선택적으로 보고하도록 컴파일하면 susyslog를 사용한다.

 

 

 

 

 

다음은 root 사용자로 변경하는 예이다.

 

 

 

 

 

 

 

 

 

[sulinuxer@localhost ~]$ su

암호: ********

[root@localhost sulinuxer]# pwd

/home/sulinuxer

[root@localhost sulinuxer]#

 

 

 

 

 

다음은 root 사용자의 환경변수를 반영하여 root 사용자로 변경하는 예이다.

 

 

 

 

 

 

 

 

 

[sulinuxer@localhost ~]$ su -

암호: ********

[root@localhost ~]#

 

 

 

 

 

다음은 root 사용자가 일반 사용자로 변경한 예이다.

 

 

 

 

 

 

 

 

[root@localhost ~]# su - sulinuxer

[sulinuxer@localhost ~]$

 

 

 

 

 

다음은 c 옵션을 사용하여 계정 변환 없이 특정 명령어만 실행하도록 한 예이다.

 

 

 

 

 

 

 

 

 

[sulinuxer@localhost ~]$ su -c ‘cat /etc/shadow’

암호: ********

root:$1$Yc5a5P3m$zvADT1p2uQxRPH8AEnQmc1:15830:0:99999:7:::

bin:*:15830:0:99999:7:::

daemon:*:15830:0:99999:7:::

adm:*:15830:0:99999:7:::

lp:*:15830:0:99999:7:::

sync:*:15830:0:99999:7:::

shutdown:*:15830:0:99999:7:::

halt:*:15830:0:99999:7:::

mail:*:15830:0:99999:7:::

news:*:15830:0:99999:7:::

uucp:*:15830:0:99999:7:::

operator:*:15830:0:99999:7:::

games:*:15830:0:99999:7:::

gopher:*:15830:0:99999:7:::

ftp:*:15830:0:99999:7:::

nobody:*:15830:0:99999:7:::

dbus:!!:15830:0:99999:7:::

...중략...

mysql:!!:15831:0:99999:7:::

sulinuxer:$1$Zdwt1AOQ$tDVVxI2p7pmQZKMlyuWrA.:16018:0:99999:7:::

[sulinuxer@localhost ~]$

 

 

 

 

 

 

 

다음은 s 옵션을 사용하여 다른 계정으로 변환할 때 사용할 쉘을 지정한 예이다.

 

 

 

 

 

 

 

 

 

[sulinuxer@localhost ~]$ su s /bin/sh root

암호: ********

-sh-3.2#

 

 

 

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,134 명
  • 현재 강좌수 :  36,188 개
  • 현재 접속자 :  250 명