Raspberry Pi_Kor_12.1.3 super user와 일반 user


Published Book on Amazon


All of IOT

Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 1

All of IOT

Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 2


출판된 한글판 도서


최신 라즈베리파이(Raspberry Pi)로 시작하는 사

물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (상)

최신 라즈베리파이(Raspberry Pi)로 시작하는 사

물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (하)


Original Book Contents


12.1.3  super user와 일반 user

 

12.1.3.1    super user

 

super user란 시스템에서 모든 작업을 할 수 있는 권한이 있는 사용자를 의미한다. 이 사용자는 시스템에 있는 모든 자료에 접근할 수 있고, 모든 프로그램을 실행할 수도 있으며, 시스템의 행동이나 내용을 수정할 수도 있고, 하물며 시스템을 파괴할 있는 권한도 부여되어 있다.

 

Raspberry Pi 시스템에서는 시스템 설치와 동시에 "root" 라는 super user 계정이 제공되는데, 기본적으로 다음과 같은 특징을 가지고 있다.

    시스템에서 모든 작업을 할 수 있는 권한을 가지고 있다.

    이 사용자에게는 시스템에서 특별한 권한을 부여하지 않아도 처음부터 모든 권한이 부여되어 있으며, 사후적으로도 해당 권한을 제한할 수 없다.  

    통상 logon 사용자로서는 사용하지 않지만 필요한 경우는 해당 사용자 계정에 대한 암호를 지정하여 활성화하면 logon 용도로 사용할 수도 있다.

 

12.1.3.2    super user가 필요한 명령

 

Raspberry Pi에서 사용되는 명령 중에서는 일반 user는 실행할 수 없고 반드시 super user가 실행해야 하는 명령들이 많이 있다. 이러한 명령들은 통상 시스템 관리와 연관되는 명령으로, 그 명령의 실행에 따라 시스템에 많은 영향을 미치며, 자칫 잘못 실행되면 시스템에 치명적인 위험을 초래할 수도 있는 것들이다.

 

다음은 super user의 이름으로 실행되어야 하는 명령들의 예이다.

    사용자 관리

adduser      -- 사용자를 생성

deluser       -- 사용자를 삭제

addgroup    -- 사용자 그룹을 생성

 

    파일 권한 관리

chown        -- 파일에 대한 소유자를 변경

chmod        -- 파일에 대한 권한을 변경                   

 


 

    프로그램 관리

apt-get install          -- 프로그램을 설치

apt-get update        -- 프로그램의 package repository update

apt-get upgrade       -- 설치되어 있는 프로그램을 새로운 version으로 upgrade

 

이러한 명령들을 일반 사용자가 아니라 super user의 이름으로 명령을 수행해야 한다.


 

12.1.3.3    "sudo" 명령을 이용하여 super user로 작업하기

 

super user의 권한으로 명령을 실행하는 방법 중에는 "sudo" 라는 명령을 추가로 붙여서 사용하는 방법이 있다. "sudo" "super user do"를 의미한다. 이 방법은 해당 명령을 실행할 때만 super user의 이름을 사용하는 것이며, 차후 명령에는 영향을 미치지 않는다.

 

[명령 형식]       

sudo   [option]   [command]                                 

 

[명령 개요]

    super user 권한으로 명령을 실행해 준다. super user 권한이 필요한 명령에서 같이 사용할 수 있다.

    user 권한    -- super user.

 

[상세 설명]

"sudo" 명령은 지정된 사용자가 사전에 지정된 security policy에 따라서 superuser나 다른 사용자로서 명령을 실행할 수 있도록 한다. 실제의 적용되는 User Id Group Id password database에 규정된 대로 target user의 그것과 대응되도록 설정된다.

 

[주요 Option]

-h

display help message and exit

-g group   

Normally, sudo runs a command with the primary group set to the one specified by the password database for the user the command is being run as (by default, root). The -g (group) option causes sudo to run the command with the primary group set to group instead.  To specify a gid instead of a group name, use #gid.  When running commands as a gid, many shells require that the '#' be escaped with a backslash ('\').  If no -u option is specified, the command will be run as the invoking user (not root).  In either case, the primary group will be set to group.

-u user    

