반응형


안녕하세요 가야태자 @talkit 입니다.

오늘은 계속 사용하고 있는 sudo와 아직 보여 드리지 않았지만, su 라는 명령어에 대해서 말씀 드리겠습니다.

su는 사용자의 권한을 획득하는 명령어이고, 여기에 root 권한도 포함 됩니다.

sudo 해당 사용자 처럼 명령을 수행해 줍니다.

차이점은 한두가지 일을 그냥 진행할때는 sudo가 좋습니다.

계속 해당 사용자의 일을 해야 한다면, 해당 사용자로 로그인 하거나 su를 이용해서 아예 그 계정 권한을 획득해서 작업을 하는 것이 좋다고 생각합니다.

su 사용법

일단 간단하게 su에 대해서 알아 보겠씁니다.

su [옵션들] [-] [사용자명] [아규먼트들]

저도 계속 사용하던 것만 사용해서 알려 드리겠습니다.

옵션은 많은데 -s 정도가 필요할 것 같습니다. 나머지는 별로 저기 - 가 중요 합니다.

"-" 는 음 md에서 -가 뭔가 있어서 ^^ 큰 따옴표로 묶었습니다.

"-"는 해당 사용자의 권한을 완전히 내것으로 입니다.
"-"를 빼면, 환경변수는 내 것을 사용하고 계정만 변경 됩니다.

조금 있다가 차이를 보여 드리겠습니다.

우분투에서 root가 될 수 있는지 한번 보겠습니다.

우분투에서 root 계정의 비밀번호가 없어서 접근이 안되네요 그래서 아래 명령어를 내려 줬습니다.

sudo passwd root

이렇게요 root의 비밀번호를 셋팅 하겠다는 거지요

sudo passwd root
[sudo] password for talkit:
New password:
Retype new password:
passwd: password updated successfully

이렇게 변경해 주었습니다. ^^

그래서 이제 제 우분투에서 root 권한을 획득할 수 있습니다. ^^

실제로 root 권한을 획득해 보겠습니다.

talkit@ubuntu:~$ su -
Password:
root@ubuntu:~#

혹시 프롬프트의 차이가 느껴 지시나요?

$ 와 # 입니다.

$는 일반 사용자 계정을 표시합니다.

"#"은 슈퍼 사용자 계정을 표시합니다.

그래서 계정 끝이 # 이면 조심하셔야 합니다.

모든 곳에 영향을 미치니까요

su - 없이 해보겠습니다.


root@ubuntu:~# echo $HOME
/root
root@ubuntu:~# exit
logout
talkit@ubuntu:~$ echo $HOME
/home/talkit
talkit@ubuntu:~$ su
Password:
root@ubuntu:/home/talkit# echo $HOME
/root
talkit@ubuntu:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
talkit@ubuntu:~$ su -
Password:
su: Authentication failure
talkit@ubuntu:~$ su -
Password:
root@ubuntu:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
root@ubuntu:~#

환경 변수 차이가 거의 없습니다. T.T

       -, -l, --login
              Start  the shell as a login shell with an environment similar to
              a real login:

                 o      clears all the environment variables except  TERM  and
                        variables specified by --whitelist-environment

                 o      initializes  the  environment  variables  HOME, SHELL,
                        USER, LOGNAME, and PATH

                 o      changes to the target user's home directory

                 o      sets argv[0] of the shell to '-' in order to make  the
                        shell a login shell

그래서

"-" 옵션을 제가 잘 못 이해 하고 있는 줄 알고 다시 봤는데 비슷하게 이해는 하고 있네요 .

환경 변수중의 일부만 안변하고 변하는 것이고

"-" 옵션을 주면, 실제로 그 계정으로 login한걸로 되네요 ^^

일단 그렇다고 합니다.

root user로 오래 작업을 해야 할 경우 su - 를 이용해서 작업하시는 것이 훨씬 효율적입니다. - 없이 하면 뭔가 권한이 조금 부족한 느낌입니다. ^^

그리고 su - 뒤에 사용자를 붙이면 해당 사용자로 변경 됩니다.

su - 는 실제로 su - root 가 생략 되어 있다고 보시면 됩니다.

비밀번호 없이 해당계정으로 접근 하시려면, root 계정으로 접근 하신 다음에 비밀번호 없는 계정으로 접근 하시면 됩니다.

오 방금 옵시디안에 vim 옵션을 활성화 했는데 좋습니다. ^^ 기보드 화살표 키로 안가도 될네요 ㅎㅎㅎ

실제로 한번 예저를 보여 드리겠습니다.


su - mattermost
Password:
su: Authentication failure
talkit@ubuntu:~$ su - root
Password:
root@ubuntu:~# su - mattermost
su: warning: cannot change directory to /home/mattermost: No such file or directory
$

위에서 보시면, mattermost 계정으로 접근이 안됩니다. 왜냐면 아까 root 처럼 비밀번호가 없습니다. ^^

하지만, root 계정으로 su 한 다음에 mattermost 계정으로 su 하면 해당 계정으로 접근은 가능 합니다.

