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機能しません。この問題は1つのリモートデバイスにのみ影響します。しかし、同じ構成を持つように見えるリモートデバイスがいくつかあります。彼らはすべて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ドキュメントと比較すると、それ自体に1つの変更があります。ただし、これらのバリエーションは、機能するシステムと問題のあるシステムの両方に存在します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

次の2つのファイルは簡単です。

~/.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

ログインしていないシェルが呼び出すスクリプトではなく、ログインシェルを作成したときに呼び出されるスクリプトの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環境変数にアクセスする権限がないためです。

おすすめ記事