The -u (user) option causes sudo to run the specified command as a user other than root.  To specify a uid instead of a user name, use #uid.  When running commands as a uid, many shells require that the '#' be escaped with a backslash ('\'). Security policies may restrict uids to those listed in the password database.  The sudoers policy allows uids that are not in the password database as long as the target pw option is not set.  Other security policies may not support this.

-U user    

The -U (other user) option is used in conjunction with the -l option to specify the user whose privileges should be listed.  The security policy may restrict listing other users' privileges.  The sudoers policy only allows root or a user with the ALL privilege on the current host to use this option.

 

[사용 Example] 

super user의 이름으로 실행되어야 하는 명령을 일반 user의 이름으로 실행하면 해당 명령이 실행되지 않고, 여러 가지 오류 형태의 오류가 발생한다.

pi@raspberrypi ~ $ chown root ./testdata/manual02

chown: changing ownership of `./testdata/manual02': Operation not permitted

 

다음과 같이 "sudo" 명령을 추가하여 실행하면 오류가 발생하지 않고 정상 처리되는 것을 알 수 있다.

pi@raspberrypi ~ $ sudo chown root ./testdata/manual02

 

 


 

12.1.3.4    "su" 명령을 이용하여 super user로 작업하기

 

"su" 명령은 작업 사용자를 다른 사용자 계정으로 변경해 주는 명령이다. "su" "substitute user"를 의미한다. 이 명령을 사용하여 작업 사용자를 super user로 변경할 수 있다.  "su" 명령을 실행할 때 특정 user를 지정하지 않으면 super user를 지정한 것으로 간주하여 super user를 현재의 작업 사용자로 만들어 준다. 이렇게 되면 향후에 실행되는 모든 명령에 대해서 특별한 지시가 없어도 항상 super user의 이름으로 실행하도록 하는 효과가 있다.

 

나중에 다시 원래의 logon user로 돌아 오기 위해서는 "exit" 명령을 사용한다.

 

여기에 대한 상세한 내용은 [12.2.2.4 su 명령으로 작업 사용자 변경하기]의 설명을 참조하기 바란다.

 

 

[사용 Example] 

다음은 su 명령을 실행할 때 sudo 명령을 추가하지 않고 실행한 것이다. 그러면 다음과 같이 현재 사용자의 암호를 입력하도록 하여 확인 과정을 거치도록 한다. 이것은 부주의로 인한 실행을 사전에 예방하고자 하는 것이다.   

pi@raspberrypi ~ $ su

Password:

root@raspberrypi:/home/pi#

root@raspberrypi:/home/pi# exit

exit

pi@raspberrypi ~ $

 

"su" 명령을 실행할 때 "sudo" 명령을 추가하여 실행하면 다음과 같이 처리되는 것을 확인할 수 있다.

pi@raspberrypi ~ $ sudo su

root@raspberrypi:/home/pi#  

root@raspberrypi:/home/pi# exit

exit

pi@raspberrypi ~ $

 


 

12.1.3.5    "visudo" 명령 - super user 권한의 통제

 

sudo 명령은 시스템에 미치는 영향이 크기 때문에 아무나 제한 없이 사용하면 많은 문제가 발생할 가능성이 있으므로, 이런 명령을 실행할 수 있는 권한을 사전에 지정된 제한된 시스템 관리자에게만 부여할 필요가 있다.

 

이렇게 시스템에서 "sudo" 명령을 실행할 수 있는 권한을 통제하기 위해서 "sudo" 명령을 실행할 수 있는 사용자의 목록과 그들 사용자가 실행할 수 있는 명령 목록에 대한 자료를 시스템에서 별도로 관리하고 있는데, 그 상세 내용이 "/etc/sudoers" 파일에서 관리되고 있다. 여기서 지정되지 않은 사용자가 sudo 명령을 사용하거나 여기서 허락되지 않은 명령을 "sudo" 명령을 이용하여 수행하면 해당 명령이 실행되지 않도록 통제하고 있다.

 

시스템에서 사용자 별로 이런 권한을 조정할 필요가 있는데, 이런 작업을 하기 위해서는 "visudo" 명령을 사용해서 통제자료를 조정할 수 있다.

 

[명령 형식]       

visudo [-chqsV] [-f sudoers]

 

[명령 개요]

    "sudo" 명령을 실행할 수 있는 사용자 목록과 "sudo" 명령으로 실행할 수 있는 명령 목록을 관리하고 있는 시스템 정보를 조정한다.

    user 권한    -- super user.

 

[상세 설명]

    "visudo" 명령은 "sudoers" file을 안전하게 편집할 수 있도록 한다. "visudo" 명령은 sudoers file lock을 걸어서 동시에 여러 사람이 수정할 수 없도록 하고, 입력한 내용에 대해서 기본적인 정확성을 점검해준다.

    default security policy"/etc/sudoers" 파일에 있는 "sudoers"이다.

    이 명령은 "vi" 명령을 이용하여 지정된 파일을 편집하는 기능을 수행한다.


 

[주요 Option]

-c         

Enable check-only mode.  The existing sudoers file will be checked for syntax errors, owner and mode.  A message will be printed to the standard output describing the status of sudoers unless the -q option was specified.  If the check completes successfully, visudo will exit with a value of 0.  If an error is encountered, visudo will exit with a value of 1.

-s         

Enable strict checking of the sudoers file.  If an alias is used before it is defined, visudo will consider this a parse error.  Note that it is not possible to differentiate between an alias and a host name or user name that consists solely of uppercase letters, digits, and the underscore ('_') character.

-f sudoers 

Specify and alternate sudoers file location.  With this option visudo will edit (or check) the sudoers file of your choice, instead of the default, /etc/sudoers.  The lock file used is the specified sudoers file with ".tmp" appended to it.  In check-only mode only, the argument to -f may be "-", indicating that sudoers will be read from the standard input.

 

[Files]

/etc/sudo.conf         

sudo front end configuration

/etc/sudoers

The default security policy

 

[사용 Example] 

sudo 권한을 조정하기 위해서 아래와 같이 "visudo" 명령을 실행한다. 그러면 아래와 같이 별도의 화면이 나타나는데, 이것은 "/etc/sudoers"의 내용을 표시한 것이다. 이 명령이 실행되면 "/etc/sudoers" 파일이 아니라 일단 "/etc/sudoers.tmp" 파일에서 작업을 하고 있는 것을 확인할 수 있다.

 

pi@raspberrypi ~ $ sudo visudo

 


 

GNU nano 2.2.6                               File: /etc/sudoers.tmp

#

# This file MUST be edited with the 'visudo' command as root.

#

# Please consider adding local content in /etc/sudoers.d/ instead of

# directly modifying this file.

#

# See the man page for details on how to write a sudoers file.

#

Defaults        env_reset

Defaults        mail_badpass

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

 

# Host alias specification

 

# User alias specification

 

# Cmnd alias specification

 

# User privilege specification

root    ALL=(ALL:ALL) ALL

 

# Allow members of group sudo to execute any command

%sudo   ALL=(ALL:ALL) ALL

 

# See sudoers(5) for more information on "#include" directives:

 

#includedir /etc/sudoers.d

pi ALL=(ALL) NOPASSWD: ALL

 

 

                                   [ line 1/29 (3%), col 1/2 (50%), char 0/696 (0%) ]

^G Get Help       ^O WriteOut       ^R Read File      ^Y Prev Page      ^K Cut Text           ^C Cur Pos

^X Exit           ^J Justify        ^W Where Is       ^V Next Page      ^U UnCut Text         ^T To Spell

 


 

sudoers에 대한 해당 권한을 설정하는 형식은 다음과 같다

 

<사용자/그룹> <terminal> =< (작업 사용자 : 작업그룹) > [No Password :] <실행 명령>

 

해당 내용을 간편하게 정의하기 위해서 사전에 정의된 alias를 이용할 수 있다. alias는 사용하기 이전에 정의되어 있어야 한다. alias를 정의할 때는 그 종류에 따라 사용하는 형식이 다른데, 다음과 같이 정의한다

 

    명령을 실행하는 사용자/그룹

권한을 부여하는 사용자나 사용자 그룹을 의미한다. 허용되는 값들은 다음과 같다

    사용자              -- 특정 개별 사용자를 지정하는 경우이다.

    %사용자 그룹     -- 사용자 그룹을 지정할 경우이다

    정의된 alias       -- alias로 정의된 user를 지정하는 경우이다

 

사용자에 대한 alias를 정의할 때는 "User_Alias" 명령을 사용한다.

Ex) User_Alias     OPERATORS = joe, mike, jude

 

    명령이 실행되는 terminal  

sudo 권한을 사용하여 명령을 실행할 수 있는 terminal을 지정한다. 허용되는 값들은 다음과 같다

    ALL                  -- 모든 terminal

    정의된 alias       -- alias로 정의된 terminal

 

host terminal에 대한 alias를 정의할 때는 "Host_Alias" 명령을 사용한다.

Ex) Host_Alias     OFNET = 10.1.2.0/255.255.255.0

 

    실행할 때 사용하는 작업 사용자 및 작업 그룹

명령을 실행할 때 사용하는 작업 사용자를 의미한다. 허용되는 값들은 다음과 같다

    ALL                  -- 모든 user 또는 group

    정의된 alias       -- alias로 정의된 user 또는 group

 

실행 사용자에 대한 alias를 정의할 때는 "Runas_Alias" 명령을 사용한다.

Ex) Runas_Alias    OP = root, operator

 


 

    No Password 허용

명령을 실행할 때 실행의 정확성을 점검하기 위해서 암호를 입력하도록 하여 확인을 받는데, 이러한 확인 단계를 거치지 않고 곧바로 작업을 할 수 있는지를 지정한다.

    NOPASSWD:      -- 암호를 입력할 필요가 없다.

    공백                 -- 자신의 암호를 입력해야 한다.

 

    실행하는 명령

sudo명령으로 실제로 실행하는 명령을 의미한다. 허용되는 값들은 다음과 같다

    ALL                  -- 모든 명령

    정의된 alias       -- alias로 정의된 명령

 

실행 명령에 대한 alias를 정의할 때는 "Cmnd_Alias" 명령을 사용한다

Ex) Cmnd_Alias    PRINTING = /usr/sbin/lpc, /usr/bin/lprm

 

[사용 Example] 

사전에 아래와 같이 alias를 정의해서 사용하기로 한다.  

 

User_Alias     OPERATORS = joe, mike, jude

Runas_Alias    OP = root, operator

Host_Alias     OFNET = 10.1.2.0/255.255.255.0

Cmnd_Alias    PRINTING = /usr/sbin/lpc, /usr/bin/lprm

 

다음은 "sudoers" 파일에서 정의하는 내용에 대한 사례이다.

 

다음 예에서 "root" 사용자는 ALL terminal에서 ALL 소유자, ALL 그룹의 이름으로 ALL 명령을 실행할 수 있다.

 

root    ALL=(ALL:ALL) ALL

 


 

다음 예에서 "sudo" 그룹은 ALL terminal에서 ALL 소유자, ALL그룹의 이름으로 ALL 명령을 실행할 수 있다.

 

%sudo   ALL=(ALL:ALL) ALL

 

 

다음 예에서 "pi" 사용자는 ALL terminal에서 ALL 소유자, ALL 그룹의 이름으로 ALL 명령을 실행할 수 있는데, 암호를 입력하지 않고도 처리를 할 수 있다.

 

pi  ALL=(ALL) NOPASSWD: ALL

 

다음 예에서 alias "OPERATORS"에서 정의된 사용자는 ALL terminal에서 "/sbin/poweroff" 명령을 실행할 수 있다.

 

OPERATORS  ALL= /sbin/poweroff

 

다음 예에서 alias "OPERATORS"에서 정의된 사용자는 terminal ALL에서 명령 ALL을 실행할 수 있다.

 

OPERATORS ALL=ALL

 

다음 예에서 사용자 "linus" terminal ALL에서 사용자 alias "OP"의 이름으로 명령 ALL을 실행할 수 있다.

 

linus ALL=(OP) ALL

 

다음 예에서 사용자 "user2" terminal alias "OFNET"에서 사용자 ALL의 이름으로 명령 ALL을 실행할 수 있다.

 

user2 OFNET=(ALL) ALL

 

다음 예에서 사용자 "user3" terminal ALL에서 명령 alias "PRINTING"을 실행할 수 있다.

 

user3 ALL= PRINTING

 

Leave a Reply