su: 권한이 거부되었습니다(자격 증명이 정확함).

su: 권한이 거부되었습니다(자격 증명이 정확함).

비슷한 제목의 질문이 많습니다. 나는 이 질문을 하기 전에 이 모든 것을 확인했다고 생각합니다.

내 실수 su: Permission denied사용자 전환이 완료되지 않았습니다. 자세한 내용은 다음과 같습니다.

ssh admin@remote-machine
su --login myuser
Password:
su: Permission denied
(the password is correct)

결과: 사용자 전환에 실패했습니다.

그러나 다음 명령은 작동하지만 작은 오류가 보고됩니다.

su --preserve-environment myuser
Password:
bash: /home/admin/.bashrc: Permission denied

결과: 사용자 전환 성공

또한 su myuser매개변수가 없는 일반도 허용됩니다. 다음 변형도 작동합니다.

su -P myuser
su -s /bin/sh myuser

해결 방법이 있지만 문제를 이해하고 싶습니다. 또한 내가 가장 좋아하는 명령 형식이 su - user작동하지 않습니다. 이 문제는 하나의 원격 장치에만 영향을 미칩니다. 하지만 동일한 구성을 가진 것으로 보이는 원격 장치가 여러 개 있습니다. 그들은 모두 Arch Linux를 실행합니다.

저는 SELinux를 사용하지 않습니다. 다른 질문을 읽으면서 몇 가지 사항을 확인했습니다.

user@remote-machine [/home/myuser] # ls
total 13904
drwx--x---+ 1 myuser myuser    3210 Feb 18 16:00  .
-rw-r--r--  1 myuser myuser     396 Aug 13  2018  .bashrc

# getfacl /home/myuser/
getfacl: Removing leading '/' from absolute path names
# file: home/myuser/
# owner: myuser
# group: myuser
user::rwx
user:sddm:--x
group::---
mask::--x
other::---

# ls /home/admin/.bashrc
-rw-r--r-- 1 admin admin 624 Apr 17 17:08 /home/admin/.bashrc

less /etc/passwd
myuser:x:1000:1000:myuser myuser:/home/myuser:/bin/bash

다음 /etc/pam.d/su줄은 주석 처리되어 있습니다(기본값).

# auth       required     pam_wheel.so use_uid

편집하다: 필요에 따라 정보를 추가합니다.

먼저 이 시스템을 이런 문제가 없는 유사한 시스템과 비교했습니다 diff -rw. 차이 없음. 둘 다 ./etc/profile.d/su -l/etc/profile.d/

/etc/profile기존 Arch Linux 문서와 비교하면 그 자체로 한 가지 변경 사항이 있습니다. 그러나 이러한 변형은 기능하는 시스템과 문제가 있는 시스템 모두에 존재합니다 su -l. 유일한 변화 /etc/profile는 입니다 umask 006.

/etc/bash.bashrc

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

[[ $DISPLAY ]] && shopt -s checkwinsize

HISTFILESIZE=
HISTSIZE=
HISTCONTROL=ignorespace

case ${TERM} in
  xterm*|rxvt*|Eterm|aterm|kterm|gnome*)
    PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'

    ;;
  screen*)
    PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'printf "\033_%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'
    ;;
esac

[ -r /usr/share/bash-completion/bash_completion   ] && . /usr/share/bash-completion/bash_completion

su아래 표시된 파일은 명령을 실행한 사용자 계정에 있습니다 . 그러나 이 문제는 다른 사용자로 변경하는 모든 사용자에게 영향을 미칩니다. 파일을 수정한 사용자 계정이 표시되지 않습니다(~/.bash_profile, ~/.bash_login 및 ~/.profile의 경우). .bash_login어떤 계정에도 없음 또는 /etc.

다음 두 파일은 간단합니다.

~/.bash_profile

[[ -f ~/.bashrc ]] && . ~/.bashrc

~/.bashrc

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

계정에는 ~/.bashrc다음이 있습니다.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi
  • 모든 별칭이 .bash_aliases좋아 보입니다. 이 문제는 별칭이 정의되지 않은 사용자에게도 영향을 미칩니다.
  • /etc/security/limits.conf- 줄 없음(주석 제외, 작동 중인 장치와 작동하지 않는 장치 모두 동일한 빈 파일을 가짐)
  • /etc/securetty- 기본 Arch Linux(파일이 변경되지 않았으며 작동 중인 장치와 작동하지 않는 장치의 행이 동일함)
  • /etc/passwd- 644 파마
  • /etc/- 755 파마

해결책: 필수 ( /etc/pam.d/su-l그러나 그 안에 다른 파일은 없음 ) . 자세한 내용은 허용되는 답변을 참조하세요. 이제 문제가 해결되었으므로 이 질문에는 문제의 포괄적인 목록이 포함됩니다. 다른 분들에게 좋은 참고가 되길 바랍니다./etc/pam.d/pam_wheel.so use_uid

답변1

비로그인 셸에서 호출하는 스크립트가 아니라 로그인 셸을 생성할 때 호출되는 스크립트 중 하나에 문제가 있는 것 같습니다.

INVOCATION 섹션을 살펴보세요.man bash

내 콘텐츠는 다음과 같습니다

bash가 --login 옵션을 사용하여 대화형 로그인 셸 또는 비대화형 셸로 호출되면 먼저 /etc/profile 파일(파일이 있는 경우)에서 명령을 읽고 실행합니다. 파일을 읽은 후 ~/.bash_profile, ~/.bash_login, ~/.profile을 순서대로 찾아 존재하고 읽을 수 있는 첫 번째 파일부터 명령을 읽고 실행합니다.

...

로그인 쉘이 아닌 대화형 쉘을 시작할 때 bash는 파일이 존재하는 경우 ~/.bashrc에서 명령을 읽고 실행합니다. --norc 옵션을 사용하여 이를 비활성화할 수 있습니다. --rcfile file 옵션은 bash가 ~/.bashrc 대신 파일에서 명령을 읽고 실행하도록 강제합니다.

"작은 실수"를 위해 bash: /home/admin/.bashrc: Permission denied.

$~/.bashrc이는 admin 사용자의 HOME 환경 변수에 곧 액세스할 예정이고 myuser 사용자에게는 새 쉘을 생성할 때 bash가 수행하는 HOME 환경 변수에 액세스할 권한이 없기 때문입니다 .

답변2

나는 이 시스템과 이 문제가 발생하지 않은 유사한 시스템을 테스트했습니다 diff -rw. 찾아보니 이런 줄이 있더라구요/etc/pam.d/su -l/etc/pam.d/su-l주석 처리되지 않은:

auth           required        pam_wheel.so use_uid

일반적으로 이 요구 사항을 부과하지 않도록 주석이 달립니다. 다른 유사한 파일에는 /etc/pam.d/이 줄의 주석 처리가 제거되어 있지 않으므로 명령의 다양한 변형이 일관되지 않게 작동합니다.

나는 다음 줄을 주석 처리하여 문제를 해결했습니다.

# auth           required        pam_wheel.so use_uid

관련 정보