계정 홈도 지정해주지 않아서 ^^

저렇게 되네요

마지막으로 su -s -

를 알리고 su 관련 내용은 접고 다음에 있는 sudo를 이야기 하겠습니다.

su -s /usr/bin/csh -

위 명령어를 내렸는데 설치가 안되어 있습니다. ^^

그래서 또 설치 합니다.

sudo apt install csh

csh 은 가끔씩 쓸일이 있어서 설치 해 놓으면 좋을 것 같습니다.

talkit@ubuntu:~$ su -s /bin/csh -
Password:
#

이렇게 하시면 계정을 변경할때 기본 쉘을 변경할 수 있습니다.

여기까지가 su에 관련된 내용입니다.

원하는 사용자의 권한 획득 이제 하시겠죠.

sudo 사용법

sudo는 원하는 사용자 권한으로 일하기라고 생각하시면 됩니다.

#
# 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:/snap/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin 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

우선 sudo를 설명 드리려면 sudoers 라는 파일을 알아야 합니다. ^^

%sudo ALL=(ALL:ALL) ALL

위 줄이 중요합니다.

sudo는 저 그룹에 속한 사용자만 가능 합니다.

제 컴퓨터에서 talkit 계정은

vi /etc/group

해서 보시면

sudo:x:27:talkit

sudo 그룹에 포함되어 있습니다

자 그러면, talkit2 계정을 만들겠습니다.

adduser talkit2

일부러 그룹을 안주고 만들었습니다.

저 talkit2에 비밀번호를 주겠습니다.

sudo passwd talkit2

비밀번호를 줬구요

talkit2 계정에 su로 접근 해서 sudo를 한번 해보겠습니다.

첫번째는 실패 합니다.

다시 빠저 나와서 talkit 계정으로

talkit2를 sudo 그룹에 넣습니다.

sudo usermod -aG sudo talkit2

위와 같이 하면 성공합니다.

talkit@ubuntu:~$ su - talkit2
su: user talkit2 does not exist
talkit@ubuntu:~$ adduser talkt2
adduser: Only root may add a user or group to the system.
talkit@ubuntu:~$ sudo adduser talkt2
Adding user `talkt2' ...
Adding new group `talkt2' (1001) ...
Adding new user `talkt2' (1001) with group `talkt2' ...
Creating home directory `/home/talkt2' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for talkt2
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] y
talkit@ubuntu:~$ su - talkit
Password:
talkit@ubuntu:~$ su - talkit2
su: user talkit2 does not exist
talkit@ubuntu:~$ su - talkt2
Password:
su: Authentication failure
talkit@ubuntu:~$ su - talkt2
Password:
su: Authentication failure
talkit@ubuntu:~$ su - talkt2
Password:
talkt2@ubuntu:~$ sudo vi /etc/sudoers
[sudo] password for talkt2:
talkt2 is not in the sudoers file.  This incident will be reported.
talkt2@ubuntu:~$ exit
logout
talkit@ubuntu:~$ sudo usermod -aG sudo talkt2
talkit@ubuntu:~$ su - talkt2
Password:
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

talkt2@ubuntu:~$ sudo vi /etc/sudoers
[sudo] password for talkt2:
talkt2@ubuntu:~$ sudo cat /etc/sudoers
#
# 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.

실제로 해보면 위와 같이 되는데 ^^

제가 실수로 talkt2 으로 계정을 만들었네요. 저거 빼고는 차가 없이 잘 테스트가 되었습니다.

일단 실습을 먼저 했구요.

이 실습의 목적은 사용자를 어떻게 sudo 가능하도록 하느냐 입니다. ^^

이제 실제로 sudo 사용법은 어렵지 않습니다. ^^

sudo [옵션] 원하는명령어 [원하는명령어의 옵션들]

옵션들은 생략이 가능하고 sudo 이다 보니 ^^ 무조건 명령어는 하나 넣으셔야 합니다.

옵션 중에는 -u 옵션만 설명을 드리겠습니다.

다른 설명을 원하시면 ^^

man sudo

설명이 잘 나와 있습니다.

sudo cat /etc/sudoers
 sudo cat /etc/sudoers
#
# 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.
#

talkit 계정으로 이명령어를 실행하면 sudo 사용자니까 잘 됩니다.

-s 옵션을 설명을 드리면 ^^

sudo -u mattermost cat /etc/sudoers

이렇게 명령을 내려 보겠습니다.

sudo -u mattermost cat /etc/sudoers
cat: /etc/sudoers: Permission denied

당연히 권한이 없는 사용자로 했으니 권한이 없답니다.

결론

음 결론이라기 보다는 권고에 가까 울 것 같습니다.

되도록이면 보안상 sudo를 사용하십시오.

불편하시더라도 ^^

정말로 root 사용자로 작업을 해야 하면 그때

su - 를 이용해서 권한을 획득한 후에 사용하십시오.

su/sudo를 잘 사용해서 root 권한의 업무를 잘 진행하시기 바랍니다.

감사합니다.

#linux #command

반응형

+ Recent posts